Kompilatorn jag kör är C30.
SD kortet är ett micro-sd från sandisk.
Det jag gjort för att debugga är följande:
1. kontrolelrat att jag får signaler på samtliga linor (SDI, SDO CLK och CLK, dat1(pin1) och dat1(pin8) = pullup,
2. verifierat pinout på SD korthållaren (8 pinnar) mot dspicen för att se så att de går rätt.
3. kontrollerat strömförsörjningen (3.3V) så att den är stabil under körning och även satt dit den 10uF avkopplingskondensator precis bredvid kortet.
När jag kör funktionen "MDD_SDSPI_MediaInitialize()" och stegar i koden så passeras första kontrollen
Kod: Markera allt
response = SendMMCCmd(GO_IDLE_STATE,0x0);
if((response.r1._byte == MMC_BAD_RESPONSE) || ((response.r1._byte & 0xF7) != 0x01))
{
status = FALSE; // we have not got anything back from the card
SD_CS = 1; // deselect the devices
return status;
}
Kod: Markera allt
timeout = 0xFFF;
do
{
response = SendMMCCmd(SEND_OP_COND,0x0);
timeout--;
}while(response.r1._byte != 0x00 && timeout != 0);
Jag har tittat på signalerna på oscilloskop på just denna kodsnutten och ser att kortet svarar med att skicka ut en 0a. Jag har bara 1 prob så jag ser inte när denna 0a kommer i förhållande till de andra byt'sen som skrivs.
Jag har även upptäckt att signalnivån på SDI och SDO ligger på ca 3.0V istället för på 3.3V. 0:an som skrivs når bara ner till ca 0.3V men ser väldigt stabli och fin ut, skarpa kanter och utan brus.
Jag tror att detta är en ledtråd på vägen men har inte lyckats lista ut varför signalnivåerna inte når sina max/min värden.
Någon som har ytterligare förslag till debugging?
Mvh/
Daniel Grafström