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


K U R S
Obsługa kart pamięci FLASH
za pomocą mikrokontrolerów,
część 4
Karty MultiMedia Card (MMC)
W tej części kursu zajmiemy się drugim rodzajem opisywanych
W porównaniu do wcześniej opisy-
wanych kart CF charakteryzują się one
kart  kartami MultiMedia Card, czyli MMC.
dużo mniejszymi wymiarami wynoszący-
mi tylko 32x24 mm przy grubości wy- cującym w trybie  otwarty dren lub
noszącej jedynie 1,4 mm oraz wagą nie w trybie push-pull. Linia DAT pracuje
przekraczającą 1,5 grama (fot. 1). Karty jako wejście lub wyjście w trybie push-
MultiMedia Card były do niedawna naj- pull. W trybie SPI wszystkie linie są
mniejszymi z ogólnie dostępnych nośni- jednokierunkowe, co znacznie ułatwia
ków pamięci. Rozmiarami przypominają stosowanie wszelkiego rodzaju kon-
znaczek pocztowy. werterów poziomów logicznych, oraz
Standard MMC stworzono w roku upraszcza procedury komunikacyjne.
1997 przy współpracy firm SanDisk W trybie MMC możliwe jest bezpośred-
Corporation, Siemens AG and Infine- nie i jednoczesne podłączenie do jednej
on Technologies AG. W chwili obecnej trójprzewodowej magistrali aż 65535
Fot. 1
dostępne są karty MMC o pojemności kart, a wybór aktywnej karty odbywa
do 512 MB, a wkrótce oczekiwane są się przy pomocy mechanizmów czysto SPI, którego sprzętowy interfejs posia-
modele o pojemności 1 GB. Karty MMC programowych zaimplementowanych da wiele mikrokontrolerów jednoukła-
mogą być zasilane napięciem od 2,7 w protokół komunikacji. W przypadku dowych. Z tego też względu najłatwiej
do 3,6 V i nie mogą być bezpośred- trybu SPI do jednej magistrali możemy jest podłączyć kartę MMC do wbudo-
nio dołączane do systemów zasilanych również dołączyć wiele kart, lecz każda wanego w mikrokontroler interfejsu SPI
napięciem 5 V. Nie stanowi to jednak z nich wymaga podłączenia oddzielnego i wykorzystać ten tryb pracy karty. Jeśli
zbyt wielkiego problemu, ponieważ sygnału CS adresującego wybraną kartę. mikrokontroler nie posiada wbudowanego
urządzenia przenośne, w których naj- Ze względu na znaczne uproszczenie interfejsu SPI, to można wykorzystać do
częściej stosowane są tego typu karty komunikacji, w dalszej części artykułu komunikacji z kartą trzy linie portów
są przeważnie zasilane napięciem 3,3 V, zajmę się głównie trybem SPI. wejścia-wyjścia, i w prosty sposób na-
a jeśli zechcemy zastosować taką kartę pisać procedury programowego interfejsu
we własnych konstrukcjach zasilanych Podłączenie karty MMC do SPI typu Master, jakoż że karta zawsze
napięciem o wartości 5 V, to zawsze mikrokontrolera działa jako urządzenie typu Slave.
można zastosować odpowiedni stabili- Wbudowany w karty typu MMC Na rys. 2 pokazano najprostszy
zator napięcia zasilania oraz konwerter kontroler może komunikować się z ho- sposób podłączenia karty MMC do
poziomów logicznych z 5 na 3,3 V. stem w dwóch różnych trybach trans- mikrokontrolera AtMega162 zasilanego
Pobór prądu przez karty MMC jest misji danych. Pierwszy z nich  zwany napięciem od 2,7 do 3,6 V. Wybrałem
mniejszy niż dla kart CF i wynosi typo- MultiMedia Card Mode jest podstawo- ten typ mikrokontrolera ze względu na
wo poniżej 40 mA przy zapisie, 30 mA wym trybem pracy kart MMC i udo- to, że posiada dużo wewnętrznej pamię-
przy odczycie i około 50 mA w trybie stępnia wszystkie komendy zdefiniowane ci RAM co umożliwia zapisanie całego
gotowości. w standardzie MMC. Drugi  nieco sektora karty (512 B) naraz do pamię-
okrojony tryb komunikacji jest sprzętowo ci. Jak widać sam układ jest banalnie
Interfejs kompatybilny z popularnym protokołem prosty, ponieważ karta jest dołączona
Karty MMC posiadają proste, płaskie synchronicznej, szeregowej magistrali bezpośrednio do linii interfejsu SPI
7-stykowe złącze. Do komunikacji karty
z hostem wykorzystuje się szeregową
Tab. 1. Funkcje styków kart MMC
transmisję danych. W zależności od
Tryb MultiMedia Card Tryb SPI
Numer
styku
użytego protokołu komunikacji  o czym
Nazwa Opis Nazwa Opis
piszę dalej  poszczególne styki karty
1 RSV Nie używany lub podłączony do VDD CS Chip Select aktywny  0 logicznym
mają nieco inne funkcje (tab. 1). Styk
Komendy/Odpowiedzi  linia
2 CMD DataIn Komendy/Dane z hosta do karty
dwukierunkowa
karty oznaczony numerem 1 znajduje się
3 VSS1 Masa VSS1 Masa
od strony ścięcia na obudowie karty.
4 VDD Zasilanie 2,7...3,6 V VDD Zasilanie 2,7...3,6 V
W trybie MultiMedia Card obie linie
5 CLK Sygnał zegarowy transmisji CLK Sygnał zegarowy transmisji
po których przesyłane są dane pracują
6 VSS2 Masa VSS2 Masa
w trybie dwukierunkowym. Linia CMD
7 DAT[0] Dane  linia dwukierunkowa DataOut Dane/Status z karty do hosta
może być wejściem lub wyjściem pra-
Elektronika Praktyczna 6/2004
73
K U R S
bez możliwości dokonania jakichkolwiek
zmian. W tab. 3 podano szczegółowe
informacje o znaczeniu poszczególnych
pól rejestru CSD.
Z wielu informacji zawartych
w poszczególnych polach rejestru CSD
dokładniej opisze tylko kilka z nich,
które będą potrzebne do prawidłowej ko-
munikacji z kartą lub zawierają informa-
cje przydatne dla naszych celów. I tak
kolejno zaczniemy od czasu dostępu do
danych na karcie określonego polami
TAAC, NSAC i R2W_FACTOR.
Pole TTAC określa składnik czasu do-
stępu do danych na karcie podczas od-
czytu, niezależny od częstotliwości prze-
biegu zegarowego podanego na linie CLK
karty. W bitach od 0 do 2 tego pola
zakodowany jest wykładnik czasu dostępu
i wynosi odpowiednio: 0=1 ns, 1=10 ns,
2=100 ns, 3=1 ms, 4=10 ms, 5=100 ms,
6=1 ms, 7=10 ms. W bitach od 3 do
6 tego pola zakodowana jest podstawa
czasu która wynosi odpowiednio: 1=1,0,
2=1,2, 3=1,3, 4=1,5, 5=2,0, 6=2,5,
Rys. 2. Schemat podłączenia karty MMC do mikrokontrolera AVR 7=3,0, 8=3,5, 9=4,0, 10=4,5, 11=5,0,
12=5,5, 13=6,0, 14=7,0, 15=8,0. Bit 7
mikrokontrolera (sygnały MOSI, MISO mieści się w 16 bajtach danych. Zawie- tego pola jest zarezerwowany. Przykłado-
i SCK), oraz dodatkowo wykorzystano ra on dane tylko do odczytu. W tab. 2 wo, jeśli odczytamy wartość 0x26 z pola
port PB0 jako sygnał Chip Select dla podano szczegółowe informacje o zna- TAAC, oznacza to że czas dostępu wyno-
karty. W tym miejscu wypada dodać że czeniu poszczególnych pól rejestru CID. si 1,5 * 1 ms czyli 1,5 milisekundy.
złącze jak i karty MMC zostały zapro- Ale na tym nie koniec, ponieważ
jektowane w ten sposób, że umożliwiają Rejestr CSD  Card Specific Data istnieje jeszcze pole NSAC które okre-
tak zwany Hot Swap, czyli wkładanie Rejestr ten zawiera wszystkie dane śla dodatkowo składnik czasu dostępu
i wyjmowanie karty przy załączonym o konfiguracji danej karty niezbędne zależny od częstotliwości przebiegu
zasilaniu całego urządzenia. W tym celu do prawidłowej komunikacji z kartą. zegarowego. Jednostką jest tu 100 cy-
styki złącza MMC doprowadzające zasila- Posiada on zarówno pola tylko do od- kli zegarowych, a więc wartość pola
nie do karty są nieco bardziej wysunięte czytu  czyli wartości ustalane przez NSAC wynosząca 0x04 oznacza, że do
i zapewniają wcześniejszy kontakt z po- producenta karty, jak i pola, których czasu odczytanego z TAAC należy jesz-
lami karty niż pozostałe styki. zawartość może być zmieniana przez cze dodać czas generowania 400 cykli
użytkownika przy pomocy specjalnej zegarowych, a będzie on zależał od
Rejestry karty MMC komendy. Niektóre pola są jednokrotnie częstotliwości na linii CLK czyli inaczej
Karty MMC posiadają 6 rejestrów programowalne, tak wiec po jednokrot- od prędkości przesyłu danych. Tyle na
specjalnych zawierających informacje nej zmianie nie jest możliwy powrót do temat czasu dostępu przy odczycie.
o karcie, jej bieżącą konfigurację, ak- poprzedniej wartości. Przykładem może Pole R2W_FACTOR określa mnożnik
tualny adres karty (przy wykorzystaniu być pole Permanent Write Protection, przez który trzeba pomnożyć otrzyma-
protokołu MMC) oraz rejestr statusu. które umożliwia zablokowanie możli- ny czas dostępu przy odczycie, aby
Każdy z rejestrów ma inną wielkość, wości zapisu na kartę, przez co karta uzyskać czas zapisu jednego bloku na
więc nazwa rejestr, która kojarzy się staje się jakby kartą pamięci typu ROM kartę. Wartości tego mnożnika są na-
nam z jakąś konkretną wielkością (8,
16 czy więcej bitów), nie jest tu zbyt
Tab. 2. Znaczenie poszczególnych bitów rejestru CID
adekwatna i raczej należało by je na-
Wielkość
zwać strukturami. Ponieważ w ogólnodo- Nazwa Typ pola Pozycja Opis
w bitach
stępnych opisach przyjęto nazwę rejestr,
Manufacturer ID Binarny 24 [127 104] Numer Identyfikacji producenta nadany przez MMCA
będę się tej terminologii trzymał w arty-
Product name Tekstowy 56 [103 48] Nazwa karty w postaci jawnego tekstu
kule. W przypadku komunikacji z kartą
HW Revision Binarny 4 [47 44] Wersja sprzętu karty
w trybie SPI dostępne są tylko dwa
Wersja oprogramowania karty
FW Revision Binarny 4 [43 40]
z nich, więc opiszę je szczegółowo.
(wewnętrznego kontrolera)
Serial Number Binarny 24 [39 16] Unikalny numer seryjny karty
Rejestr CID  Card Identification Regi-
Month code Binarny 4 [15 12] Data produkcji  miesiąc
ster
Year code Binarny 4 [11 8] Data produkcji  rok w postaci offsetu od roku 1997
Rejestr ten zawiera dane o produ- CRC7 checksum* Binarny 7 [7 1] Wyliczona suma kontrolna danych rejestru CID
cencie, nazwie, wersji oraz typie danej
Dopełnienie do 128 bitów czyli do 16 bajtów
Not used 1 [0]
(zawsze  1 )
karty. Ma on długość 128 bitów, czyli
Elektronika Praktyczna 6/2004
74
K U R S
Pole READ_BL_LEN określa mak-
Tab. 3. Znaczenie poszczególnych bitów rejestru CSD
symalną długość pojedynczego bloku
Wielkość Typ
Nazwa pola Pozycja Opis
w bitach komórki danych możliwych do odczytania jedną
CSD_STRUCTURE 2 [127 126] R Wersja struktury rejestru CSD komendą odczytu. Długość tą obliczamy
MMC_PROT 4 [125 122] R Wersja protokołu MMC jako 2READ_BL_LEN, a dopuszczalny zakres
 2 [121 120] R Zarezerwowany tego pola wynosi od 0 do 11. Oznacza
Czas dostępu przy odczycie  część nieza- to że długość bloku może wynosić od
TAAC 8 [119 112] R
leżna od zegara
1 bajtu (READ_BL_LEN = 0) do 2048
Czas dostępu przy odczycie  część zależna
bajtów (READ_BL_LEN =11). Typo-
NSAC 8 [111 104] R
od zegara
wa wartość tego pola to 9, czyli blok
TRAN_SPEED 8 [103 96] R Maksymalna szybkość transmisji (zegara)
o długości 512 bajtów. Te same zasady
CCC 12 [95 84] R Klasa komend
tyczą się pola WRITE_BL_LEN, przy
READ_BL_LEN 4 [83 80] R Maksymalna długość bloku przy odczycie
czym w tym przypadku dotyczą komen-
READ_BL_PARTIAL 1 [79] R Czy możliwy odczyt fragmentu bloku
dy zapisu bloku na kartę.
WRITE_BLK_MISALGIN 1 [78] R
Pola VDD_R_CURR_MIN, VDD_R_
READ_BLK_MISALGIN 1 [77] R
CURR_MAX, VDD_W_CURR_MIN, VDD_
DSR_IMP 1 [76] R Czy zaimplementowano DSR
W_CURR_MAX określają typowy pobór
 2 [75 74] R Zarezerwowany
prądu przez kartę podczas odczytu
C_SIZE 12 [73 62] R Pojemność karty
i zapisu, przy minimalnym (pola z MIN)
Max. pobór prądu przy odczycie przy
VDD_R_CURR_MIN 3 [61 59] R
i maksymalnym (pola z MAX) napięciu
minimalnym VDD
Max. pobór prądu przy odczycie przy mak- zasilania karty. Pola te mają wielkość 3
VDD_R_CURR_MAX 3 [58 56] R
symalnym VDD
bitów a więc można określić 8 różnych
Max. pobór prądu przy zapisie przy mini-
wartości. I tak przy odczycie poszczegól-
VDD_W_CURR_MIN 3 [55 53] R
malnym VDD
ne wartości prądów wynoszą: 0=0,5 mA,
Max. pobór prądu przy zapisie przy maksy-
VDD_W_CURR_MAX 3 [52 50] R
1=1 mA, 2=5 mA, 3=10 mA, 4=25 mA,
malnym VDD
5=35 mA, 6=60 mA, 7=100 mA. Pola
C_SIZE_MULT 3 [49 47] R Mnożnik pojemności karty
dotyczące zapisu mają nieco inaczej za-
SECTOR_SIZE 5 [46 42] R Wielkość kasowanego sektora
kodowane wartości: 0=1 mA, 1=5 mA,
ERASE_GRP_SIZE 5 [41 37] R Wielkość kasowanych grup sektorów
2=10 mA, 3=25 mA, 4=35 mA, 5=45 mA,
Wielkość grupy sektorów które można zabez-
WP_GRP_SIZE 5 [36 32] R
pieczyć przed zapisem 6=80 mA, 7=200 mA.
Czy możliwe jest zabezpieczenie grupy przed W końcu dochodzimy do najważniej-
WP_GRP_ENABLE 1 [31] R
zapisem
szej rzeczy, czyli do pojemności karty.
DEFAULT_ECC 2 [30 29] R Fabrycznie ustawiony typ korekcji błędów
Nie wiadomo czemu jest ona zakodo-
Stosunek czasu dostępu do czasu zapisu
wana w dość dziwny i zawiły sposób,
R2W_FACTOR 3 [28 26] R
(mnożnik)
i żeby ją uzyskać musimy się posłużyć
WRITE_BL_LEN 4 [25 22] R Maksymalna długość bloku przy zapisie
wartościami aż trzech pól: C_SIZE,
WRITE_BL_PARTIAL 1 [21] R Czy możliwy zapis fragmentu bloku
C_SIZE_MULT, oraz READ_BL_LEN. Za-
 5 [20 16] R Zarezerwowane
czn3my od obliczenia pojemności karty
 1 [15] R/W Zarezerwowany
w blokach, czyli od ilości bloków na
COPY 1 [14] R/W Flaga określająca kopię
karcie:
PERM_WRITE_PROTECT 1 [13] R/W Stała blokada zapisu na kartę
BLOCKNR = (C_SIZE + 1) * 2(C_SIZE_MULT + 2)
TMP_WRITE_PROTECT 1 [12] R/W/E Tymczasowa blokada zapisu na kartę
Skomplikowane, prawda? Ale nie
 2 [11 10] R/W Zarezerwowany
szkodzi, bo jak się okaże podczas opi-
ECC 2 [9 8] R/W/E Typ korekcji błędów
sywania procedur komunikacji  dość
Wyliczona suma kontrolna danych rejestru
CRC 7 [7 1] R/W/E
proste do obliczenia. Stąd już tylko krok
CSD
do poznania pojemności karty wyrażonej
 1 [0]  Zarezerwowany
w bajtach, bo obliczoną ilość bloków
Typ Komórki:
R  tylko do odczytu
BLOCKNR wystarczy pomnożyć przez
R/W  odczyt i jednokrotny zapis
odczytaną z READ_BL_LEN długość po-
R/W/E  dowolnie zmieniana
jedynczego bloku. Oczywiście ta długość
stępujące: 0=1, 1=2, 2=4, 3=8, 4=16, od 0 do 2 oznaczają wykładnik, którego to wartość otrzymana po rozszyfrowaniu
5=32, 6 i 7  zarezerwowane. Tak więc wartość wynosi: 0=100 kb/s, 1=1 Mb/s, pola READ_BL_LEN.
jeśli pole R2W_FACTOR ma wartość 4, 2=10 Mb/s, 3=100 Mb/s, 4...7=zarezer- Na koniec tych skomplikowanych ob-
oznacza to, że czas zapisu bloku jest wowane. Wartości podstawy zakodowane liczeń dodam że maksymalna pojemność
16-krotnie większy niż czas dostępu w bitach od 3 do 6 tego pola są iden- karty zakodowana w ten sposób wynosi
określony polami TAAC i NSAC. tyczne jak podstawy w polu TAAC czyli 4096 * 512 * 2048 bajtów co daje 4
Kolejnym polem mającym związek od 1.0 dla wartości 1 do 8.0 dla warto- gigabajty.
z szybkością karty jest pole TRAN_SPE- ści równej 15. Bit 7 pola TRAN_SPEED Jako że w trybie SPI mamy dostęp
ED określające maksymalną częstotliwość jest zarezerwowany. I znowu przykłado- jedynie do tych dwóch rejestrów kar-
przebiegu zegarowego na linii CLK, wo jeśli odczytana wartość pola wynosi ty, mogę na tym zakończyć ich opis.
czyli inaczej: szybkość przesyłu danych. 0x2A, to oznacza że dana karta może W następnej części kursu zajmiemy się
Podobnie jak w przypadku TAAC, pole pracować z szybkością do 20 Mb/s czyli protokołem komunikacji oraz opisem ko-
to składa się z podstawy i wykładnika częstotliwość sygnału zegarowego może mend dostępnych w trybie SPI.
określających częstotliwość. I tak, bity wynosić maksymalnie 20 MHz. Romuald Biały
na 6/2004 Elektronika Praktyczna 6/2004
75


Wyszukiwarka