Hi, ich versuche gerade die Funktion Write_Command_MMC vom o.g., hier vielzitierten Autor zu verstehen. Ich habe auch eine SD-Dokumentation. Was ich nicht finde, ist die Erklärung zum Bereich "Wartet auf ein gültige Antwort von der MMC/SD-Karte" - Wo steht denn, daß die SD-Karte solange FF sendet, bis das Kommando akzeptiert wurde? Und wieso gerade 100 Versuche Timeout / Wo steht, wie lange die Antwort dauern kann/sollte? Ich finde das in der Doku nicht.. :-( Die Funktion komplett:
1 | //############################################################################
|
2 | //Sendet ein Commando an die MMC/SD-Karte
|
3 | unsigned char Write_Command_MMC (unsigned char *CMD) |
4 | //############################################################################
|
5 | {
|
6 | unsigned char tmp = 0xff; |
7 | unsigned char Timeout = 0; |
8 | |
9 | //set MMC_Chip_Select to high (MMC/SD-Karte Inaktiv)
|
10 | MMC_Disable(); |
11 | |
12 | //sendet 8 Clock Impulse
|
13 | Write_Byte_MMC(0xFF); |
14 | |
15 | //set MMC_Chip_Select to low (MMC/SD-Karte Aktiv)
|
16 | MMC_Enable(); |
17 | |
18 | //sendet 6 Byte Commando
|
19 | for (unsigned char a = 0;a<0x06;a++) //sendet 6 Byte Commando zur MMC/SD-Karte |
20 | {
|
21 | Write_Byte_MMC(*CMD++); |
22 | }
|
23 | |
24 | //Wartet auf ein gültige Antwort von der MMC/SD-Karte
|
25 | while (tmp == 0xff) |
26 | {
|
27 | tmp = Read_Byte_MMC(); |
28 | if (Timeout++ > 100) |
29 | {
|
30 | break; //Abbruch da die MMC/SD-Karte nicht Antwortet |
31 | }
|
32 | }
|
33 | |
34 | return(tmp); |
35 | }
|