Obsługa kart pamięci Flash, część 2


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ęść 7
Obsługa kart pamięci Flash, część 4
Obsługa kart pamięci Flash, część 3
Obsługa kart pamięci Flash, część 6
Obsługa kart pamięci Flash, część 5
Obsługa kart pamięci Flash, część 1
Obsługa kart pamięciowych SD, cz 2
PAMIECI FLASH
Digital Image Recovery do odzyskiwania danych z kart pamięci fotograficznych
Odczytanie identyfikatorów VID i PID pendrive i pamięci flash
Odczytanie identyfikatorów VID i PID pendrive i pamięci flash
utk2 pamieci flash
Mikrokontrolery STM32 Obsługa kart SD i FatFs
Programowanie pamięci FLASH ROM Jak uruchomić programator FLASH
Instalacja Windows XP z USB, pendrive a lub karty pamięci flash
Programowanie pamięci Flash mikrokontrolerów STM32 – Flash Loader

więcej podobnych podstron