 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Čet Okt 09, 2008 10:25 pm Naslov sporočila: SD flash SPI |
|
|
Oj
se je kdo že ukvarjal z SD flash karticami
imam 64Mb kartico na PIC18F8722 in mi zadeva ne gre preko CMD0
CMD0 vrne prav 0x01, se pravi gre kartica v idle state,
vse naprej od tega pa vrača 0x05, command not suported
poizkusil sem CDM1, ACMD41 (cmd55 + cmd41), cmd8 ...
nix
ima kdo kakšno idejo :S _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Pet Okt 10, 2008 7:56 am Naslov sporočila: |
|
|
mi je uspelo
pošiljanje CMD41 dokler ne vrne 0x00
z tem da se vmes CS signal menja in delay vmes med impulzom
poleg tega obvezno ko se CS signal vrne na 1 se pošlje 1 bajt 0xFF po SPI _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Ned Okt 12, 2008 7:31 pm Naslov sporočila: |
|
|
no sem naletel na novi zid,
nikakor ne spravim kartice preko inicializacije
druga čudna stvar mi je pa ta da na kartici sicer piše da je miniSD (iz nokie 64Mb),
inicializiram jo pa lahko samo kot MMC kartico.
ne morem brat ne CID, ne CSD registrov :S
je kdo pisal kodo za SD kartice preko SPI vodila???? _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
mirkatmir Član


Pridružen-a: Pet 25 Jul 2003 9:14 Prispevkov: 1876 Aktiv.: 7.92 Kraj: Ribnica (JN75IR)
|
Objavljeno: Ned Okt 12, 2008 8:38 pm Naslov sporočila: |
|
|
Če ti tole kaj pomaga. Nekje sem prebral, da miniSD nima enak protokol kot navadna, ne vem pa, če je to res. _________________ lp, Miran (Miro - S51SK) |
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Ned Okt 12, 2008 8:54 pm Naslov sporočila: |
|
|
mirkatmir je napisal/a: |
Če ti tole kaj pomaga. Nekje sem prebral, da miniSD nima enak protokol kot navadna, ne vem pa, če je to res. |
Hmm, tole pa bi težko verjel. Imam namreč microSD kartico, ki ima adapter za miniSD in navadno DS. Tako da je "ista figa". _________________ Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
|
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Pon Okt 13, 2008 11:15 am Naslov sporočila: |
|
|
mirkatmir je napisal/a: |
Če ti tole kaj pomaga. Nekje sem prebral, da miniSD nima enak protokol kot navadna, ne vem pa, če je to res. |
ja to sem že gledal, pa ni bilo uspeha.
Sedaj sem na netu nekje videl da ima delay potem ko pošlje CMD55 in ACMD41,
upam da jih bo to obudilo  _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Čet Okt 23, 2008 4:13 pm Naslov sporočila: |
|
|
Sem našel foro. pomagalo je da sem po vsakem ukazu CS linijo "resetiral"
Ko se inicializira pa lahko ostane vedno na 0 kadar se kartica rabi
Zdaj že pridno berem stvra z kartice. Moram samo še spilit zadeve in narediti pisanje na kartico, da lahko dokončam projekt _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Pet Jan 16, 2009 8:29 am Naslov sporočila: |
|
|
Še ne problem
Z CMD13 berem status kartice. Zanima me namreč busy flag kadar zapisujem 1 sektor na kartico. Pa nisem siguren da mi tale busy procedura sploh dela vredu.
A ve kdo kako bi naj to šlo pravilno?
Trenutno imam proceduro tako napisano:
Pošljem CMD24 za write sektor in pokama na reply
Pošljem 0xFF in 0xFE kar je start data token
pošljem 512 + 2crc byta
potem počakam na reply
potem pa berem busy flag dokler se pač ne sprosti, kar bi pomenilo, da je sektor zapisan in lahko nadaljujem. Samo tukaj dobim vedno ven samo 0xFF znake in nobene potrditve. _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
RisPo Neznanec

Pridružen-a: Pet 03 Feb 2006 12:15 Prispevkov: 5 Aktiv.: 0.02
|
Objavljeno: Tor Jun 30, 2009 10:35 pm Naslov sporočila: |
|
|
Zanima me, če se je kdo ukvarjal s SD karticami na 18F4520 in če so bili kakšni problemi? |
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Sre Jul 01, 2009 8:15 am Naslov sporočila: |
|
|
načeloma isto sranje, SPI vodilo kot SPI vodilo.
jaz imam edino problem s kartico da mi občasno SPI čisto zablokira, in ne morem potem ostalih stvari na SPI vodilu uporabljat (imam RTC še na spi in mi vrača čist levi datum/uro). Tega problema še nišem rešil ker ga je full težko debugirat. _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Sre Jul 01, 2009 8:21 pm Naslov sporočila: |
|
|
Uh, sele zdaj vidim post.
Ce se vedno imas problem z "busy" po write... kolikor se spomnim kartica po write vraca 0x00 dokler je busy, 0xff, ko ni vec. Sigurno pa pise v specifikaciji, samo glej za SPI mode, ne za SD.
Hmm... deljenje SPI-ja bi lahko bilo problematicno, ker SD kartica v nekaterih primerih odgovarja tudi ko ima CS low. _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Sre Jul 01, 2009 10:29 pm Naslov sporočila: |
|
|
ja sej to se mi včasih obesi, da kartica odgovarja tudi če ni selektana in mi RTC ura zataji. Drugače je pa že narejeno da čaka dokler se iz 00 ne prelevi v ff pa še vedno zmrzne. Kot rečeno je teško to debugirat, ker se ponavadi zgodi šele po nekaj urah delovanja ali celo po enem dnevu _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
Neper Član

Pridružen-a: Sob 11 Apr 2009 9:51 Prispevkov: 83 Aktiv.: 0.42 Kraj: Ljubljana
|
Objavljeno: Sob Nov 27, 2010 6:01 pm Naslov sporočila: |
|
|
Upam da tole še kdo bere, ker bi namreč lepo prosil za malo pomoči.
Sam sem namreč naletel na podoben problem kot red_mamba in sicer, po inicializaciji mi COM0 še gre skozi (vrne 0x01), potek pa začnem pošiljati CMD55,ACMD41 vendar mi nikoli ne da pravilnega odgovora. Dobiti bi moral 0x00 vrne pa vedno 0x01. Poizkusil sem tudi z CMD1 vendar je rezultat isti.
Koda je takale:
Koda: |
tmp=sd_send_command(CMD0,R1,SDresponse,SDargument);
i=0;
do
{
tmp=sd_send_command(CMD55,R1,SDresponse,SDargument);
tmp=sd_send_command(ACMD41,R1,SDresponse,SDargument);
// tmp=sd_send_command(CMD1,R1,SDresponse,SDargument);
if (tmp==0)
{return 0;} //kartica ni dobila odgovora na komando - bejž vn in vrni nulo
i=i+1;
}
while (((SDresponse[0]&0x01)==1)&i<100000);
|
funkcija sd_send_command(...) pošlje ukaz z argumentom(v primeru uporabljenih komand so to same ničle), počaka na odgovor in ga shrani v globalni array SDresponse. Po branju drugega posta sem v funkcijo dodal še en zapis 0xFF na vodilo, ko je CS pin že na enici (kartica ni naslovljena).
Edino kar ne znam razbrati iz drugega posta je kaj pomeni menjanje signala CS. Ga ko je že na enici daš spet na ničlo, malo delaya in potem nazaj na enico?
Ima kdo kakšno idejo kje tiči problem?
LP! |
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.27 Kraj: Yogyakarta
|
Objavljeno: Ned Nov 28, 2010 12:11 am Naslov sporočila: |
|
|
Koda: |
Char initSD(void)
{
char tmp;
char cTmp;
int cnt;
EN_FLASH = 1;
WriteSPI1(0xFF);
WriteSPI1(0xFF);
WriteSPI1(0xFF);
WriteSPI1(0xFF);
WriteSPI1(0xFF);
WriteSPI1(0xFF);
WriteSPI1(0xFF);
WriteSPI1(0xFF);
WriteSPI1(0xFF);
WriteSPI1(0xFF);
enableSD();
commandSDcr( 0x40, 0x00, 0x00, 0x00, 0x00 ); //CMD0
if (R1SD() != 0x01)
{
if (_DEBUG_ == 1)
writesUSBcr("TimeOUT!!!\r\nX");
disableSD();
return 0;
}
disableSD();
cnt = 0x20;
cTmp = 0xFF;
while ( (cnt>0) & (cTmp != 0x00) )
{
enableSD();
WriteSPI1(0x77);
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x95);
//commandSDcr( 0x77, 0x00, 0x00, 0x00, 0x00 );
R1SD();
disableSD();
delay_ms(50);
enableSD();
WriteSPI1(0x69);
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x95);
//commandSDcr( 0x69, 0x00, 0x00, 0x00, 0x00 );
cTmp = R1SD();
cnt--;
disableSD();
delay_ms(100);
}
//disableSD();
if (cTmp != 0x00)
return 0;
/**
enableSD();
commandSDcr( 0x50, 0x00, 0x00, 0x02, 0x00 ); //CMD0
R1SD();
disableSD(); /**/
return 1;
}
|
Kaj bolj jasno?  _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
Neper Član

Pridružen-a: Sob 11 Apr 2009 9:51 Prispevkov: 83 Aktiv.: 0.42 Kraj: Ljubljana
|
Objavljeno: Ned Nov 28, 2010 12:24 am Naslov sporočila: |
|
|
Hvala za poslano kodo!
Torej se tisti ekstra 0xFF ki se pošlje ko se naslovi kartico, pošlje znotraj enableSD() funcije?
In delay fja je najbrž zgolj časoven delay in nič ne pošilja, je res?
Bi se dalo prosim pripeti še kodo uporabljenih funkcij? Ker kolikor jaz razumem tole kodo naredi isto kot moja vendar meni ne dela.
Kolikor sem prebrskal po raznih forumih je menda tudi od kartic odvisno kako delujejo, ker se ne držijo vse čisto SD standarda. Bom sprobal še ko dobim še kakšno drugo kartico.
Pa še eno vprašanje: V priročniku za SD kartice:
http://alumni.cs.ucr.edu/~amitra/sdcard/ProdManualSDCardv1.9.pdf
piše, da nekatere komande kot argument sprejmajo katerokoli vrednost (don't cares) nekatere pa rabijo "stuff bits". Meni se nekako zdi da je to vse isto pa vendar ne vem zakaj so potem dvakrat drugače zapisali. Ima kdo kakšno idejo kako je s tem |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|