Čítačka SD kariet
... alebo, porozprávajte sa s SD kartou pomocou terminálového programu
Luhan Monat, 22.11.2010-01:08


Hneď na úvod si dovolím krátku poznámočku o obrázkoch. Oba obrázky zobrazujú zariadenie vo verzii 1, popis ako aj všetky prílohy sú už ku verzii 2.

Hardvér

Za jadro aplikácie bol pasovaný PIC16F819, pretože má hardvérovú podporu SPI rozhrania (SD karty zvyčajne komunikujú pomocou neho). Mikrokontrolér beží na 20MHz externom kryštále, čo znamená, že SPI zbernica je taktovaná frekvenciou 5MHz (rýchlosť menenia sa logických úrovní na vodiči SCK) a komunikácia prostredníctvom softvérovej sériovej linky je schopná dosiahnuť rýchlosť 115200 Baudov. Krátkym pohľadom na schému si môžete všimnúť jeden zo spôsobov ako prepojiť mikrokontrolér s napäťovými úrovňami 5V s SD kartou, ktorá je napájaná 3,3V napätím. Keď si všimnete napájaciu vetvu SD karty, vidíte že do série s napájacím napätím zariadenia je zapojená červená LED, ktorá zníži 5V napätie asi o 1,8V. Za LEDkou sa tak nachádza napätie 3,2V, ktoré je v odporúčanom rozsahu napájacieho napätia pre SD kartu. Napäťové úrovne signálov smerujúcich od mikrokontroléra ku SD karte sú upravené pomocou deliča napätia zloženého z dvoch rezistorov o veľkostiach 1k a 2k. Problémom je signál DO (data out - MISO) smerujúci od SD karty ku mikrokontroléru, pretože v SPI móde je na príslušné piny zaradený schmit-trigger obvod, ktorého prahová úroveň pre logickú jednotku je 3,5V. "Obvod", ktorý je zložený z napäťového deliča (rezistory R13 a R16) a diódy CR6 posúva úroveň napätia na dátovom výstupe SD karty o 0,6V vyššie, takže na pine SDI mikrokontroléra dostávame rozsah napätí 0,6V až 3,8V. Gýčové, ale funguje to.


Firmvér a komunikácia zariadenia s kartou

Hlavným problémom s firmvérom mikrokontroléra bola konfigurácia periférneho modulu SPI. Po nemalých tažkostiach, sa ako správne zdá byť nastavenie: SMP = 1, CKE = 1 a CKP = 1. Pre kompletné nastavenie registrov SSPCON a SSPSTAT nahliadnite do výpisu firmvéru, konkrétne do rutiny sspinit. Programová rutina ktorou sa zapisujú dáta do karty, sa taktiež používa na ich čítanie z karty, pretože pri komunikácii prostredníctvom zbernice SPI sú čítanie a zapisovanie simultánne operácie.

Celá komunikácia prebieha v ASCII kóde, takže budete potrebovať nejaký terminálový program. Po pripojení sa terminálového programu (rýchlosť 115200 Baudov, 1 stop bit, žiadna parita, bez riadenia toku) ku zariadeniu, sú k dispozícii nasledujúce príkazy, pričom označenie ddd je dekadická hodnota a označenie xx je hexadecimálna hodnota:










Príkazy môžu byť v terminálovom programe kombinované za sebou, napríklad:


Všimnite si, že príkaz C generuje efektívnu adresu sektora násobením čísla 512. Taktiež sa ale používa na generovanie povinného CRC, ktoré je požadované iba pri použití príkazu 0 na vstup karty do režimu SPI. Potom sa už CRC nepožaduje pre žiadny nasledujúci príkaz. Ak chceme vyslať príkaz, ktorý potrebuje okrem adresy sektora aj nejaké špecifické parametre, je potrebné použiť príkaz W a všetky čísla zadať hexadecimálne. Konečná úloha tohto zariadenia má byť programátor/čítačka SD kariet. Zatiaľ je to ale iba prostriedok na overenie/vyskúšanie činnosti SD kariet od rôznych výrobcov.


Zdrojový kód, ako aj .hex súbor vhodný na priame nahranie do mikrokontroléra nájdete v prílohe, kde sa taktiež nachádza schéma, ukážka navrhnutej dosky plošných spojov a obrázok jej osadenia súčiastkami. Poznámka na záver: K ovládaniu a pochopeniu ako to vlastne celé funguje (ak si budete túto konštrukciu náhodou chcieť postaviť) budete potrebovať stiahnuť špecifikácie ku SD kartám (tipujem, že autor originálneho článku to zabudol spomenúť).

Zverejnené zo súhlasom autora.
Homepage projektu: http://mondo-technology.com/sdcard.html

Preklad: Kiwwicek


tento článok je z mikroZONE
( https://www.mikrozone.sk/pluginy/content/content.php?content.87 )