Fórum témák
» Több friss téma |
Cikkek » SD kártyás zenelejátszó SD kártyás zenelejátszó
Szerző: gabi20, idő: Márc 14, 2014, Olvasva: 22619, Oldal olvasási idő: kb. 3 perc
A követekezőkben röviden leírom az SD kártya működését SPI módban. Akit nem érdekel az SD kártya működése, nyugodtan lapozzon... Az SD kártya 3V tápfeszültséggel működik. Áramfelvétele normál működés közben ~70 mA, alvó üzemmódban ~0,25 mA. Az SPI portot 0. módban használtam, 8Mbit/s sebesség mellett. Az adatátvitelnél mindig az MSB-t küldjük először. Természetesen az AVR a master, az SD kártya pedig a slave. Íme az SD kártya lábkiosztása: Az SD kártyát alapvetően kétféle módban lehet használni:
A 4GB-nál kisebb kapacitású SD kártyáknál 32 bit van használva címezésre. Parancsok formátuma Minden parancs 6 byteból áll. Az első byte maga a parancs. A felső két bit értéke mindig 01 . Ezután következik a parancshoz tartozó sorszám. Példa:
A következő 4 byte a parancshoz tartozó operandust tartalmazza. Az olvasás parancs kiküldésénél például ide kell beírni a 32 bites címet. Vannak olyan parancsok is, melyek nem tartalmaznak semilyen operandust (pl. RESET), ilyenkor nullákat kell ide írni. A 6. és egyben az utolsó bájt a 7 bites CRC (hibajavító) kódot tartalmazza. A legutolsó bit a stop bit, ennek mindig 1–nek kell lennie. A CRC hibajavító kód használata alapértelmezetten le van tiltva, így nem kell vele foglalkozni. Bekapcsolni a CRC_ON_OFF (CMD59) parancsal lehet. A legtöbb parancs kiküldése után az SD kártya a MISO lábon keresztül küld visszajelzést az állapotáról (R1, R2, R3 response). Az R1 különböző hibajelző biteket tartalmaz. Ha minden megfelelően működik, akkor ennek a bájtnak az értéke 0x00. Alvó üzemmódban 0x01, ha hibás címet küldünk ki: 0x20, ha nemlétező parancsot küldünk ki: 0x04 stb... Bizonyos parancsok után az SD kártya R2 vagy R3 választ ad. Az R2 és R3 formátum több bájtból áll, melyeket most nem részletezek. Az inicializáció Az SD kártyán a bekapcsolását követően inicializációt kell végrehajtani. Az inicializáció SPI módban több lépésből áll: • Bekapcsolást követően várunk ~10 ms–ot, majd a Chip Select (CS) és a MOSI lábat magas szintre húzva minimum 74 órajelet kiküldünk. Ezt a legegyszerűbben a következőképpen tehetjük meg:
Így kiküldünk 10 bájtot (80 órajelet), miközben a MOSI láb magas szinten lesz. • Ezután kiküldjük a RESET parancsot: Figyelem! A bekapcsolást követő RESET (CMD0) parancs kiküldése után érvényes CRC kódot kell küldeni (0x95)! A továbbiakban azonban már nem fog kelleni CRC kódot küldeni, hiszen az alapértelmezetten ki van kapcsolva. A CMD0 parancs kiküldése után az SD kártya alvó üzemmódba kerül, és R1 visszajelzést ad. Az R1 értéke ekkor 0x01, hiszen alvó üzemmódban vagyunk. • Felébreszteni a CMD1 parancs kiküldésével lehet: Ekkor már nem kell érvényes CRC kódot küldeni. A CRC kód helyére írhatunk nullákat vagy egyeseket, ügyeljünk azonban arra, hogy a legalsó bit (stop bit) mindig 1 legyen. A CMD1 parancs kiküldése után az SD kártya R1 visszajelzést ad. Az R1 értéke ekkor 0x00, hiszen felébresztettük az alvó üzemmódból. Ezzel az inicializáció véget ért, az SD kártya készen áll a további parancsok fogadására. Adatok olvasása SD kártyáról Az SD kártya blokkokra van felosztva. Alapértelmezetten a blokkok mérete 512 B. Az adatok olvasásához én a READ_MULTIPLE_BLOCK (CMD18) parancsot használtam. Ezzel a parancsal folyamatosan lehet olvasni az kártyáról. Ha azonban csak egy adott blokkot akarunk kiolvasni, akkor a READ_SINGLE_BLOCK (CMD17) parancsot is használhatjuk. Továbbá ki kell küldenünk a 32 bites címet is, ahonnan olvasni akarunk. A CMD17 vagy CMD18 parancs kiküldése után az SD kártya R1 visszajelzést ad, melynek értéke – ha mindent jól csináltunk – 0x00. Az R1 response után az SD kártya fog küldeni egy bájtot, aminek az értéke 0xFE lesz. Ez jelzi azt, hogy a következő byte már érvényes adat lesz a memóriából. Ezután már nincs más teendőnk, mint küldeni az órajeleket, a kártya pedig a MISO lábon keresztül küldi nekünk az adatokat. Az adatátvitelt leállítani a STOP_TRANSMISSION (CMD12) parancsal lehet. A teljes parancsok listája részletes leírással az SD kártya adatlapjában találhatóak meg. További információ: SD card datasheet How to use MMC/SDC Simple SD audio player A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |