Hallo Leute,
Ich habe schon alles versucht. Ich schaffe es aber nicht eine
MMC/SD-Karte zu sperren bzw. zu entsperren.
Meine Routinen zum Lesen und Schreiben von Datenblöcken funktionieren
soweit richtig.
Wie gesagt, nur das Setzen eines Passwortes schlägt fehl:
1 | // Blocklänge festlegen (=CMD16) auf 8 Byte
|
2 | mmc_sendCommand (16,8);
|
3 | // Wir erwarten 0 als Antwort
|
4 | responseR1(0);
|
5 |
|
6 | // Kommando zum Setzen des PW (=CMD42) und Stuffbits als Argument
|
7 | mmc_sendCommand (42,0xFFFFFFFF);
|
8 | // Wir erwarten 0 als Antwort
|
9 | responseR1b(0);
|
10 |
|
11 | // Startbyte senden
|
12 | mmc_sendByte(0xFE);
|
13 | // Datenblock senden
|
14 | mmc_sendByte(5); // Lock und setPW
|
15 | mmc_sendByte(6); // PW ist 6 Bytes lang
|
16 | mmc_sendByte('1'); // Ab hier das PW selbst
|
17 | mmc_sendByte('2');
|
18 | mmc_sendByte('3');
|
19 | mmc_sendByte('4');
|
20 | mmc_sendByte('5');
|
21 | mmc_sendByte('6');
|
22 | // 16Bit-CRC senden (Dummy)
|
23 | unsigned char i;
|
24 | for (i=0; i<2; i++) mmc_sendByte(0xFF);
|
25 |
|
26 | // Wir erwarten DATEN KORREKT ERHALTEN
|
27 | mmc_wait_DataResponse();
|
Das Lustige ist, das verschiedene Karten verschiedenes Verhalten zeigen.
Eine Karte gibt ALLES OK zurück und ist danach aber nicht gesperrt, eine
andere "hängt" sich direkt nach dem Senden des CRC, also vor dem letzten
"mmc_wait_DataResponse()" quasi auf. Es kommen nur noch Nullen als
Antwort (was BUSY bedeuten sollte), aber egal wie lange man wartet es
tut sich nix mehr (Nullen bleiben). Nur ein Trennen der Karte von VCC
und erneutes Anschließen erweckt sie wieder zum Leben.
Hat irgendwer vielleicht ne Ahnung, wo das Problem liegt oder vielleicht
sogar schon Code?
Da die Daten unbedingt vor Fremdzugriff geschützt werden müssen, wäre
dieses Feature sehr wichtig.
Vielen Dank im Voraus,
Erik