Block-Lesen von SD-Karte klappt nicht

Gast #316569
Lesenswert?

Hallo,

ich habe folgendes Problem: ich kann meine SD-Karte ansprechen und
Register wie CID, CSD usw. auslesen. Wenn ich versuche einen Datenblock
von der Karte zu lesen, kriege ich ständig 0x20 zurück, was laut Doku
"Address Error" heißen soll. Also, das heißt für mich, dass ich eine
falsche Adresse schicke, aber in der Doku steht nichts darüber, wie man
die Karte adressiert. Ich schicke folgendes Kommando:
"READ_SINGLE_BLOCK" (CMD17), "0x00" (soll Adresse Null heißen).

Was mache ich falsch.

Andy
Gast #316571
Lesenswert?

Wie meinst du das, meine Funktione sieht folgendermaßen aus:

unsigned char SD_WriteCommand(unsigned char cmd, unsigned long data,
unsigned char crc)
{
  unsigned char i, temp;



  SPI_SendeByte(0x40 | cmd);
  SPI_SendeByte(data >> 24 & 0xFF);
  SPI_SendeByte(data >> 16 & 0xFF);
  SPI_SendeByte(data >>  8 & 0xFF);
  SPI_SendeByte(data & 0xFF);
  SPI_SendeByte(crc);


  SPI_SendeByte(DUMMY);    // 8 Dummy-Clocks senden
Gast #316574
Lesenswert?

Hi,

wie ich bis jetzt das Ganze verstanden habe, sind die Adresse für einen
 bestmmten Block immer das Vielfache von 512, also ich beginne mit 0,
dann kommt 512, 1024 usw. Wenn ich aber versuche Block 0 auszulesen,
also auf der Karte der MBR, kriege ich nicht das, was ich mit einem
Hex-Editor auf dem PC von der Karte lese.

Also, wie oben bereits erwähnt, kann ich mit meiner
SD_WriteCommand(..)-Funktion die Karte resetten, initialisieren, CID
und andere Register auslesen.

Andy
Gast #316580
Lesenswert?

Hallo nochmals

Der Code von Ulrich Radig (www.ulrichradig.de) scheint mir ebenfalls
sehr zweckmässig und einfach zu bedienen.

Was mich in dem Zusammenhang noch interessieren würde: Wie kann man die
SD-Cards - ohne Dateisystem - auf dem PC auslesen? Oder kommt man nicht
darum herum, die Daten von der eigenen Schaltung auslesen zu lassen und
z.B. per serielle Schnittstelle an den PC zu senden?

Gruss

Michael
Gast #316581
Lesenswert?

hallo zusammen,

@mr.chip:
Unter Linux einfach /dev/sd* öffnen und lesen/schreiben.

Unter Windoze kommt man über "\\.\i:" (i der laufwerksbuchstabe
der SD-card) an das raw-device, dazu muß man aber ein eigenes program
schreiben oder suchen.

Ein 'floppy' raw write für NT gibt es irgendwo im netz (NTRawwrite.c
wenn ich mich richtig entsinne), das kann man dan entsprechened
abänderen zum lesen.

Olaf
Gast #316582
Lesenswert?

>> Unter Windoze kommt man über "\\.\i:" (i der laufwerksbuchstabe
der SD-card) an das raw-device, dazu muß man aber ein eigenes program
schreiben oder suchen.

Achso. Mit Java sähe dies dann etwa so aus(?):

FileInputStream in = new FileInputStream("\\.\i:");
in.read(...);

Oder heisst es FileReader?
Gast #316584
Lesenswert?

"\\\\.\\i:" da ein \ in C/Java escaped werden muß, so daß ein
\ im string auftaucht. Weiter ist ein Stream wohl falsch, da es ein
"block-device" ist.

Sollte wohl eher von der 'RandomAccessFile' class abhängen.

Olaf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren