Forum: Mikrocontroller und Digitale Elektronik MMC - wie CS steuern?


von Tilo (Gast)


Lesenswert?

Hallo

So langsam sollte das Thema MMC/SD Card an SPI durch sein.
Ich hänge allerdings gerade.

Ich habe den "ELM" Code, http://elm-chan.org, verwendet.
Die entsprechende IO Library habe ich angepasst.
Ich verwende einen ARM7 (aduc7020).

So lange der Schreibpuffer nur 512 Byte groß ist, funktioniert
alles prima. So bald der Puffer 2048 Byte groß ist, wird nicht
nur eineinzelner Block sondern mehrere Blöcke auf einmal geschrieben.

Leider schlägt das senden von mehreren 512Byte Blöcken fehl.
Ich vermute, dass ich entweder Blödsinn mit der CS-Leitung mache
oder nicht lange genug auf "Busy" nach einem Datenblock warte.

Ich habe zur CS Leitung keine genauen Infos gefunden. Auf den
meisten Diagrammen sind nur CLK, DI und DO abgebildet.

Ein Tranfser sieht in meinem Code folgendermaßen aus:

Zu erst wird CD deaktiviert, danach aktiviert (low=active)
Danach wird der CMD-Code aus 6 Bytes gesendet, die Antwort
empfangen usw.

Nach dem CMD-Code bleibt CS aktiv.

Bei einigen CMD-Codes wird danach gelesen oder geschrieben.

So bald der/die Datenblock(e) gesendet/empfangen wurde(n), wird CS 
deaktiviert.

Ich vermute hier liegt auch der Fehler. Bei einem "Block Write" werden
2 CMD-Codes vor dem Datentransfer gesendet (ACMD23 und CMD25).

Ich habe die PDF von Hitachi zu MMC-Cards gelesen. Hinten sind einige 
Beispiele. Da ist aber kein Beispiel dabei, wenn 2 CMD-Codes zu 
schreiben
benötigt werden.
Ausserdem scheint nach dem Hitachi Dokument CS zwischen CMD-Code und
Datenblock zu wechseln. Nach einem anderen TimingDokument bleibt CS,
bis die Datenblöcke übertragen wurden.

Wie wird CS richtig gesetzt?

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.