Obsługa kart pamięciowych SD, cz.2.pdf

(626 KB) Pobierz
095-098_karty_SD_cz2.indd
KURS
Obsługa kart pamięciowych
SD, część 2
Podczas rozpoczynania przez ste-
rownik wymiany informacji z kartą
szczególna rolę odgrywają jej reje-
stry. Można je podzielić umownie
na 2 grupy:
• pierwsza z nich to rejestry OCR,
CID, CSD i SCR zawierające in-
formacje o karcie. Zapisanych
w nich jest szereg istotnych in-
formacji. Najważniejsze z nich,
to napięcie zasilania karty, mak-
symalna częstotliwość pracy ma-
gistrali, pojemność karty i pojem-
ność sektora danych.
• druga grupa to rejestry statu-
sowe Card Status i SD Status .
Rejestry statusowe zawierają in-
formacje o bieżącym stanie prze-
syłania danych.
32–bitowy rejestr OCR ( Opera-
ting Conditions Register ) zawiera
zakodowaną informację o zakresie
napięcia zasilającego, przy którym
mogą być zapisywane i odczytywa-
ne dane z obszaru pamięci Flash.
Tym napięciem powinna być kar-
ta zasilana po wysłaniu komendy
CMD1 ( Voltage Recognition Proce-
dure ). Zawartość rejestru OCR jest
przesyłana jako odpowiedź R3 na
komendę ACMD41 w trakcie inicja-
lizacji karty pracującej z magistralą
SDBus. W trybie magistrali SPI za-
Flashowe karty
pamięciowe są
od dawna chętnie
używane nawet w apli-
kacjach amatorskich do
trwałego zapisywania da-
nych. Do tej pory największą
popularnością cieszyła się do
tego karta typu MMC, jednak jej
nowocześniejsza następczyni – karta
SD szybko zdobywa sobie należne jej
zainteresowanie. W tej części skupiamy
się na opisie specyficznych rejestrów
kart SD.
wartość rejestru OCR jest przesyła-
na jako odpowiedź R3 po wysłaniu
komendy CMD58.
Strukturę rejestru OCR pokazano
na rys. 9 . Wyzerowany najstarszy
bit Busy informuje, że procedury
wykonywane po włączeniu zasila-
nia jeszcze się nie skończyły. Wy-
zerowanie bitu z pola 4…23 ozna-
cza, że wskazywany przez ten bit
zakres napięć nie jest dopuszczalny
w czasie zapisywania i odczytywania
danych.
Rejestr CID ( Card Identification
tab. 3) o długości 16 bajtów za-
wiera unikatowy numer identyfi-
kacyjny karty zapisany w procesie
produkcyjnym i nie można zmienić
jego zawartości.
Rejestr CSD ( Card Specific Data )
o długości 16 bajtów (128 bitów)
zawiera informacje o konfiguracji
karty niezbędne do określenia głów-
nie czasu dostępu, pojemności kar-
ty, długości bloku i sektora danych
oraz programowej protekcji zapisu.
Większość bitów rejestru można tyl-
ko odczytywać, ale są takie, które
można zapisywać. Rejestr CSD jest
odczytywany komendą SEND_CSD,
a zapisywany komendą PROGRAM_
CSD. Zawartość tego rejestru jest
zależna od typu karty, poniżej opi-
szemy wybrane pola tego rejestru:
• Pole CSD_STRUCTURE określa
wersję CSD. Wartość 0 oznacza
wersję V1.0 struktury CSD. Pozo-
stałe wartości są zarezerwowane.
• Pole TAAC definiuje asynchro-
niczny (niezależny od częstotli-
wości zegara SCLK) czas dostę-
pu do danych zdefiniowany jako
opóźnienie pomiędzy momentem
wysłania ostatniego bitu komen-
dy odczytu danych a momentem
pojawienia się na magistrali
pierwszego bitu odczytywanych
danych.
Tab. 3. Struktura rejestru CID
Nazwa pola Typ
Długość
w bitach
Położenie
w CID
Komentarz
Wartość
Manufacturer ID
MID
Binarny 8 [127:120]
ID producenta jest
przyznawane przez
SD Card Assoc.
Na przykład
SanDisc 0x03
OEM/Application ID
OID
ASCII 16 [119:104] Identyfikacja aplikacji
Kod ascii SD
0x53,0x44
Product name
PNM
ASCII 40 [103:64] 5znaków ASCII
Na przykład
SD128
Product Revision
(PRW)
BCD 8 [63:56]
Dwie liczby w kodzie
BCD
Wartość 0x62
oznacza wersję
6.2
Serial Number
(PSN)
Binarny 32 [55:24] 32 bitowa liczba Numer seryjny
Zarezerwowany
4 [23:20]
Manufacture Date Code
(MDT)
BCD 12 [19:8]
Data produkcji rr:mm
liczona od 2000 r.
0x14=04.2001
CRC7 checksum
(CRC)
binarny 7 [7:1] Suma kontrola
Nieużywane – zawsze
1
1 [0:0]
Elektronika Praktyczna 1/2008
95
649300487.007.png 649300487.008.png
KURS
Napięcie zasilania
Vdd
0–3 zarezerwowany
4 1,6–1,7
5 1,7–1,8
6 1,8–1,9
7 1,9–2,0
8 2,0–2,1
9 2,1–2,2
10 2,2–2,3
11 2,3–2,4
12 2,4–2,5
13 2,5–2,6
14 2,6–2,7
15 2,7–2,8
16 2,8–2,9
17 2,9–3,0
18 3,0–3,1
19 3,1–3,2
20 3,2–3,3
21 3,3–3,4
22 3,4–3,5
23 3,5–3,6
24–30 zarezerwowany
31 bit zajętości
stałe wartości są zarezerwowa-
ne. Wartość pola READ_BL_LEN
jest zawsze równa wartości pola
WRITE_BL_LEN określającej mak-
symalną długość bloku przy za-
pisywaniu danych.
• Pole WRITE_BL_LEN o długości
4 bitów określa maksymalną
długość bloku w bajtach przy za-
pisywaniu danych i jest wylicza-
na z zależności 2^WRITE_BL_
LEN. Maksymalna długość bloku
może mieć wartość z zakresu
512...2048 bajtów, a to oznacza,
że WRITE_BL_LEN może mieć
minimalną wartość równą 9 (bo
2^9=512) i maksymalną wartość
11 (bo 2^11=2048). Pozosta-
łe wartości są zarezerwowane.
Wartość pola WRITE_BL_LEN
jest zawsze równa wartości pola
READ_BL_LEN określającej mak-
symalną długość bloku przy od-
czytywaniu danych.
• Pole READ_BL_PARTIAL dla kart
SD ma zawsze wartość 1, a to
oznacza, że przy odczytywa-
niu danych można odczytywać
bloki o długości od 1 bajta do
długości określonej przez READ_
BL_LEN. Gdyby READ_LEN_PAR-
TIAL był wyzerowany, to mini-
malna długość bloku przy od-
czytywaniu musiałaby być rów-
na READ_BL_LEN.
Jeżeli pole WRITE_BL_PARTIAL
dla kart SD ma wartość 1, to ozna-
cza, że przy odczytywaniu danych
można zapisywać bloki od długoś-
ci 1 bajta do długości określonej
przez WRITE_BL_LEN. Dla kart SD
WRITE_LEN_PARTIAL jest wyzero-
wany i minimalna długość bloku
przy odczytywaniu musi być równa
READ_BL_LEN.
Rys. 9. Budowa rejestru OCR
Tab. 4. Klasy opisane w polu CCC
Bit CCC Obsługiwana klasa komend
0
Klasa 0
do czasu określonego przez pole
TAAC trzeb dodać czas trwania
500 cykli zegara SCLK.
• Pole TRAN_SPEED definiuje mak-
symalną prędkość transferu da-
nych. Podobnie jak w polu TAAC
na bitach 0…2 zakodowany jest
wykładnik prędkości, a na bi-
tach 3…6 podstawa. TRAN_
SPEED=0x2A oznacza maksymal-
ną prędkość 2*10 Mb/s.
• Pole CCC o długości 12 bitów
określa klasy komend obsługiwa-
nych przez kartę. Klasa jest ob-
sługiwana, jeżeli odpowiadający
mu bit ma stan wysoki ( tab. 4 ).
• W polu READ_BL_LEN o długości
4 bitów jest zapisana maksymal-
na długość bloku w bajtach przy
odczytywaniu danych wylicza-
na z zależności 2^READ_BL_
1
Klasa 1
…………..
11
Klasa 11
Tab. 5. Sposób wyliczania wartości
MULT
C_SIZE_MULT MULT=2^(SIZE_MULT+2)
0
2^2=4
1
2^3=8
2
2^4=16
3
2^5=32
4
2^6=64
5
2^7=128
6
2^8=256
7
2^9=512
• Pole NSAC definiuje dodatkowy
czas dostępu do danych, który
jest związany z częstotliwością
sygnału zegarowego SCLK. Bi-
narną wartość zapisaną na 8 bi-
tach pola trzeba pomnożyć przez
100. Jeżeli w polu NSAC jest
zapisana binarnie wartość 5, to
Tab. 7. Uzupełniające informacje o konfiguracji karty
SCR Structure SCR_STRUCTURE 4 R [63:60] V1.0 0
SD Card-Spec Version SD_SPEC 4 R [59:56] V1.01 0
data_status_after_erases DATA_STAT_AFTER_ERASE 1 R [55:55] 0 0
SD Security Support
SD+SECURIRY 3 R [54:52]
Prot 2, Spec
V1.01
2
DAT Bus widths supported SD_BUS_WIDTHS 4 R [51:48] 1 & 4 5
Reserved
-
16 R [47:32] 0 0
Tab. 6. Informacje o formacie danych
przechowywanych na karcie
FILE_
FORMAT_
GRP
Reserved for manufacturer
usage
-
32 R [31:0] 0 0
FILE_FOR-
MAT
Format plików
LEN. Maksymalna długość bloku
może mieć wartość z zakresu
512…2048 bajtów, a to ozna-
cza, że READ_BL_LEN może
mieć minimalną wartość rów-
ną 9 (2^9=512) i maksymalną
wartość 11 (2^11=2048). Pozo-
Tab. 8. Pole SD_BUS_WIDTHS
SD_BUS_WIDTHS Szerokość magistrali
Bit 0 1–bitowa (DAT0)
Bit 1 Zarezerwowany
Bit 2 4–bitowa (DAT0…3)
Bit 3
0 0 HDD z tablicą partycji
0 1 DOS FAT z boot sector
0 2 Universal File Format
0 3 Inny/nieznany
1 0…3 Zarezerwowany
Zarezerwowany
96
Elektronika Praktyczna 1/2008
OCR
Bit
649300487.009.png 649300487.010.png
KURS
• Pole WRITE_BLK_MISALIGN
określa czy możliwy jest za-
pis przez jedną komendę bloku
dłuższego niż fizyczny blok kar-
ty. Długość bloku fizycznego jest
określona w polu WRITE_BL_
LEN. Dla kart SD WRITE_BLK_
MISALIGN jezt wyzerowany, a to
oznacza, że taki zapis nie jest
możliwy.
• Pole READ_BLK_MISALIGN okre-
śla czy możliwe jest odczyta-
Tab. 9. Rejestr statusowy Card Status
Bit
Identyfikator
Typ Wartość
Opis
31
OUT_OF_RANGE
ERX
0=no error
1=error
Argument komendy był większy niż dopuszczalna wartość dla tej karty
30
ADDRESS_ERROR
ER
0=no error
1=error
Adres nie jest zgodny z wielkością bloku danych użytych w tej komen-
dzie
29
BLOCK_LEN_ERROR
ER
0=no error
1=error
Długość bloku danych jest nieprawidłowo ustawiona dla tej karty
28
ERASE_SEQ_ERROR
ER
0=no error
1=error
Wystąpił błąd w sekwencji kasowania
27
ERASE_PARAM
ERX
0=no error
1=error
Nieprawidłowo ustawiona sekcja zapisu bloku danych w operacji kaso-
wania
26
WP_VIOLATION
ERX
0=not protect
1=protect
Próba zapisania danych, kiedy ustawiona jest opcja WRITE PROTECT
25
CARD_IS_LOCKED
SX
0=card unlocked
1=card locked
Karta jest zablokowana przez host
24 LOCK_UNLOCK_FAILED ERX
0=no error
1=error
Wykryty błąd sekwencji lub hasła blokowania/odblokowania karty
23
COM_CRC_ERROR
ER
0=no error
1=error
Błąd CRC
22
ILLEGAL_COMMAND
ER
0=no error
1=error
Nieprawidłowa komenda w bieżącym stanie karty
21
CARD_ECC_FAILED
ERX
0=success
1=failure
Wewnętrzny ECC karty został wprowadzony, ale nie był w stanie skory-
gować danych
20
CC_ERROR
ERX
0=no error
1=terror
Błąd wewnętrznego mikrokontrolera karty
19
ERROR
ERX
0=no error
1=terror
Nieznany błąd główny wystąpił w czasie wykonywania operacji
18
Zarezerwowany
17
Zarezerwowany
16 CID/CSD OVERWRITE
ERX
0=no error
1=terror
Jedno z możliwych zdarzeń:
Rejestr CID został już zapisany, ale nie może być nadpisany
lub
Sekcja „tylko do odczytu” rejestru CSD nie pasuje do karty
15
WP_ERASE_SKIP
SX
0=not protected
1=protected
Wykasowana została tylko przestrzeń partycji adresów, bo jest ustawio-
na protekcja zapisu
14
CARD_ECC_DISABLE
SX
0=enabled
1=disabled
Komenda została wykonana bez wewnętrznego ECC
12
ERASE_RESET
SR
0=cleared
1=set
Sekwencja kasowania została przerwana przed wykonaniem
12:9
CURRENT_STATE
SX
0–idle
1=ready
2=ident
3=stby
4=tran
5=data
6=rcv
7=prg
8=dis
9..15 rezerwa
Stan karty po odebraniu komendy. Jeżeli wykonanie komendy zmienia
stan karty, to zmian stanu będzie widziana przez host jako odpowiedź
po następnej komendzie
8
READY_FOR_DATA
SX
0=not ready
1=ready
Sygnalizuje, ze bufor danych jest pusty
7:6
Zarezerwowane
5
APP_CMD
SR
0=disabled
1=enabled
Karta spodziewa się komendy aplikacji ACMD lub komenda została
zinterpretowana jako ACMD
4
Zarezerwowany
3
AKE_SEQ_ERROR
ER
0=no error
1=terror
Błąd sekwencji autoryzacji
2 zarezerwowany dla komend aplikacji
1,0 zarezerwowany dla testów produkcyjnych
E – bit błędu (error bit); S – bit statusu (status bit); R – wykryte i ustawiane do potwierdzenia bieżącej komendy; X – wykryte i ustawiane w czasie
bieżącej komendy
Elektronika Praktyczna 1/2008
97
649300487.001.png 649300487.002.png 649300487.003.png 649300487.004.png 649300487.005.png
KURS
Tab. 10. Rejestr SD Card Status
Bit Identyfikator Typ Wartość
Opis
czy jest kopią (bit ustawiony).
Raz ustawionego bitu COPY nie
można już wyzerować.
• Ustawiony bit PERM_WRITE_
PROTECT sygnalizuje, że jest
możliwe tylko odczytywanie da-
nych z pamięci. Zabronione jest
kasowanie i zapisywanie danych.
Bit PERM_WRITE_PROTECT jest
bitem OTP, raz ustawionego nie
da się już skasować.
• Bit TMP_WRITE_PROTECT
umożliwia czasowe zablokowanie
możliwości zapisywania i kasowa-
nia danych. Spełnia taką samą
funkcję jak PERM_WRITE_PRO-
TECT, ale po ustawieniu można
go wyzerować.
• Pola FILE_FORMAT_GRP i FILE
FORMAT zawierają informacje
o formacie plików zapisywanych
na karcie ( tab. 6 ).
W kolejnym rejestrze – SCR
– są zapisane uzupełniające infor-
macje dotyczące konfiguracji karty
( tab. 7 ).
• Pole SCR_STRUCTURE jest po-
wieleniem pola CSD_STRUCTU-
RE rejestru CSD.
• Pole SD_SPEC określa wersję
warstwy fizycznej
karty SD. Dla kart
SD dopuszczalna jest
wartość zerowa ozna-
czająca wersję V1.0
lub V1.01.
• Pole DATA_STAT_
AFTER_ERASE okre-
śla wartość wpisywa-
ną do komórek pa-
mięci po skasowaniu.
Dla karty SD jest to
zero.
• W polu SD_SECU-
RITY zapisana jest
informacja o wersji
zaimplementowanego
algorytmu ochrony.
Wartość zerowa oznacza brak al-
gorytmu ochrony, wartość 1 to
wersja V1.0, wartość 2 to wersja
V2.0.
• Ostatnie pole – SD_BUS_WID-
THS – opisuje dostępną szero-
kość magistrali SDBus ( tab. 8 ).
Rejestr statusowy Card Status
( tab. 9 ) ma długość 32 bitów i jego
struktura jest identyczna z rejestrem
statusu karty MMC. Rejestr SD_Sta-
tus ( tab. 10 ) ma długość 512 bitów
i zawiera specyficzne rozszerzone in-
formacje dotyczące tylko kart SD.
Tomasz Jabłoński, EP
tomasz.jablonski@ep.com.pl
511:
510
DAT_BUS_WIDTH SR
00=1bit domyślnie
01=rezerwa
10=4 bity
11=rezerwa
Długość magistrali danych
w trybie SDBus zdefiniowana
komendą SET_BUS_WIDTH
509 SECURED_MODE SR
0=bez trybu ochrony
1= tryb ochrony
Tryb ochrony karty SD
508:
496
zarezerwowane
495:
480
SD_CARD_TYPE SR
00xx pamięć karty SD
definiowana fizycznym
interfejsem V1.01
0000=SD RD/RW
0001=SD ROM
Typ karty
479:
448
SIZE–OF_PROTECTED_AREA SR
Rozmiar chronionej pamięci
w jednostkach określonych
przez MULT*BLOCK_LEN
(patrz rejestr CSD)
Rozmiar chronionej pamięci
wyliczany według zależności:
SIZE_OF_PROTECTED_
AREA*MULT*
BLOCK_LEN
347:
312
zarezerwowany
311:
0
Zarezerwowany przez
producenta
S – bit statusu (status bit); R – wykryte i ustawiane do potwierdzenia bieżącej komendy
nie przez jedną komendę bloku
dłuższego niż fizyczny blok kar-
ty. Długość bloku fizycznego jest
określona w polu READ_BL_LEN.
Dla kart SD WRITE_BLK_MI-
SALIGN jezt wyzerowany, a to
oznacza, że taki odczyt nie jest
możliwy.
• Pole C_SIZE jest jednym ze
składników używanych do wyli-
czania pojemności pamięci karty.
Oprócz C_SIZE pojemność jest
wyliczana z wartości pól READ_
BL_LEN i C_SIZE_MULT według
zależności:
pojemność pamięci= BLOCKNR*BLOCK_LEN
gdzie:
BLOCKNR=(Z_SIZE+1)*MULT
MULT=2 C_SIZE_MULT+2 *(C_SIZE_MULT<8)
BLOCK_LEN=2 READ_BL_LEN *(READ_BL_EN<12)
Zależność pomiędzy C_SIZE_
MULT i MULT pokazano w tab. 5 .
• Pola VDD_R_CURR_MIN i VDD_
W_CURR_MIN zawieraja zako-
dowany na 3 bitach minimalny
prąd przy zapisywaniu i odczy-
tywaniu danych.
• Pola VDD_R_CURR_MAX i VDD_
W_CURR_MAX zawierają zakodo-
wany na 3 bitach maksymalny
prąd przy zapisywaniu i odczy-
tywaniu danych.
• Pole ERASE_BLK_EN definiu-
je możliwość kasowania bloku
danych o długości określonej
polem WRITE_BL_LEN. Jeżeli
ERASE_BLK_LEN jest wyzerowa-
ny, to możliwe jest kasowanie
porcji danych o długości sektora
określonej w polu SECTOR_SIZE.
Jeżeli ma wartość 1, to możli-
we jest kasowanie bloku danych
o długości określonej w WRITE_
BL_LEN.
• Pole SECTOR_SIZE o długości 7
bitów określa zakodowaną dłu-
gość kasowanego sektora w jed-
nostkach określo-
nych w polu WRI-
TE_BL_LEN. Dla
SECTOR_SIZE=0
kasowany jest blok
o długości WRITE_
BL_LEN, a dla SEC-
TOR_SIZE=0x7F
jest kasowany
blok o długości
128WRITE_BL_EN.
• Pole WP_GRP_SIZE
o długości 7 bitów
określa grupę sek-
torów z protekcją
zapisu o długości
określonej w SEC-
TOR_SIZE. Dla
WP_GRP_SIZE=0 chroniona jest
grupa o długości SECTOR_SIZE,
a dla WP_GRP_SIZE =0x7F
jest chroniona grupa o długości
128SECTOR_SIZE. Odblokowanie
funkcji protekcji zapisu grupy
sektorów jest możliwe po usta-
wieniu bitu pola WP_GRP_ENA-
BLE.
• Pole R2W definiuje ile razy czas
zapisywania danych jest dłuższy
od czasu dostępu przy odczyty-
waniu.
• Bit COPY określa czy zapisana
zawartość w pamięci Flash jest
oryginalna (bit wyzerowany),
98
Elektronika Praktyczna 1/2008
649300487.006.png
Zgłoś jeśli naruszono regulamin