10-05-2012, 06:47 PM
(Seda postitust muudeti viimati: 10-05-2012, 06:49 PM ja muutjaks oli felch.)
Hei!
Tegin säärase lolluse et hakkasin C-keelt katsetama. Vaja oli koodi, mis tomiks SD-kaardile logerina ja et ka USB oleks küljes. MC-l on säärane koodinäide kenasti olemas.
Tõmmata saab terve projekti, seega võiks nagu toimida aga....muidugi mitte. Vähemasti mina ei suutnud oma tervelt 2-päevase kogemusega seda käima ajada: SD-kaart ei vasta üldse. Peale pikka uurimist sai ossiga välja selgitatud, et kaardile saadetakse valed käsud. Kirjutasin jäigalt koodi õiged käsud ja vastus tuligi !
Aga koodi ma parandada ei oska. SD-SPI.c failis on käskude tabel, kus ka CRC'd ette arvutatud. SEalt indekseerides peaks õiged baidid kätte saama. Debugger n'äitab, et igal katsel loetakse erinev (vale) bait !!! Miks?
Funktsioonile saadetav indeksibait muutujas "cmd" on õige (esmalt = 0 ehk kaardi CMD0).
Aga CmdPacket.cmd mis loetakse tabelist sdmmc_cmdtable[cmd] on vale.
Mina siit edasi minna ei oska - milles kamm?
Kompilaator on Microchipi C18. Vajalikud võtmed võiksid ju olla projektis juba õigesti paigas? Kood kompileerub ja liigutab (sain isegi ossi jaoks sünkrosignaale genereerida) aga see on ka kõik.
Ah jaa, USB muidugi ka ei käi (device not recognized) aga see on järgmine samm...
Tegin säärase lolluse et hakkasin C-keelt katsetama. Vaja oli koodi, mis tomiks SD-kaardile logerina ja et ka USB oleks küljes. MC-l on säärane koodinäide kenasti olemas.
Tõmmata saab terve projekti, seega võiks nagu toimida aga....muidugi mitte. Vähemasti mina ei suutnud oma tervelt 2-päevase kogemusega seda käima ajada: SD-kaart ei vasta üldse. Peale pikka uurimist sai ossiga välja selgitatud, et kaardile saadetakse valed käsud. Kirjutasin jäigalt koodi õiged käsud ja vastus tuligi !
Aga koodi ma parandada ei oska. SD-SPI.c failis on käskude tabel, kus ka CRC'd ette arvutatud. SEalt indekseerides peaks õiged baidid kätte saama. Debugger n'äitab, et igal katsel loetakse erinev (vale) bait !!! Miks?
Kood:
MMC_RESPONSE SendMMCCmdManual(BYTE cmd, DWORD address)
{
BYTE index;
MMC_RESPONSE response;
CMD_PACKET CmdPacket;
WORD timeout;
SD_CS = 0; //Select card
// Copy over data
CmdPacket.cmd = sdmmc_cmdtable[cmd].CmdCode;
CmdPacket.address = address;
CmdPacket.crc = sdmmc_cmdtable[cmd].CRC; // Calc CRC here
CmdPacket.TRANSMIT_BIT = 1; //Set Tranmission bit
WriteSPIManual(CmdPacket.cmd); //Send Command
.... jne...
Aga CmdPacket.cmd mis loetakse tabelist sdmmc_cmdtable[cmd] on vale.
Mina siit edasi minna ei oska - milles kamm?
Kompilaator on Microchipi C18. Vajalikud võtmed võiksid ju olla projektis juba õigesti paigas? Kood kompileerub ja liigutab (sain isegi ossi jaoks sünkrosignaale genereerida) aga see on ka kõik.
Ah jaa, USB muidugi ka ei käi (device not recognized) aga see on järgmine samm...