www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD-Karte CRC 4-Bit-Modus


Autor: Albi G. (deralbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Ich hab irgendwie ein kleines Problemchen ;-) Ich sitze am 4-Bit-Modus 
der Sd-Karten. Lesen funktioniert schon super.
Mein Problem ist eher das Schreiben. Jeder 512-Byte-Block ist per CRC 
gesichert. Ist der übermittelte CRC falsch, so wird der Block verworfen.
Der CRC-Check lässt sich leider nicht ausschalten.
Das schreiben im 1-Bit-SD-Modus funktioniert. Dort ist der CRC klar.

Im 4-Bit-Modus sagt das SD-Karten-Datenblatt:
>When the wide bus option is used, the data is transferred 4 bits at a time 
>(refer to Figure 3-8). Start and end bits, as well as the CRC bits, are 
>transmitted for every one of the DAT lines. CRC bits are calculated and >checked 
for every DAT line individually.

So wie ich das interpretiere muss man also jedes Bit, das auf einer 
Leitgun liegt in den leitungsspezifischen CRC integrieren. Auf einer 
Leitung liegen ja immer nur 2Bit eines Bytes. (4Bit-parallel interface 
halt) So benötigt man 4 Bytes, bis ein Bayte auf einer Leitung 
übertragen wurde. Diese Byte verwende ich dann für die CRC-Berechnung.
Bisher klapt es konstante Daten zu schreiben. (0x53, 0x53, 0x53, ..)
Was nicht geht: Datenmatsch. (0x88, 0xff, 0x46, 0xA5, ...)

Irgendwas ist da also Faul -> entweder an der CRC-Generierung oder an 
der CRC-Übertragung.
Ich habe daher mal einen Brute-Force-Test gemacht:
Jeweils ein Datenblock mit Nullen gefüllt und am Ende ein Byte wo nur 
ein Bit gesetzt ist. So wird eine Leitung nur ein einziges mal 
beansprucht, sodass dort der CRC ungleich 0 wird.
Der CRC wurde dann auf jeder der 4 Leitungen einfach durchgetestet.
Also um einmal eine 0x02 zu übertragen wurde auf DAT0 bis DAT3 der CRC 0 
bis 65536 übertragen während die anderen Leitungen CRC==0 hatten.
Raus kam zum schluss das hier: www.der-albi.de/Disp3.jpg

Überall wo "Test.." steht wurde kein_ CRC auf _irgendeiner Leitung 
akzeptiert. Bei 0x01 hingegen war der CRC 4129 auf DAT0 gültig.

Fazit: irgendwas stimmt nicht. Da 0x02 z.B. auf DAT1 irgendeinen 
gültigen CRC haben müsste.

Vllt hat jedmand schonmal damit herumexperimentiert und weiß mehr...!?
Ich würde den code gerne zum Schluss, wenn er funktioniert 
veröffentlichen.

MFG

Autor: Albi G. (deralbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grml. Hab nochwas vergessen:
Ich hatte noch einen weiteren Test durchgeführt:
Ich hab diesen 0-Bytes-Block-außer[511]=0x02 per CardReader auf die 
Sd-Karte geschrieben. Dann hab ich diesen Block ausgelesen.
Die SD-Karte gibt ja in dem Fall den CRC mit. Diese CRCs habe ich 
gespeichert und versucht den ausgelesenen Block mit den CRCs wieder zu 
schrieben. Nichtmal das ging.
Komisch war auch, das der CRC auf einer Leitung ankam, auf der das Bit 
gar nicht gesendet wurde. Aber wenigstens das stimmte: es war nur eine 
Dat-Line, deren CRC ungleich 0 war.
hmmh. Ich hoffe das hilft Wieter ;-)

Autor: Albi G. (deralbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmh nuja. Vergesst es, Leute.
Ich habs geschaft. Ich habe mit BruteForce den CRC für eine Leitung 
generiert. Diese Angabe hat mit weitergeholfen, den CRC-Algo mit der 
richtigen Reihenfolge der Bits zu füttern. So weit so gut.
Der Code kommt gleich in die Codesammlung.

MFG
...und Danke fürs Mitlesen ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.