Hallo an alle, ich versuche verzweifelt eine SDHC-Card (Sandisk 4GB Class2) zum laufen zu bringen, aber diese reagiert nicht einmal auf CMD0. Ich kann alle möglichen SD-Cards ansprechen mit meiner Software, das funktioniert wunderbar, auch habe ich in anderen Beiträgen schon gesucht und die Initialisierung nach Datenblatt duchgeführt, doch diese Karte hält es nicht für nötig in irgendeiner weise zu Antworten :-(. Über einen Kartenleser kann ich auch problemlos auf diese zugreifen. Hat schon irgendjemand ähnliche Erfahrungen gemacht?
Ist alles i.O. Ich habe die mindestens 74Clocks die man am Anfang bringen soll schon erhöht bzw. auch extrem erhöht aber ohne Ergebniss.
@Siggi das ist der Ausschnitt mit der Initialisierung ist für MSP430F149 an 8Mhz, was mich wie gesagt wundert ist, dass "normale" SD-Cards einwandfrei funktionieren
1 | // Initialisieren
|
2 | char init_SD (void) |
3 | {
|
4 | int i; |
5 | unsigned char antwort=0x00; |
6 | unsigned char antworten[8]; |
7 | |
8 | initSPI(0x14);//SPIGeschwindigkeit auf 125Khz |
9 | CS_HIGH(); |
10 | for(i=0;i<=10;i++) |
11 | spiSendByte(0xff); |
12 | //Send Cmd0
|
13 | for(i=0;i<=200;i++){ |
14 | CS_LOW(); |
15 | SendCmd(0x00,0x00,0x95); |
16 | antwort=WARTE_ANTWORT(); |
17 | CS_HIGH(); |
18 | if (antwort==0x01) break; |
19 | }
|
20 | if (antwort!=0x01) return TIMEOUT_ERROR;// |
21 | spiSendByte(0xff); |
22 | |
23 | CS_LOW(); |
24 | SendCmd(0x08,0x0122,0x95); |
25 | antwort=WARTE_ANTWORT(); |
26 | |
27 | // setup usart1 in spi mode
|
28 | void initSPI (unsigned char teiler) |
29 | {
|
30 | ME2 |= USPIE1; // Enable USART1 SPI mode |
31 | UTCTL1 = CKPH | SSEL1 | SSEL0 | STC; |
32 | UBR01 = teiler; |
33 | UBR11 = 0x00; // -"- |
34 | UMCTL1 = 0x00; // no modulation |
35 | UCTL1 = CHAR | SYNC | MM; // 8-bit SPI Master **SWRST** |
36 | while (!(IFG2 & UTXIFG1)); |
37 | }
|
Danke für die Antworten, das Problem hat sich erledigt. Ich habe mir eine andere SDHC Card besorgt und mit der hat es funktioniert. Nachdem ich dann alle kleinen (hoffentlich alle) Fehlerchen aus meinem Programm entfernt habe habe ich das Board ohne MSP-FET Adapter laufen lassen und siehe da auch mein Problemkind unterhält sich aufeinmal mühelos mit dem Controller. Ich kann es mir nicht erklären warum, bin aber trotzdem mit dem Ergebniss zufrieden :-)
64 Clocks reichen nicht immer, um auf ein R1 zu warten. Bei manchen SD-Karten braucht´s über 500 Clocks - ist ganz verschieden. Wirklich sicher funktioniert das nur über ein Timeout <0.5 sek.
Sorry, ich habe mich falsch ausgedrückt: 64 Zyklen a 8 Clocks hätte ich schreiben müssen
Reicht trotzdem nicht - ich hab´s schon richtig verstanden mit den Zyklen ;-) Ich meinte auch 500 Packete zu je 8 Clocks.
Danke für den Tipp. Dann werde ich mein Prog dahingehend ändern.
Ja - das Finden dieses Problems, das sich nur manchen Karten geäußert hat, hat bei mir auch etwas länger gedauert ;-)
... Timeout <0.5 sek ... Das ist Blödsinn. Erst denken - dann posten.
Siggi, laß es. Wenn Du wirklich etwas beitragen kannst, dann ´raus damit. 0.5 Sekunden Timeout ist ein empirisch ermittelter Wert für die längstmögliche Wartezeit auf die Antwort von verschiedenen getesteten Karten. Die langsamste Karte brauchte etwa 320 ms, was kleiner 0.5 Sekunden ist.
Hallo, funktionieren SDHC Karten mit 8 bzw 16 usw GB auch im SPI MODE?? Hat da jemand erfahrung? Oder gibt es da nur ein paar Ausnahmen bei den 4GB Karten... lg
Es funktionieren alle SDHC-Karten im SPI-Mode. Ohne Ausnahmen! Ansteuerung wie normale SD-Karte, lediglich die Adressierung ist jetzt eben nicht mehr Byte-Adresse, sondern Block-Adresse. Das ist auch schon alles (für die Erbsenzähler: natürlich gibt es auch zusätzliche Befehle, aber die braucht man nicht unbedingt).
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.