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
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
versuch mal mit CMD16 SET_BLOCKSIZE selbige auf 512 zu setzen einige MMC-Cards wollen unbedingt mit 512 arbeiten und kennen nix anderes Gruss
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
wenn du willst kann ich dir meine sd/mmc assembler routinen schicken, da geht alles einwandfrei ^^ bräuchte nur deine mail.. :p
@kalle: Würdest du das auch für mich tun? philipp_burch@gmx.ch Danke!
@kalle: für welchen Controller hast du das programmiert? Andy
atmega16 mit hardware spi, is aber natürlich auf jeden anderen (avr) controller mit hardware spi portierbar. @philipp: sorry hab dich ganz vergessen ^^ ich such gleich mal :p
Hallo Dürfte ich auch haben? michaelbieri[ät]gmx[punkt]ch Gruss Michael
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
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
>> 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?
oder man benutzt das programm winhex, http://www.winhex.de/ damit kannst du in der trial version auf die platte/mmc schauen. hardware technisch. ich finde es gut. mfg
"\\\\.\\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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.