Forum: Compiler & IDEs SDCARD Nochmal


von Hans Peter (Gast)


Lesenswert?

Hallo

Habe nun die SDCARD am Hardware SPI.

Wenn ich eine Formatierte Fat16 SDCARD einlege und das Beispiel von
Ullrich radig ausprobiere geht es auch schön er liest mir das
Rootverzeichniss und auchj die mmc.txt aus..


Nun will ich aber auch mal was schreiben und das icht unter Fat sondern
Blockweise.


char buffer[513];
for (i=0;i<512;i++)
{
buffer[i]='B';
}
buffer[512]='\0';

//0= Startadresse

Wenn ich mit mmc_write_sector(0,&buffer[0]); was schreibe kommt =0
zurück das hesit es wurde etwas geschrieben.
Er müsste jetzt 512 Byte mit B schreiben.

Nun will ich diesen Block lesen aber hier gibt sein Problem

mmc_read_sector(0,&buffer[0]);

//Routine zum lesen eines Blocks(512Byte) von der MMC/SD-Karte
U08 mmc_read_sector (U32 addr,U08 *Buffer)
//###################################################################### 
######
{
  //Commando 16 zum lesen eines Blocks von der MMC/SD - Karte

  U08 cmd[] = {0x51,0x00,0x00,0x00,0x00,0xFF};

  /*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben,
    addr wird von Blocks zu Bytes umgerechnet danach werden
    diese in das Commando eingefügt*/

  addr = addr << 9; //addr = addr * 512

  cmd[1] = ((addr & 0xFF000000) >>24 );
  cmd[2] = ((addr & 0x00FF0000) >>16 );
  cmd[3] = ((addr & 0x0000FF00) >>8 );
    mmc_read_block(cmd,Buffer,512);


  return(0);
}
Beim Lesen springt er
hier raus.

//###################################################################### 
######
//Routine zum lesen des CID Registers von der MMC/SD-Karte (16Bytes)
void mmc_read_block(U08 *cmd,U08 *Buffer,U16 Bytes)
//###################################################################### 
######
{



  //Sendet Commando cmd an MMC/SD-Karte

//Hier springt er raus!!!!!!!!!!!!!!!!!

  if (mmc_write_command (cmd) != 0)
      {
-->>       return;
      }

  //Wartet auf Start Byte von der MMC/SD-Karte (FEh/Start Byte)

  while (mmc_read_byte() != 0xfe){
  };

  //Lesen des Bolcks (normal 512Bytes) von MMC/SD-Karte
  for (U16 a=0;a<Bytes;a++)
    {
    *Buffer++ = mmc_read_byte();
      }

  //CRC-Byte auslesen
  mmc_read_byte();//CRC - Byte wird nicht ausgewertet
  mmc_read_byte();//CRC - Byte wird nicht ausgewertet

  //set MMC_Chip_Select to high (MMC/SD-Karte Inaktiv)
  MMC_Disable();
  return;
}


Warum dieses.

Muß man mit FAT etwa auch schreiben??????

von Hans Peter (Gast)


Lesenswert?

Aslo FAT tut er lesen wenn ich mait Fat 16 formatiere und ein Ordner
anlege ließt er ihn auch.

Ist es möglich im RAW Format zu schreiben und diese dann wieder zu
lesen????

von Sebastian (Gast)


Lesenswert?

Möglich ist es definitiv.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.