Hallo Forum, ich habe schon fleißig gesucht im Forum. Mein Problem habe ich aber nicht gefunden. Ich verwende einen MSP430F169 und versuche eine SD-Karte zu lesen. Dabei gehe ich wie im Dokument slaa281a.pdf von TI vor. Allerdings habe ich SIMO und SOMI vertauscht, weil das offensichtlich falsch dokumentiert wurde. Alle Anschlüsse gehen direkt von MSP nach Kartenhalter (mit ca 5cm Flachbandkabel). Den Quellcode habe ich ebenfalls von TI. Es geht auch schon so einiges. Die Karte wird initialisiert und ich kann auch darauf schreiben (mmcWriteBlock). Aber ich kann NICHT lesen. mmcReadBlock kommt immer mit Fehler MMC_DATA_TOKEN_ERROR zurück. Häh? Schreiben ja, lesen nein?!?! Was soll das? Kennt das Problem jemand oder hat vielleicht einen Tip für mich? Flankensteilheit, Verbindungsprobleme, Pegel o.ä. kommt eigentlich nicht in Frage, wenn ich doch schreiben kann, oder? Vielen Dank schon mal für's Lesen. Gruß Uli
Gast
#656290
Hatte ich auch und habs auch nicht hinbekommen. Falls Du eine Lösung findest wäre ich sehr daran interessiert. Schreiben kann ich auch ohne Probs, aber lesen... Greets
Gast
#656299
Vieleicht ist das Timeout hier zu kurz:
char mmcGetXXResponse(const char resp)
{
//Response comes 1-8bytes after command
//the first bit will be a 0
//followed by an error code
//data will be 0xff until response
int i=0;
char response;
while(i<=1000)
{
response=spiSendByte(0xff);
if(response==resp)break;
i++;
}
return response;
}
Ändere doch mal auf
while(i<=65000)
Hallo Holger, ich hab's gerade probiert. Geht leider auch nicht :-( Gruß Uli
Heureka :-) Die Leute von TI haben die Parameter und den Rückgabewert der Funktion mmcGetXXResponse() als char definiert. Die geforderte Response zum Lesen ist aber 0xFE, sodass ein strenger Compiler (wie meiner) signed mit unsigned vergleicht und mit dem Kopf schüttelt, weil -2 != 0xFE. Wenn man die Compiler option "plain_char = unsigned" setzt, geht's. Oder man schreibt alle Funktionen auf unsigned char um... Gruß Uli
Glückwunsch!!! Darauf soll mal einer kommen...
Und warum benutzt du dann nicht stdint's wie uint8_t?
Weil der Code nicht von mir ist, sondern von TI :-P
Mist! :-) Aber ändere doch den Rückgabeparameter auf uint8_t, statt Compilerparameter dafür zu verändern. Aber verdammt verzwickter "Fehler", muss man schon sagen...
Gast
#656715
Bist du dir sicher, dass Schreiben klappt? Wenn du ja nichts lesen kannst :-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.