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