Code: Alles auswählen
// ist in der sd_raw.c
for(uint16_t i = 0; ; ++i)
{
response = sd_raw_send_command_r1(CMD_GO_IDLE_STATE, 0);
if(response == (1 << R1_IDLE_STATE))
break;
if(i == 0x1ff) // Hier ist irgendwo der fehler
{
unselect_card();
spi_rec_byte();
spi_high_frequency();
printf_P(PSTR("\n\rcard reset\n\r")); // habe ich selber eigefügt um die Fehlersuche zu erleichtern
return 0;
}
}
Stimmt. Dafür habe ich eine Datei "changelog-avr-webserver.txt" mit ins Zipfile gelegt. Wenn man da sucht findet man folgendes:DundeeFSK hat geschrieben:ab Version 1.03 wurde ja was am SD geändert
Bei der Initialisierung wurde der Befehl 0x41 durch den "application-specific" Befehl 0x55,0x41 ersetzt.sdkarte/sd_raw.c
219 Änderung: response = sd_raw_send_command_r1(CMD_SEND_OP_COND, 0);
In: // ACMD41 für "dünne" und "normale" SD-Karten (wil)
220 Einfg: response = sd_raw_send_command_r1(55, 0); // APP_CMD
221 Einfg: response = sd_raw_send_command_r1(41, 0); // SD_SEND_OP_CO
Als ich damals mal aus irgendwelchen Gründen die Initialisierung der SD-Karte überprüft habe, habe ich das Kommando ACMD41 auf die korrekte Folge 0x55, 0x41 umgesetzt. (R.Riegel hatte es inzwischen in seinem Original auch geändert). Eigentlich ist das CMD41 (ohne die führende 0x55) in der Doku als "reserved" gekennzeichnet. Aber einige Karten verstehen es wohl auch als ACMD41.The following table describes all the application specific commands supported/reserved by the SD
Memory Card. All the following commands shall be preceded with APP_CMD (CMD55).
...
CMD INDEX : ACMD41
SPI Mode : Yes
Argument : [31]Resetved bit [30]HCS [29:0]Reserved bits
Resp : R1
Abbreviation : SD_SEND_OP_COND
Command Description:
Sends host capacity support information and activates the card's initialization process. Reserved bits shall be set to '0'
Hallo Wil, danke erstmal für die tatkräftige Unterstützung.wil hat geschrieben: Bitte schaut daher doch mal nach, was für Karten ihr verwendet. Funktioniert die Initialisierung mit euren Karten wenn der Befehl " response = sd_raw_send_command_r1(55, 0); // APP_CMD" auskommentiert wurde?
Gruß
wil
bezieht sich auf diesen "Prototyp":sdkarte/sd_raw.h:127: warning: function declaration isn't a prototype
Code: Alles auswählen
uint8_t sd_raw_init();
Code: Alles auswählen
usart.h:139: error: expected declaration specifiers or '...' before 'FILE'
Code: Alles auswählen
#include <stdio.h>