Hi Daniel,
Danke für die Antwort! Das die builtin-Funktionen vom CCS nicht so so ganz mit dem PIC24 zusammenpassen habe ich auch schon bemerkt :-(
Zur SD-Karte:
Ein entscheidenderes Problem sehe ich bei der SPI-Taktrate. Diese sollte bei der Initialisierung der Karte <= 400 kHz betragen, je nachdem welchen CPU-Takt Du verwendest, liegst Du mit SPRE=110, PPRE=00 natürlich deutlich darüber! Also lieber SPRE=111, PPRE=11.
Der Takt sollte mit SPRE=110 (2:1) und PPRE=00 (64:1) unter 400kHz liegen. Laut Tabelle 14-1 aus dem Datenblatt vom Pic24 ergibt das eine Frequenz von 125kHz (bei Fcy = 16 MHz). Lässt sich mit dem Oszi auch korrekt messen.
Mit CKE=0 und CKP = 1 bekomme ich jetzt auch eine Antwort von der Karte.
Allerdings beendet die Karte die Initialisierung von ACMD41 nicht. Ich bekomme auf ACMD41 immer die Antwort 0x01. Wenn die Initialisierung erfolgreich war sollte auf ACMD41 doch eigentlich 0x00 von der Karte zurückkommen oder?
Der code zur Initialisierung sieht bei mir bis jetzt so aus (cmd0 -> cmd8 -> cmd55 -> acmd41):
...
if (sd_command(cmd0,0x00,0x00,0x00,0x00,0x95) ==1 ){ //if R1 is received without errors
Timer1 = 100;
cmd41_res = 1;
if(sd_command(cmd8,0x00,0x00,0x01,0xaa,0x87) ==1){ //if no errors in first byte(=R1) of R7
for (n = 0; n < 4; n++) ocr[n] = MMCIn(); //receive 4 bytes of OCR-Card info
if (ocr[2] == 0x01 && ocr[3] == 0xaa) { //the card can work at vdd range of 2.7-3.6V and check pattern is echoed back correctly
while(timer1!=0 && cmd41_res !=0 ){
if (sd_command(cmd55,0x00,0x00,0x00,0x00,0x01) <= 1) {
cmd41_res=sd_command(cmd41,0x00,0x40,0x00,0x00,0x01); // ACMD41 with HCS bit
timer1--;
}
else
return MMC_ERROR;
}
...
Woran kann es liegen, wenn die Karte auf ACMD41 nie mit 0x00 antwortet?
Schöne Grüße
Flo