www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

sdmmc - SPI

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
trot
Član
Član



Pridružen-a: Čet 18 Jan 2007 20:25
Prispevkov: 1282
Aktiv.: 5.71
Kraj: glej fogl

PrispevekObjavljeno: Sre Feb 28, 2007 11:41 am    Naslov sporočila:  sdmmc - SPI Odgovori s citatom

Zanima me, ali je potrebno za vsak ukaz, ki ga pošljem sd kartici, postavit CS (chip select) najprej na 1 in po tem na 0 (in ti ponavkljam za vsak ukaz), ali lahko CS najprej postavim na 1, pošljem več ukazov, in potem dam CD na 0?

Je ta postopek standarden, ali se lahko razlikuje za različne čipe?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.35
Kraj: Lovrenc na P.

PrispevekObjavljeno: Sre Feb 28, 2007 11:57 am    Naslov sporočila:   Odgovori s citatom

Ja, preberi v datasheetu. Je lahko čisto odvisno od čipa do čipa s SPI vmesnikom. Nedolgo nazaj sem se igral z SPI-CAN modulom in je imel rešeno tako: CS nato podatek ali bom pisal ali bral, potem naslov, potem podatek in na koncu C\S\.
Večinoma imajo tako rešeno...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
trot
Član
Član



Pridružen-a: Čet 18 Jan 2007 20:25
Prispevkov: 1282
Aktiv.: 5.71
Kraj: glej fogl

PrispevekObjavljeno: Sre Feb 28, 2007 1:12 pm    Naslov sporočila:   Odgovori s citatom

Sem gledal datasheet od ScanDisk (poglavje 3.3), pa nisem našel tega podatka...zato tudi sprašujem. Sem gledal philipsov AN10406, pa je enkrat CS uporabljen, drugič pa ne:

int mmc_init()
{
DWORD i;
/* Generate a data pattern for write block */
for(i=0;i<MMC_DATA_SIZE;i++)
{
MMCWRData[i] = i;
}
MMCStatus = 0;
IOSET0 = SPI_SEL; /* set SPI SSEL */
/* initialise the MMC card into SPI mode by sending 80 clks on */
/* Use MMCRDData as a temporary buffer for SPI_Send() */
for(i=0; i<10; i++)
{
MMCRDData[i] = 0xFF;
}
SPI_Send( MMCRDData, 10 );
IOCLR0 = SPI_SEL; /* clear SPI SSEL */
/* send CMD0(RESET or GO_IDLE_STATE) command, all the arguments
are 0x00 for the reset command, precalculated checksum */
MMCCmd[0] = 0x40;
MMCCmd[1] = 0x00;
MMCCmd[2] = 0x00;
MMCCmd[3] = 0x00;
MMCCmd[4] = 0x00;
MMCCmd[5] = 0x95;
SPI_Send( MMCCmd, MMC_CMD_SIZE );
/* if = 1 then there was a timeout waiting for 0x01 from the MMC */
if( mmc_response(0x01) == 1 )
{
MMCStatus = IDLE_STATE_TIMEOUT;
IOSET0 = SPI_SEL; /* set SPI SSEL */
return MMCStatus;
}
/* Send some dummy clocks after GO_IDLE_STATE */
IOSET0 = SPI_SEL; /* set SPI SSEL */
SPI_ReceiveByte();
IOCLR0 = SPI_SEL; /* clear SPI SSEL */
/* must keep sending command until zero response ia back. */
i = MAX_TIMEOUT;
do
{
/* send mmc CMD1(SEND_OP_COND) to bring out of idle state */
/* all the arguments are 0x00 for command one */
MMCCmd[0] = 0x41;
MMCCmd[1] = 0x00;
MMCCmd[2] = 0x00;
MMCCmd[3] = 0x00;
MMCCmd[4] = 0x00;
/* checksum is no longer required but we always send 0xFF */
MMCCmd[5] = 0xFF;
SPI_Send( MMCCmd, MMC_CMD_SIZE );
i--;
} while ( (mmc_response(0x00) != 0) && (i>0) );
/* timeout waiting for 0x00 from the MMC */
if ( i == 0 )
{
MMCStatus = OP_COND_TIMEOUT;
IOSET0 = SPI_SEL; /* set SPI SSEL */
return MMCStatus;
}
/* Send some dummy clocks after SEND_OP_COND */
IOSET0 = SPI_SEL; /* set SPI SSEL */
SPI_ReceiveByte();
IOCLR0 = SPI_SEL; /* clear SPI SSEL */
/* send MMC CMD16(SET_BLOCKLEN) to set the block length */
MMCCmd[0] = 0x50;
MMCCmd[1] = 0x00; /* 4 bytes from here is the block length */
/* LSB is first */
/* 00 00 00 10 set to 16 bytes */
/* 00 00 02 00 set to 512 bytes */
MMCCmd[2] = 0x00;
/* high block length bits - 512 bytes */
MMCCmd[3] = 0x02;
/* low block length bits */
MMCCmd[4] = 0x00;
/* checksum is no longer required but we always send 0xFF */
MMCCmd[5] = 0xFF;
SPI_Send( MMCCmd, MMC_CMD_SIZE );
if( (mmc_response(0x00))==1 )
{
MMCStatus = SET_BLOCKLEN_TIMEOUT;
IOSET0 = SPI_SEL; /* set SPI SSEL */
return MMCStatus;
}
IOSET0 = SPI_SEL; /* set SPI SSEL */
SPI_ReceiveByte();
return
}
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 503 dni


Powered by phpBB © 2001, 2005 phpBB Group