Hi zusammen Ich möchte gerne mit meinem SD Karte mittels SPI ansteuern. Ich habe schon einiges dazu gelesen. Nun möchte ich wissen, ob ich die Kommandos richtig verstanden habe: (Werte Hexadezimal, Werte in ()Klammern Binär) Zuerst mal 74 Clocks FF FF FF (1111 1111 | 1111 1111 |1111 1111) Antwort: FF FF FF (1111 1111 | 1111 1111 |1111 1111) Dann das Kommando CMD0 40 00 00 00 00 95 (0100 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 1001 0101) Antwort: 01 (0000 0001) Wenn erfolgreich, dann CMD8 40 00 00 01 AA 87 (0100 0000 | 0000 0000 | 0000 0000 | 0000 0001 | 1010 1010 | 1000 0111) Antwort 1 AA (0001 1010 1010) Wenn erfolgreich, dann ACMD41 7A 00 00 00 00 C5 (0111 1010 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 1101 0101) Antwort 00 (0000 0000) =>> Hier bekomme ich immer 01 00 FF 80 00 Kann mir jemand sagen, ob diese initialisierungskommandos richtig sind und was meine erhaltene Antwort heisst? Danke Mfg Lanoa
Vergleiche einfach mit einer bewärhten Library. Die avrfat32 ist recht überschaubar und gut dokumentiert. Der Source enthält hilfreiche Kommentare. http://www.mikrocontroller.net/articles/AVR_FAT32
Oder besser noch, übernehme die 3 Low-Level Funktionen aus einer fertigen Library. Historisch gewachsen gibt es mehrere Arten von Initialisierungen. Deine Routine muss erst mal herausfinden, wie die Karte angesprochen werden möchte.
Noah Lang schrieb: > Nun möchte ich wissen, ob ich die Kommandos richtig verstanden habe: > (Werte Hexadezimal, Werte in ()Klammern Binär) Da bietet es sich doch an einfach nachzulesen: https://www.sdcard.org/downloads/pls/simplified_specs/part1_410.pdf > Zuerst mal 74 Clocks > FF FF FF (1111 1111 | 1111 1111 |1111 1111) > Antwort: FF FF FF (1111 1111 | 1111 1111 |1111 1111) Das sieht eher nicht nach 74 Clocks aus.
Noah Lang schrieb: > Wenn erfolgreich, dann CMD8 > 40 00 00 01 AA 87 > (0100 0000 | 0000 0000 | 0000 0000 | 0000 0001 | 1010 1010 | 1000 0111) > Antwort 1 AA (0001 1010 1010) Das wäre aber wegen der 0x40 nochmal CMD0. Die angegebene Antwort kann auch nicht stimmen, das sind entweder 4 Bit zu viel oder zu wenig. > Wenn erfolgreich, dann ACMD41 > 7A 00 00 00 00 C5 > (0111 1010 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 1101 0101) > Antwort 00 (0000 0000) Und die 0x7a hier wäre READ_OCR und nicht APP_CMD.
Befinde mich am gleichen Thema. Mich würde auch der Initvorgang stark interessieren. Hatte dazu folgende Literatur gefunden: http://www.uni-koblenz.de/~physik/informatik/ECC/sd.pdf Leider komm ich auch damit nicht weiter...
Mit euren Änderungen sieht es so aus: Zuerst mal 74 Clocks FF FF FF FF FF FF FF FF FF FF (1111 1111 ... 1111 1111) Antwort: FF FF FF FF FF FF FF FF FF FF (1111 1111 ... 1111 1111) Dann das Kommando CMD0 40 00 00 00 00 95 (0100 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 1001 0101) Antwort: 01 (0000 0001) Wenn erfolgreich, dann CMD8 48 00 00 01 AA 87 (0100 1000 | 0000 0000 | 0000 0000 | 0000 0001 | 1010 1010 | 1000 0111) Antwort 1 AA (0001 1010 1010) > Vergleiche einfach mit einer bewärhten Library. Die avrfat32 ist recht > überschaubar und gut dokumentiert. Der Source enthält hilfreiche > Kommentare. > http://www.mikrocontroller.net/articles/AVR_FAT32 Wo sehe ich hier die Kommandos? > Da bietet es sich doch an einfach nachzulesen: > https://www.sdcard.org/downloads/pls/simplified_sp... Habe ich schon angeschaut, danke > Wenn erfolgreich, dann ACMD41 > 7A 00 00 00 00 C5 > (0111 1010 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 1101 0101) > Antwort 00 (0000 0000) > Und die 0x7a hier wäre READ_OCR und nicht APP_CMD. Oh, ja stimmt. Laut dem SPI - Spek - Dokument wäre das CMD58. Um die ACMD Kommandos zu nutzen muss ich aber zuerst das Kommando CMD55 schicken. Das CMD 55 (APP_CMD)entspricht: 77 00 00 00 00 65 (0111 0111 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 0110 0101) und danach ACMD 41 (SD_SEND_OP_COD)
So, jetzt weiss ich warum es nicht gegangen ist. Also zu erst mal meine Initialisierungsroutine (die Verbesserte) funktionierte mit einer SanDisk 2GB SD Karte. Bei den SDHC Karten sieht es etwas anders aus. Folgende Karten funktiionierten: Kingston 8GB Class 10 SDHC Card Samsung 8GB Class 10 SDHC Folgende Karten funktionierten nicht!: SanDisk 4GB Class 4 SDHC Card SanDisk Ultra 8GB Class 10 SDHC Card Fairerweise habe ich SanDisk die Chance gegeben, Stellung dazu zu nehmen. Der deutsche Vertrieb liess mich im Regen stehen und meinte, dass die SPI Unterstützung nicht zu ihrem "Abdeckungsgebiet" gehört. Der englische Support zeigte sich etwas "Benutzerfreundlicher". > I understand that you want to use the Ultra 8 GB microSDHC card in SPI > mode (Serial Peripheral Interface) however you cannot manage to do this. > With another 2 GB microSD card, you are not experiencing issues however. > A first important thing would be that the host device supports indeed > SDHC cards. > SD/SDHC/SDXC Specifications and Compatibility > Regarding your question, please note that all SanDisk cards are > manufactured according to the specifications of the SD Association, of > which SanDisk is co-founder. On this site, you can find more information > about this. Also you can become member of the site should you require > additional information. Das ganze wurde dann an einenen Techniker "eskortiert" > We have escalated (eskaliert?) your case for review by an L2 Technician. > We will provide a response to you shortly. Als letztes bekam ich diese Antwort: > We would like to inform you that our technical support is limited to > basic functionality in retail consumer devices. We do not provide > engineering level support. Furthermore 2GB cards fall under the microSD > spec and 8GB cards fall under the microSDHC spec. > If your device is designed to the correct specifications you should not > have an issue with our microSDHC cards. If you suspects the card is > defective we would need you to test the card in a common retail device > such as a windows computer with card reader or a mobile phone to > establish the card as problematic. At that point we will be happy to > replace the card if it’s within warranty. Leider komme ich auch hier nicht weiter. Also wenn ich SanDisk Karten kaufe, werde ich "klatschnass". Schönen Tag Noah (Ich hoffe mal, dass mein Post hier verweilen darf, ansonsten wird es noch viele Fehlkäufe geben.)
Anbei noch mein Ablauf mit den gesendeten und empfangenen Bits. Hier mit der Kingston 8GB Karte.
Ich hatte ganz ähnliche Erfahrungen mit Sandisk und anderen Marken. Sie leisten einfach keinen Support für Entwickler. Das erklärt, warum in sämtlichen Bedienungsanleitungen von Geräten mit SD Karte steht, man solle im Zweifelsfall eine andere Karte versuchen. Irgendwo muss der niedrige Preis ja herkommen.
Noah Lang schrieb: > Anbei noch mein Ablauf mit den gesendeten und empfangenen Bits. > Hier mit > der Kingston 8GB Karte. Wozu dienen die CMD1? Wenn die Karte bei ACMD41 keinen Fehlercode sendet, brauchst Du CMD1 nicht - nur MMCs brauchen CMD1. Der Timeout scheint via stumpfer Widerholung der Befehle zu erfolgen ohne dass sich jemand mal den Rückgabecode anschaut. Denn sobald ACMD41 den Code 0 zurück gibt kann man mit der Karte arbeiten. Außerdem sendset Du ACMD41 einmal mit und einmal ohne das HCS Bit. Damit könntest Du Dir Probleme mit vielen SDHC Karten einhandeln. Denn bei ACMD41 ohne HCS müssten sie eigentlich die Funktion einstellen, weil der Controller dann die SDHC Addressierung nicht unterstützt.
Warum das CMD1? Weil mein Gerät (das ich vor ein paar Jährchen gebaut habe) auch weiterhin MMC Karten unterstützen sollte. Das mit dem Timeout ohne Rückgabewertabfrage habe ich bewusst so gemacht. Ich habe einige Abläufe mit verschiedenen Karten getestet. Dabei erkannte ich, dass sich kleine SD Karten (<4GB ohne HC) sich auch mit CMD1 initialisieren lassen. Zu den HCS Bits habe ich komische Erfahrungen gemacht. Die Kingston Karte schert sich nicht um die Bits, lässt sich auch mit HCS = 0 initialisieren. Die Samsung Karte wird nur mit HCS = 1 initialisiert. Mfg
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.
