K U R S
Obsługa kart pamięci Flash
za pomocą mikrokontrolerów,
część 2 W drugiej czÍÅ›ci artykuÅ‚u przedstawiamy podstawy obsÅ‚ugi
sterownika karty oraz skÅ‚adniÍ i znaczenie najwaÅ‚niejszych
ProtokÛÅ‚ komunikacji z kartÄ… CF
poleceÒ sterujÄ…cych jego pracÄ….
Niezalełnie od wybranego trybu
pracy, karty typu CF komunikujÄ…
Przedstawione informacje sÄ… podstawowymi i wprowadzajÄ…cymi
siÍ z otoczeniem za pomocÄ… proto-
do kolejnej czÍÅ›ci artykuÅ‚u, w ktÛrej opiszemy programowÄ…
kołu zgodnego ze specyfikacją ATA.
Oznacza to, Å‚e dostÍp do zawartoÅ›-
obsÅ‚ugÍ pamiÍci Compact Flashy i Multimedia Card.
ci pamiÍci jest zawsze realizowany
poprzez zapis lub odczyt podstawo-
wych rejestrÛw ATA. W zaleÅ‚noÅ›ci IlośĘ sektorÛw wpisujemy ile kolej- Na rys. 6 przedstawiono algo-
od trybu, sposÛb adresowania tych nych sektorÛw chcemy odczytaĘ lub rytm dostÍpu do danych wedÅ‚ug
rejestrÛw wymaga nieco innej kom- zapisaĘ za pomocÄ… jednej komendy, standardu ATA.
binacji sygnaÅ‚Ûw sterujÄ…cych. a do rejestru komend - odpowied-
PoniewaÅ‚ do komunikacji z mik- niÄ… komendÍ (zapis/odczyt sektora). Rejestry ATA
rokontrolerem wybraliÅ›my tryb PC NastÍpnie po sprawdzeniu flagi go- Znaczenie rejestru danych oraz
Card Memory, zostanie on najdok- towoÅ›ci moÅ‚emy rozpocząĘ zapis rejestrÛw o offsetach od 2 do 6 opi-
ładniej opisany. Wymagane kombi- lub odczyt z rejestru danych zawar- sano powyłej. Dla pełnego opisu
nacje sygnaÅ‚Ûw sterujÄ…cych w tym toÅ›ci zaadresowanego sektora. Spro- rejestrÛw ATA naleÅ‚y jeszcze
trybie oraz odpowiadajÄ…ce im rejes- wadza siÍ to do 512-krotnego zapi- scharakteryzowaĘ znaczenie poszcze-
try ATA zestawiono w tab. 3. sania lub odczytania rejestru da- gÛlnych bitÛw rejestrÛw: bÅ‚ÍdÛw,
ZawartośĘ pamiÍci Flash podzie- nych (o offsecie 0). statusu, alternatywnego statusu, re-
lona jest na sektory (przewałnie Jeśli wykorzystujemy 16-bitowy jestru kontrolnego oraz rejestru nu-
o dÅ‚ugoÅ›ci 512 bajtÛw). DostÍp do tryb dostÍpu, to dokonujemy jedy- meru gÅ‚owicy/dysku - gdyÅ‚ oprÛcz
danego sektora danych najÅ‚atwiej nie 256 zapisÛw/odczytÛw 16-bito- najstarszej czÍÅ›ci adresu LBA zawie-
jest realizowaĘ w trybie LBA (Logi- wych sÅ‚Ûw. JeÅ›li zamierzamy zapi- ra on istotne w procesie komunika-
cal Block Addressing). saĘ lub odczytaĘ wiÍcej niÅ‚ 1 sek- cji pola bitowe.
Do zaadresowania sektora uÅ‚ywa tor danych, to przed rozpoczÍciem Rejestr bÅ‚Ídow (Error Register) -
siÍ jednej 28-bitowej liczby okreÅ›la- zapisu/odczytu kaÅ‚dego kolejnego offset 1, tylko do odczytu. Rejestr
jÄ…cej numer sektora. Wpisujemy jÄ… sektora musimy ponownie sprawdziĘ ten zawiera szczegÛÅ‚owe informacje
do rejestrÛw ATA o offsetach 3, 4, flagi BUSY oraz DRQ. JeÅ›li do re- o bÅ‚Ídach, jeÅ›li bit 0 rejestru statu-
5 i 6 i ustawiamy bit 6 rejestru nu- jestru IlośĘ sektorÛw wpiszemy 0 - su zostaÅ‚ ustawiony, co oznacza
meru gÅ‚owicy/dysku (offset 6) dla oznacza to, Å‚e chcemy zapisaĘ/od- wystÄ…pienie bÅ‚Ídu. Znaczenie po-
wÅ‚Ä…czenia trybu LBA. Do rejestru czytaĘ 256 sektorÛw. szczegÛlnych bitÛw tego rejestru po-
Tab. 3. Zestawienie wymaganych kombinacji sygnałów sterujących w trybie PC Card Memory oraz odpowiadające im
rejestry ATA
-REG A10 A9...A4 A3 A2 A1 A0 Offset -OE = 0 -WE = 0
1 0 X 0 0 0 0 0 Odczyt rejestru danych Zapis rejestru danych
1 0 X 0 0 0 1 1 Rejestr błędów Rejestr Features
1 0 X 0 0 1 0 2 IloSć sektorów IloSć sektorów
1 0 X 0 0 1 1 3 Numer sektora (LBA 7...0) Numer sektora (LBA 7...0)
1 0 X 0 1 0 0 4 Numer cylindra [bity 0...7] Numer cylindra [bity 0...7]
(LBA 15...8) (LBA 15...8)
1 0 X 0 1 0 1 5 Numer cylindra [bity 8...15] Numer cylindra [bity 8...15]
(LBA 23...16) (LBA 23...16)
1 0 X 0 1 1 0 6 Numer głowicy/dysku (LBA 27...24) Numer głowicy/dysku (LBA 27...24)
1 0 X 0 1 1 1 7 Rejestr statusu Rejestr komend
1 0 X 1 0 0 0 8 Duplikat rejestru danych Duplikat rejestru danych
1 0 X 1 0 0 1 9 Duplikat rejestru danych H Duplikat rejestru danych H
1 0 X 1 1 0 1 D Duplikat rejestru błędów Duplikat rejestru Features
1 0 X 1 1 1 0 E Alternatywny status Rejestr kontrolny
1 0 X 1 1 1 1 F Adres urzÄ…dzenia Zarezerwowany
1 1 X X X X 0 8 Odczyt rejestru danych L Zapis rejestru danych L
1 1 X X X X 1 9 Odczyt rejestru danych H Zapis rejestru danych H
Uwagi:
Rejestr o offsecie 0 może być wykorzystany w trybie 16-bitowego dostępu przy -CE1 i -CE2 = 0. W tym przypadku linie danych D0...D15 zawierają 16-bitowe
dane (dwa kolejne bajty z pamięci). JeSli -CE1 = 0 i -CE2 = 1, to mamy do czynienia z dostępem 8-bitowym i każde kolejne odwołanie do tego rejestru daje
nam kolejny bajt z danego sektora danych.
Elektronika Praktyczna 3/2004
83
K U R S
(w trybie IDE). Znaczenie poszcze-
Tab. 4. Adresy rejestrów karty
gÛlnych bitÛw tego rejestru jest na-
Offset Adres dostępu Adres dostępu
stÍpujÄ…ce (ich rozmieszczenie poka-
Rejestru - rys. 3 - rys. 4
zano na rys. 8):
0 0xF000 0x8000
BUSY - Ustawiony, jeśli karta wy-
1 0xF100 0x8001
konuje wewnÍtrzne operacje i nie
2 0xF200 0x8002
umoÅ‚liwia w tym czasie dostÍpu
3 0xF300 0x8003
do pozostaÅ‚ych rejestrÛw. JeÅ›li bit
4 0xF400 0x8004
ten jest ustawiony, to pozostałe
5 0xF500 0x8005
bity nie posiadają prawidłowych
informacji (są niewałne). 6 0xF600 0x8006
DRDY - Zostaje ustawiony, jeśli
7 0xF700 0x8007
karta jest gotowa do przyjÍcia ko-
E 0xFE00 0x800E
mendy. Zerowany podczas zerowa-
Uwaga! Rysunki: 3 i 4 opublikowano w pierwszej
nia karty.
częSci artykułu, w EP2/2004.
DWF - Ustawienie tego bitu ozna-
cza błąd zapisu do karty.
DSC - Ustawiony, jeÅ›li karta jest kontrolera. NajczÍÅ›ciej nie uÅ‚ywa
gotowa. siÍ trybu przerwaÒ, wiÍc naleÅ‚y
DRQ - Ustawiony, jeśli karta łąda za- go ustawiĘ na 1.
Rys. 6. Algorytm dostępu do pisu danych do rejestru danych lub D0 - WartośĘ tego bitu jest ignoro-
danych przy użyciu komend ATA w buforze sÄ… jeszcze jakieÅ› dane do wana przez kartÍ.
odczytu poprzez rejestr danych. Rejestr głowicy/dysku (Drive/Head
kazano na rys. 7. Oznaczenia na CORR - Zostaje ustawiony, jeśli wy- Register) - offset 6, do zapisu i od-
rysunku sÄ… nastÍpujÄ…ce: kryto bÅ‚Ä…d danych, ktÛry zostaÅ‚ czytu. Rejestr ten zawiera
BBK - Bit zostaje ustawiony, jełeli skorygowany. Ustawienie tego bitu 4 najbardziej znaczące bity adresu
kontroler wykryje, Å‚e odwoÅ‚ujemy nie przerywa transmisji danych. LBA (lub numer gÅ‚owicy przy dostÍ-
siÍ do uszkodzonego bloku pamiÍ- O (IDX) - Zawsze ustawiony na 0. pie w trybie CHS), znacznik infor-
ci (Bad Block). ERR - Ustawiony w przypadku wy- mujÄ…cy kontroler o chÍci dostÍpu do
UNC - Bit zostaje ustawiony, jeÅ‚eli stÄ…pienia bÅ‚Ídu w wyniku wyko- urzÄ…dzenia Master lub Slave oraz
kontroler karty wykryje bÅ‚Ä…d niemoÅ‚- nania poprzedniej komendy. znacznik wymuszajÄ…cy pracÍ w trybie
liwy do skorygowania przez wbudo- Transmisja danych zostaje prze- LBA. Znaczenie poszczegÛlnych bitÛw
wane mechanizmy korekcji bÅ‚ÍdÛw. rwana. PrzyczynÍ wystÄ…pienia te- tego rejestru (rys. 10) jest nastÍpujÄ…ce:
IDNF - ØÄ…dany sektor nie moÅ‚e byĘ go bÅ‚Ídu dodatkowo pokazuje re- Bity D7 i D5 - powinny byĘ usta-
odnaleziony. jestr bÅ‚ÍdÛw. wione na 1.
ABRT - Bit zostaje ustawiony, jeÅ›li Rejestr Kontrolny (Device Control LBA - 1 oznacza Å‚Ä…danie dostÍpu
łądana komenda została odrzuco- Register) - offset E, tylko do zapi- w trybie LBA.
na ze wzglÍdu na niegotowośĘ su. Rejestr ten sÅ‚uÅ‚y do programo- DRV - 0 oznacza, Å‚e odwoÅ‚ujemy
karty, bÅ‚Ídu zapisu lub prÛby wy- wego zerowania karty oraz do usta- siÍ do urzÄ…dzenia Master, 1 - do
konania nieprawidłowej komendy. wienia trybu pracy z wykorzysta- Slave. Poniewał karta CF po re-
AMNF - Bit zostaje ustawiony, jeÅ›li niem przerwaÒ. MoÅ‚e byĘ on zapi- secie jest skonfigurowana jako
wykryto dowolny bÅ‚Ä…d. sywany nawet w przypadku zajÍtoÅ›- Master, powinniÅ›my pozostawiĘ
Rejestr Statusu i Alternatywnego ci karty (bit BUSY w rejestrze sta- ten bit wyzerowany podczas ko-
statusu (Status and Alt. Status Re- tusu ustawiony na 1). Znaczenie munikacji z kartÄ…. Przestawienie
gisters) - offsety 7 oraz E, tylko do poszczegÛlnych bitÛw tego rejestru karty na Slave, jeÅ›li korzystamy
odczytu. Rejestry te zwracajÄ… aktual- (rys. 9) jest nastÍpujÄ…ce: z trybu PC Card Memory, moÅ‚li-
ny status karty Compact Flash. Po- D7...D4 - Nieistotne. we jest jedynie poprzez wpis do
winien on byĘ sprawdzany przed D3 - WartośĘ tego bitu jest igno- rejestrÛw konfiguracyjnych karty
wysÅ‚aniem jakiejkolwiek komendy rowana przez kartÍ. (dostÍp przy niskim poziomie syg-
do kontrolera karty, nastÍpnie po SW Rst - Wpisanie jedynki powodu- naÅ‚u -REG), a wiÍc stosujÄ…c poÅ‚Ä…-
wysÅ‚aniu tej komendy oraz pomiÍ- je programowy reset karty. Wyma- czenia wedÅ‚ug rys. 3 lub rys. 4
dzy zapisem/odczytem kałdego sek- ga programowego wyzerowania, aby (EP2/2004), po prostu jest niemoł-
tora danych. Rejestr alternatywnego zakoÒczyĘ procedurÍ resetu i umoÅ‚- liwe do zrealizowania.
statusu rÛÅ‚ni siÍ tym od podstawo- liwiĘ karcie normalnÄ… pracÍ. HS3...HS0 - 4 najbardziej znaczÄ…ce
wego, łe odczyt pierwszego nie ka- -IEn - Jeśli jest ustawiony, karta bity adresu LBA lub numer gło-
suje sygnaÅ‚u aktywnego przerwania nie zgÅ‚asza przerwaÒ do mikro- wicy w trybie CHS.
Rys. 7. Znaczenie poszczególnych bitów rejestru Rys. 9. Znaczenie poszczególnych bitów rejestru
błędów kontrolnego
Rys. 8. Znaczenie poszczególnych bitów rejestrów:
Rys. 10. Znaczenie poszczególnych bitów rejestru
statusu i alternatywnego statusu
głowicy/dysku
Elektronika Praktyczna 3/2004
84
K U R S
Bajty nr 120...124 - liczba dostÍp-
nych sektorÛw w trybie LBA, czy-
li zarazem pojemnośĘ danej karty
- to najwałniejsza dla nas infor-
macja, ktÛrÄ… zwraca komenda
identyfikacji.
0x20 lub 0x21 - Odczyt Sekto-
ra/Ûw (Read Sector(s)) - rys. 12.
ZakÅ‚adajÄ…c, Å‚e adresujemy kartÍ
w trybie LBA, zawartośĘ rejestrÛw
przy wywołaniu komendy powinna
wyglądaĘ tak:
X - Dane nieistotne.
LBA = 1.
Rys. 11. Struktura kodu polecenia identyfikacja napędu
Drive = 0.
LBA[27...0] - adres sektora, od
Adresowanie rejestrÛw ATA Specyfikacja ATA dla kart CF ktÛrego rozpoczynamy transmisjÍ.
JeÅ›li juÅ‚ znamy znaczenie po- zawiera dośĘ pokaünÄ… liczbÍ obsÅ‚ugi- Sector Count - liczba sektorÛw do
szczegÛlnych rejestrÛw kontrolera wanych przez nie komend ATA. odczytu (0 = 256, 1 = 1, 2 = 2 itd.).
ATA, musimy znaĘ sposÛb ich ad- Wiele z nich dotyczy trybÛw zabez- Jest to polecenie najbardziej dla
resowania. Zgodnie z tab. 3 musimy pieczeÒ (Security Commands), oraz nas interesujÄ…ce. Pozwala na odczyt
wygenerowaĘ na odpowiednich wy- innych mniej waÅ‚nych funkcji lub maksymalnie 256 sektorÛw, jeÅ›li
prowadzeniach karty wÅ‚aÅ›ciwÄ… sek- sÄ… rÛÅ‚nymi odmianami podstawo- wartośĘ rejestru 2 wynosi zero. Re-
wencjÍ sygnaÅ‚Ûw sterujÄ…cych. Przy wych komend zapisu/odczytu sekto- jestry 3...6 zawierajÄ… adres poczÄ…t-
wykorzystaniu interfejsu do zewnÍtr- ra. Ze wzglÍdu na ograniczonÄ… objÍ- kowego sektora. JeÅ›li bit LBA =1,
znej pamiÍci RAM zawartego w mik- tośĘ artykuÅ‚u opiszemy tylko 3 naj- wtedy stosujemy adresowanie LBA,
rokontrolerze, sprowadza siÍ to do waÅ‚niejsze i niezbÍdne komendy. a gdy LBA=0, to CHS. Po wydaniu
zapisu lub odczytu odpowiedniej ko- komendy trzeba zaczekaĘ, ał kont-
mÛrki pamiÍci. W zaleÅ‚noÅ›ci od te- 0x0E - Identyfikacja napÍdu roler karty wyzeruje flagÍ BUSY
go czy podÅ‚Ä…czyliÅ›my kartÍ wedÅ‚ug (Identify Drive) - rys. 11. i ustawi DRQ, a nastÍpnie odczytaĘ
rys. 3, czy wedÅ‚ug rys. 4, poszcze- ZawartośĘ rejestrÛw przy wywo- 512 bajtÛw danych z Rejestru da-
gÛlne rejestry (o danym offsecie) Å‚aniu komendy jest nastÍpujÄ…ca: nych. Komenda posiada dwie od-
majÄ… adresy pokazane w tab. 4. X - Dane nieistotne. miany - wersja z powtÛrzeniami
Jak pewnie uwałni Czytelnicy Drive - Numer dysku - w naszym (komenda 0x20) nakazuje kontrole-
zauwałyli, w tab. 4 nie opisano przypadku bit ten powinien mieĘ rowi w przypadku natrafienia na
wszystkich moÅ‚liwych do zaadreso- wartośĘ 0. uszkodzony sektor prÛbowaĘ odczy-
wania rejestrÛw ATA, a jedynie Komenda zwraca 256 sÅ‚Ûw (512 taĘ go ponownie. Liczba prÛb jest
9 z nich. Owe 9 rejestrÛw wystarcza bajtÛw) zawierajÄ…cych informacje nieokreÅ›lona standardem i specyficz-
do typowej obsługi interfejsu ATA, o danej karcie. Po wykonaniu ko- na dla kałdego typu karty. Mecha-
a wiÍc pozostaÅ‚e rejestry moÅ‚emy mendy odczytujemy dane w iden- nizm ten jest niewidoczny dla uÅ‚yt-
pominąĘ. tyczny sposÛb jak odczytujemy jeden kownika, a informacja o wystÄ…pieniu
sektor pamiÍci. SpoÅ›rÛd danych naj- problemu pojawia siÍ jedynie jako
Komendy ATA bardziej interesujÄ… nas nastÍpujÄ…ce: ustawienie bitu CORR w rejestrze
Operacje zapisu i odczytu danych Bajty nr 20...39 - numer seryjny statusu - o ile kontrolerowi udało
z karty CF wymagajÄ… stosowania od- karty (w ASCII). siÍ skorygowaĘ odczytywane dane.
powiednich komend zgodnych ze Bajty nr 54...93 - typ (nazwa) W przeciwnym przypadku kontroler
specyfikacjÄ… ATA. Oznacza to przy- karty. ustawia flagÍ ERR i przerywa trans-
kładowo, łe aby otrzymaĘ zawartośĘ
jednego sektora pamiÍci, czyli 512
bajtÛw danych, naleÅ‚y najpierw za-
adresowaĘ kartÍ jako Master, po-
przez wpis do rejestru Numer głowi-
cy/dysku czterech najbardziej znaczÄ…-
cych bitÛw LBA plus wartośĘ 0xE0,
poczekaĘ na wyzerowanie flagi BU-
SY i ustawienie flagi DRDY, a na-
stÍpnie wpisaĘ niezbÍdne dane do
rejestrÛw o offsetach od 2 do 5, po
czym do rejestru komend wpisaĘ
kod komendy odczytu sektora. Na-
stÍpnie naleÅ‚y sprawdziĘ gotowośĘ
karty na wysłanie danych i dopiero
wtedy mołna odczytaĘ owe 512 baj-
tÛw poprzez wykonanie 512 odczy-
tÛw Rejestru danych (offset 0).
Rys. 12. Struktura kodu polecenia odczyt sektora/ów
Elektronika Praktyczna 3/2004
85
K U R S
- Wpisaniu do rejestru kontrolnego
(offset E) wartości 0x06.
- Odczekaniu okoÅ‚o 10 µs.
- Wpisaniu do rejestru kontrolnego
wartości 0x02.
- Odczekaniu okoÅ‚o 10 µs.
- Sukcesywnym odczytywaniu za-
wartości rejestru Statusu do cza-
su aÅ‚ kontroler wyzeruje flagÍ
BUSY i ustawi flagÍ DRDY. Mak-
symalny czas odpowiedzi na re-
set mołe wynieśĘ około 500 ms.
- Kontrolnego odczytu rejestru Nu-
Rys. 13. Struktura kodu polecenia zapis sektora/ów
mer sektora (offset 3), ktÛry po
misjÍ, jeÅ›li prÛbowaliÅ›my odczyty- li chcemy zapisaĘ wiÍcej niÅ‚ 1 sek- prawidÅ‚owym resecie karty przyj-
waĘ wiÍcej niÅ‚ 1 sektor. tor (Sector Count rÛÅ‚ny od 1), to muje wartośĘ 1.
moÅ‚emy wysÅ‚aĘ do karty zawartośĘ JeÅ›li procedura ta zakoÒczy siÍ
0x30 lub 0x31 - Zapis sektora/ kolejnego sektora, czyli kolejne 512 sukcesem, mamy pewnośĘ, łe karta
Ûw (Write Sector(s)) - rys. 13. bajtÛw danych do Rejestru danych jest gotowa do przyjÍcia wybranej
ZawartośĘ rejestrÛw przy wywo- (offset 0). przez nas komendy.
Å‚aniu komendy jest identyczna jak Wszystkie podane dotychczas in-
dla komendy odczytu, z wyłącze- Programowe zerowanie formacje powinny pozwoliĘ na na-
niem kodu komendy. sterownika karty CF pisanie konkretnych procedur ko-
Zasada dziaÅ‚ania jest identyczna Po zaÅ‚Ä…czeniu zasilania karty, munikacji z kartÄ… CF, wiÍc w ko-
jak w przypadku komendy Read przed rozpoczÍciem komunikacji lejnej czÍÅ›ci kursu przedstawiÍ
Sector, ale w tym przypadku dane z kartÄ… lub w przypadku wystÄ…pie- sposÛb implementacji komend zapi-
sÄ… zapisywane do karty. Po wysÅ‚a- nia bÅ‚ÍdÛw komunikacji naleÅ‚y wy- su i odczytu sektora dla kart typu
niu zawartości jednego sektora mu- konaĘ programowe zerowanie ste- Compact Flash, oparty o procedury
simy zaczekaĘ, aÅ‚ kontroler karty rownika karty. W praktyce polega w jÍzyku ìCî.
wyzeruje flagÍ BUSY, po czym jeÅ›- ono na: Romulad BiaÅ‚y
Elektronika Praktyczna 3/2004
86
Wyszukiwarka
Podobne podstrony:
Obsługa kart pamięci Flash, część 7Obsługa kart pamięci Flash, część 4Obsługa kart pamięci Flash, część 3Obsługa kart pamięci Flash, część 6Obsługa kart pamięci Flash, część 5Obsługa kart pamięci Flash, część 1Obsługa kart pamięciowych SD, cz 2PAMIECI FLASHDigital Image Recovery do odzyskiwania danych z kart pamięci fotograficznychOdczytanie identyfikatorów VID i PID pendrive i pamięci flashOdczytanie identyfikatorów VID i PID pendrive i pamięci flashutk2 pamieci flashMikrokontrolery STM32 Obsługa kart SD i FatFsProgramowanie pamięci FLASH ROM Jak uruchomić programator FLASHInstalacja Windows XP z USB, pendrive a lub karty pamięci flashProgramowanie pamięci Flash mikrokontrolerów STM32 – Flash Loaderwięcej podobnych podstron