SDCARD Nochmal

Gast #410896
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??????

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.