overseer schrieb:
> die sd karte hat 11 verschiedene zustände in denen sie jeweils andere
> befehle akzeptiert, richtig?
Mir ist nicht ganz klar, was du mit 11 Zuständen meinst. Es gibt eine
Anzahl CMDs und diese sind (fast) immer alle ausführbar auf die gleiche
Weise.
> da crc mit aktivieren des spi modus deaktiviert wird, ist es wohl nur
> für den cmd0 interessant, denn dort achtet die karte noch auf den 7bit
> crc teil, oder?
Genau, nach CMD0 (CMD8) wird die CRC nicht mehr beachtet.
> nur wie berechnet sich dieser teil? darauf habe ich noch keine antwort
> gefunden :/
> / jedenfalls keine für mich verständliche...das datenblatt wirft nur
> eine "formel" raus nur ist mir nicht so ganz klar was man da einsetzen
> soll :?
> s.43/ pdf seite 54 des datenblatts
Die Formel im Datenblatt ist auf Anhieb auch nicht unbedingt einfach zu
verstehen. Ich habe es auch nur schnell hinbekommen die zu berechnen,
weil ich die CRC32 in einer Vorlesung mal behandelt hatte. Und die CRC7,
die bei der SD-Karte verwendet wird, ist identisch zu berechnen, nur
eben mit einem anderen Generatorpolynom. Auf Wikipedia findest du einen
schönen Artikel zur Berechnung der CRC unter
http://de.wikipedia.org/wiki/Cyclic_Redundancy_Check
Wenn du dich an den Ablaufplan der Initialisierung einer SD-Karte laut
Spezifikation hälst, dann müsstest du noch per CMD8 die Spezifikation
der SD-Karte überprüfen (V1.x oder V2.x). Wobei CMD8 ebenfalls noch eine
gültige CRC7 benötigt.
Mein CMD8 sieht folgendermassen aus:
1 | // CMD8
|
2 | aucCmd[0] = 0x48;
|
3 | aucCmd[1] = 0x00;
|
4 | aucCmd[2] = 0x00;
|
5 | // VHS = 0001 (2,7V - 3,6V)
|
6 | aucCmd[3] = 0x01;
|
7 | // Check Pattern = 10101010
|
8 | aucCmd[4] = 0xAA;
|
9 | // CRC7 = 1000011 (0x43)
|
10 | // Danach folgt noch eine 1 als Stopbit wodurch 10000111 (0x87) zustandekommt
|
11 | aucCmd[5] = 0x87;
|
> stuff bits bedeutet das sie nich von belang sind/ nicht beachtet werden
> oder?
Genau. Der Einfachheit halber setze ich diese Bits immer 0.
Falls es sich um eine SD-Karte nach Spezifikation v2.x handelt kannst du
am Ende der Initialisierung per CMD58 dann noch feststellen, ob es sich
um eine SD oder SDHC Karte handelt (CCS Bit prüfen.
Ciao,
Rainer