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

(1972 KB) Pobierz
098-102_karty_SD_cz3.indd
KURS
Obsługa kart pamięciowych
SD, część 3
W przedostatniej części cyklu przedstawiamy wybrane zagadnienia
związane z transmisją danych do i z kart SD. Autor omawia także
najważniejsze polecenia obsługiwane przez te karty, a które służą do
obsługi transmisji danych.
Podstawową jednostką wymiany
informacji z pamięcią karty SD jest
bajt. Każdy transfer wymagający
przesłania danych o większej dłu-
gości wymaga zdefiniowania bloku
danych.
Dla komend zapisu, odczytu
i kasowania są zdefiniowane:
• Blok danych . Blok o rozmiarze
określonym w bajtach jest zapi-
sywany lub odczytywany z karty
w trakcie wykonywania komend
operujących na bloku danych.
Długość bloku może być zmien-
na (negocjowana) lub stała. In-
formacja o długości bloku jest
zawarta w rejestrze CSD.
• Sektor danych . Ilość danych
(w bajtach) przeznaczonych do
skasowania. Długość sektora jest
stała dla każdego typu karty
(nie podlega negocjacji) i jest
wielokrotnością długości bloku.
Informacje o długości bloku są
zawarte w rejestrze CSD.
• Grupa WP ( WP Group ) – mini-
malny rozmiar pamięci (od 1
bajtu), która może być objęta
protekcją zapisu. Grupa WP jest
stała dla każdego typu karty. In-
formacja o długości grupy WP
jest zawarta w rejestrze CSD.
Organizacja pamięci karty SD
jest oparta na systemie plików.
Przestrzeń pamięci można podzie-
lić na dwie oddzielnie formatowane
w systemie DOS partycje:
Przestrzeń użytkownika ( User
Area ). Chroniona lub niechronio-
na przestrzeń pamięci, do której
użytkownik ma dostęp używając
standardowych komend zapisu
i odczytu.
Przestrzeń chroniona ( Securi-
ty Protected Area ) używana do
ochrony praw autorskich infor-
macji zapisywanych w przestrze-
ni użytkownika. Dostęp do prze-
strzeni chronionej jest możliwy
po wykonaniu autoryzacji opisa-
nej w specyfikacji SD Se-
curity Specification.
Z każdą informacją
(plikiem) zapisywaną
w przestrzeni użytkowni-
ka jest skojarzona infor-
macja zapisywana w prze-
strzeni chronionej. Dla
każdego dostępu do pli-
ku (zapisywanie, odczy-
tywanie, lub kasowanie)
jest określany stopień
ochrony. Jeżeli plik nie
jest chroniony, to układ
ochrony karty jest prze-
źroczysty dla operacji na
nim wykonywanej. Jeżeli
jest chroniony, to układy
karty wykonują procedu-
ry autoryzacji pozwalając,
lub nie na dostęp do
pliku.
Przestrzeń użytkowni-
ka nie może zajmować
całej pamięci karty. Moż-
na przyjąć z pewnym przybliże-
niem, że ok. 1% całkowitej pojem-
ności zajmuje przestrzeń chroniona,
w której użytkownik nie zapisuje
swoich danych – szczegółowe infor-
macje można uzyskać w dokumenta-
cji producenta lub przez odczytanie
rejestrów CSD i SD Card Status.
Na rys. 10 pokazano podział pa-
mięci karty na partycje z uwzględ-
nieniem przestrzeni chronionej.
Dla tych obu trybów pracy
magistral (SDBus i SPI Bus) takie
same są tylko rejestry karty. Inny
jest sposób przesyłania danych po
magistrali. Inaczej też są interpre-
towane niektóre komendy. Za ko-
rzystaniem z trybu SDBus przema-
wia większa szybkość przesyłania
danych. Tylko z magistralą danych
o długości 4 bitów można uzyskać
maksymalną gwarantowaną przez
producenta prędkość transferu. Poza
tym, w trybie SDBus można wyko-
rzystać wszystkie możliwości karty.
Jednak jest to okupione bardziej
rozbudowanym interfejsem fizycz-
nym i skomplikowanym protokółem
wymiany informacji.
Za użyciem magistrali SPI Bus
przemawia to, że sprzętowy inter-
fejs SPI jest bardzo popularny. To
znacząco upraszcza programowy
i sprzętowy interfejs wymiany da-
nych. Wydaje się, że projektanci
Rys. 10. podział pamięci SD na partycje
98
Elektronika Praktyczna 2/2008
649301171.268.png 649301171.279.png 649301171.290.png 649301171.301.png 649301171.001.png 649301171.012.png 649301171.023.png 649301171.034.png
KURS
Tab. 11. Komendy CMD obsługiwane przez kartę w trybie SPI
Indeks Argument Potwierdzenie Nazwa
Opis komendy
CMD0 Brak
R1
GO_IDLE_STATE
Zerowanie karty
CMD1 Brak
R1 SEND_OP_COND
Aktywacja procesu inicjalizacji karty
CMD9 Brak
R1
SEND_CSD
Polecenie przesłania rejestru CSD
CMD10 Brak
R1
SEND_CID
Polecenie przesłania rejestru CID
CMD12 Brak
R1b STOP_TRANSMISSION Wymusza zakończenie transmisji w czasie wykonywania odczytu multiblokowego
CMD13 Brak
R2
SEND_STATUS
Polecenie przesłania rejestru statusu
CMD16
[31:0]długość
bloku
R1 SET_BLOCK_LEN Ustawienie długości bloku (w bajtach) dla operacji zapisu i odczytu danych
CMD17 [31:0] adres R1 READ_SINGLE_BLOCK Odczytanie jednego bloku pamięci o długości określonej komendą SET_BLOCK_LEN
CMD18 [31:0] adres R1 READ_MULTIPLE_BLOCK
Ciągłe odczytywanie bloków pamięci aż do odebrania komendy STOP_TRANSS-
MISION
CMD24 [31:0] adres R1
WRITE_BLOCK
Zapisanie bloku pamięci o długości określonej komendą SET_BLOCK_LEN
CMD25 [31:0] adres R1
WRITE_MULTIPLE_
_BLOCK
Ciągłe zapisywanie bloków pamięci, aż do odebrania bajtu „stop transmission
token”
CMD27 Brak
R1
PROGRAM_CSD
Programowanie zapisywalnych bitów rejestru CSD
CMD28 [31:0] adres R1b SET_WRTE_PROT
Jeżeli karta miała określone własności protekcji, to ta komenda ustawia
protekcję od adresu określonego w argumencie na liczbę bloków określonych
w WP_GRP_SIZE
CMD29 [31:0] adres R1b CLR_WRTE_PROT
Jeżeli karta miała określone własności protekcji, to ta komenda kasuje protekcję
od adresu określonego w argumencie na liczbę bloków określonych
w WP_GRP_SIZE
CMD30
[31:0] write
protect adres
R1 SEND_WRITE_PROTECT
Jeżeli karta miała określone własności protekcji, to ta komenda przesyła stan
bitów protekcji
CMD32 [31:0] adres R1
ERASE_WR_BLK_
_START_ADDR
Ustawienie adresu początku pierwszego bloku do skasowania.
CMD33 [31:0] adres R1
ERASE_WR_BLK_
_END_ADDR
Ustawienie adresu początku ostatniego bloku do skasowania.
CMD38
[31:0] bez
znaczenia
R1b
ERASE
Kasowanie grupy bloków ustawionych komendami CMD32 i CMD33
CMD55 [31:0]
R1
APP_CMD
Następna komenda jest komendą aplikacji ACMD
CMD56
[31:0], bit [0]
RD/WR
R1
GEN_CMD
Używane zarówno do przesyłania Data Block, jak i odczytywania Data Block
z karty. Długośc bloku jest określona w SET_BLOCK_LEN,
Bit[0]=1 dane odczytywane z karty
Bit[0]=0 dane przesyłane do karty
CMD58 Brak
R3
READ_OCR
Odczytanie rejestru OCR
CMD59
[31:1] bez
znaczenia
[0] opcja CRC
R1
CRC_ON_OFF
Bit[0]=1 włączone sprawdzanie CRC
Bit[0]=0 wyłączone sprawdzanie CRC
kart SD celowo dodali możliwość
komunikacji prze interfejs SPI, żeby
uprościć komunikację z hostem zbu-
dowanym na bazie popularnych
mikrokontrolerów. Z tych powodów
opiszemy wyłącznie protokół SD
w trybie SPI.
Magistrala jest zorganizowana
według zasady Master–Slave . Ma-
sterem jest zawsze host, czyli ze-
wnętrzny mikrokontroler. Host jest
źródłem sygnału zegarowego i inicju-
je początek każdej transakcji z kartą
SD wymuszając stan niski na linii
CS. Wymiana informacji pomiędzy
sterownikiem karty SD i hostem od-
bywa się według schematu:
• Host inicjuje transmisję wysyła-
jąc komendę,
• Sterownik karty odpowiada po-
twierdzeniem,
• Zależnie od wysłanej komen-
dy albo karta wysyła do hosta
dane (zawartość rejestru, lub
zawartość sektora pamięci), albo
host przesyła dane do sterowni-
ka (najczęściej sektor danych).
Każda komenda karty SD ma
długość 6 bajtów i składa się z:
• kodu komendy o długości 1 bajtu,
• argumentu komendy o długości 4
bajtów,
• sumy kontrolnej CRC o długości
7 bitów (1 bajtu).
W bajcie kodu komendy na sześ-
ciu młodszych bitach jest zapisany
numer komendy, siódmy bit ma
zawsze wartość jeden, a najstar-
szy ósmy bit jest wyzerowany. Na
przykład kod komendy CMDO jest
równy 0x40, komendy CMD9 jest
równy 0x49, komendy CMD12 jest
równy 0x4C i tak dalej.
W specyfikacji SD oprócz stan-
dardowych komend CMDn zdefinio-
wano także zestaw komend aplika-
cji oznaczanych jako ACMDn. Bajt
kodu komendy CMDn i ACMDn
jest identyczny. (CMD13=0x4D
i ACMD13=0x4D). Karta identyfiku-
je przesłaną komendę jako ACMD,
jeżeli bezpośrednio przed nią ode-
brała prawidłowo komendę CMD55
(APP_CMD).
W czterobajtowe pole argumentu
jest wpisywany fizyczny adres po-
czątku bloku danych do odczyta-
nia, zapisania, lub początek sekto-
ra do skasowania. Pole argumentu
musi być wysyłane nawet wtedy,
kiedy komenda nie wymaga formal-
nego argumentu. Wysyłane są wte-
dy same zera. Siedmiobitowa suma
kontrolna CRC jest umieszczona
w bajcie na siedmiu starszych bi-
tach. Najmłodszy bit jest zawsze
jedynką. Po przejściu w tryb SPI
karta domyślnie nie sprawdza po-
prawności CRC i w to pole można
wpisać dowolną wartość.
W tab. 11 zestawiono komen-
dy CMDn, a w tab. 12 komendy
Elektronika Praktyczna 2/2008
99
649301171.045.png 649301171.056.png
KURS
Tab. 12. Komendy ACMD obsługiwane przez kartę w trybie SPI
Indeks Argument Potwierdzenie Nazwa Opis komendy
ACMD13 [31:0] R2 SD_STATUS Odczytanie rejestru SD Card Status
ACMD18
Zarezerwowana dla trybu ochrony
• Erase_Seq_Error – wystąpił błąd
w sekwencji kasowania pamięci,
• Address Error – w argumencie
komendy wystąpił adres, który
nie był początkiem bloku da-
nych (adresowanie wewnątrz
bloku danych),
• Parametr Error – argument ko-
mendy (adres, długość bloku)
był poza zakresem dla tego typu
karty.
Potwierdzenie R1b ma taki sam
format jak potwierdzenie R1, ale
po odebraniu kodu R1 karta może
dodatkowo sygnalizować zajętość
( busy ) przez wymuszenie na linii
danych DO stanu niskiego. Przejście
DO w stan wysoki oznacza koniec
sygnału zajętości i możliwość prze-
słania kolejnej komendy. Komenda
CMD24 WRITE_BLOCK, mimo iż
odpowiada potwierdzeniem R1, ale
po wysłaniu do karty bloku danych
również na linii DO wprowadza
sygnał zajętości do momentu zakoń-
czenia zapisywania bloku.
Potwierdzenie R2 ma długość 2
bajtów i jest odpowiedzią na komen-
dę SEND_STATUS i SD_STATUS.
Format potwierdzenia R2 pokazano
na rys. 12 . Pierwszy bajt jest iden-
tyczny z potwierdzeniem R1. Bity
drugiego bajtu jeżeli są ustawione
sygnalizują:
• Erase param – nieprawidłowy
sektor do kasowania,
• Write protect violation – komen-
da próbuje zapisać blok zabez-
pieczony protekcją zapisu,
• Card ECC failed – korekcja błę-
dów ECC nie zdołała naprawić
błędu,
• CC error – błąd wewnętrznego
mikrokontrolera,
• Error – wystąpił wewnętrzny
nieznany błąd karty,
• Write protect erase skip – tylko
część przestrzeni z zaprogramo-
wanej przez WP blocks zostało
skasowanej,
• Card is locked – karta zabloko-
wana.
Potwierdzenie R3 jest odpowie-
dzią na komendę READ_OCR i ma
długość 5 bajtów. Pierwszy bajt R3
ma identyczną strukturę jak po-
twierdzenie R1, pozostałe 4 zawie-
rają kopię rejestru OCR karty.
Po włączeniu zasilania karta
przechodzi w domyślny tryb pracy
z magistralą SDBus. Magistrala karty
po włączeniu zasilania i przed wy-
słaniem pierwszej komendy wyma-
ga zainicjowania przez wysłanie na
ACMD22 [31:0] R1
SEND_NUM_WR_
_BLOCKS
Odczytanie liczby prawidłowo zapisa-
nych bloków
ACMD23
[31:23]
[22:0] liczba
bloków
R1
SET_WR_BLK–
_ERASE_COUNT
ustawienie liczby bloków zapisywanych
we wcześniej skasowanych blokach
(szybszy zapis danych)
ACMD24
ACMD25
ACMD26
ACMD41 Brak R1 SEND_OP_COND Aktywacja procesu inicjalizacji karty
Zarezerwowana dla trybu ochrony
ACMD42
[31:1]
[0]Cd_set
R1
SET_CLR_CARD_
_DETECT
Podłączenie (bit[0]=1), lub odłączenie
(bit[0]=0) rezystora podciągającego
do wyprowadzenia 1 karty
ACMD43
ACMD49
Zarezerwowana dla trybu ochrony
ACMD51 [31:0] R1 SEND_SCR
Odczytanie rejestru OCR
Rys. 11. Format potwierdzenia R1
• Potwierdzenie R1 i jej od-
miana R1b,
• Potwierdzenie R2,
• Potwierdzenie R3.
Potwierdzenia R1 i R1b
są wysyłane przez kartę
po wszystkich komendach
z wyjątkiem SEND_STA-
TUS (CMD13), SD_STA-
TUS (ACMD13) i READ_
OCR(CMD58). Potwierdzenie
R1 ma zawsze długość 1
bajtu, a jego format pokazano na
rys. 11 .
Ustawienie bitu w bajcie po-
twierdzenia R1 oznacza występowa-
nie błędu:
• In Idle State – karta jest w try-
bie Idle State i wykonuje proce-
durę inicjalizacji,
• Erase Reset – kasowanie pamięci
nie zostało zakończone, bo ode-
brano komendę, która przerwała
kasowanie,
• Illegal Command – odebrano
nieprawidłowy kod komendy,
• Com CRC Error – błąd CRC
ostatniej komendy,
ACMDn obsługiwane przez karty
SD w trybie SPI.
Przy zapisywaniu danych pra-
widłowy jest tylko blok danych
o długości 512 bajtów. Mimo, iż
przy odczytywaniu danych blok
może mieć długość od 1 do 512
bajtów, to ustawienie długości bloku
mniejszej niż 512 bajtów spowodu-
je błąd przy zapisywaniu danych.
Komenda CMD16 nie powinna być
używana, jeżeli karta akceptuje do-
myślną długość bloku 512 bajtów.
Karty SD wysyłają 3 rodzaje po-
twierdzeń przesyłanych po odebra-
niu komendy:
Rys. 12. Format potwierdzenia R2
100
Elektronika Praktyczna 2/2008
649301171.067.png 649301171.078.png 649301171.089.png 649301171.100.png 649301171.111.png 649301171.122.png 649301171.133.png
KURS
linię zegarową SCLK przynajmniej
74 cykli zegara.
Żeby ją przełączyć w tryb pra-
cy z magistralą SPI, trzeba wymu-
sić na wyprowadzeniu CS stan
niski i wysłać do karty komendę
CMD0. Jeżeli wewnętrzny kontroler
karty uzna, że niezbędny jest tryb
SDBus, to nie wysyła odpowiedzi
na CMD0 i nie przełączy się na
tryb SPI. Host musi powtarzać ko-
mendę CMD0, aż do uzyskania po-
twierdzenia R1.
Po przejściu w tryb SPI domyśl-
nie jest wyłączane sprawdzanie po-
prawności CRC, ale w trakcie wysy-
łania CMD0 po włączeniu zasilania
karta jest w trybie SDBus i musi
wysłać poprawny CRC. CMD0 jest
komendą, której kod (0x40) i pole
argumentu (0x0000) mają zawsze
stałą wartość. Wyliczona dla CMD0
suma CRC jest stała i wynosi 0x4A.
Dodając jedynkę na najmłodszym
bicie otrzymujemy bajt CRC o war-
tości 0x95.
Sekwencja zerowania zaczyna
się opisywaną już komendą CMD0
wysyłaną w celu przełączenia w tryb
SPI po włączeniu zasilania, lub
rozpoczęcia procedury zerowania
karty w trakcie normalnej pracy. Po
prawidłowym wykonaniu komendy
CMD0 karta przechodzi w stan idle
state . W stanie idle state możliwe
jest wysłanie jednej z komend:
• CMD1 SEND_OP_COND
• ACMD41 SD_SEND_OP_COND
• CMD59 CRC_ON_OFF
• CMD58 READ_OCR
Host musi powtarzać wysyłanie
komendy CMD1 SEND_OP_COND
i odczytywać potwierdzenie R1, aż
do wyzerowania bitu zerowego R1
InIdleState. Wtedy zerowanie (ini-
cjalizacja) karty jest zakończona
i można wprowadzać inne komen-
dy. Takie zerowanie jest identyczne
z zerowaniem karty MMC pracującej
w trybie SPI. Jednak są karty SD,
które nie akceptują komendy CMD1
do kończenia stanu idle state . Za-
miast komendy CMD1 trzeba wy-
słać komendę ACMD41 pamiętając,
że przed nią trzeba wysłać komen-
dę CMD55 (APP_CMD). W stanie
idle state można wysłać komendę
CMD58 i odczytać wartość rejestru
OCR. Komenda CMD58 może być
również wysłana w trakcie normal-
nej pracy karty.
Rozpoczęcie przesyłania danych
magistralą SPI musi być poprzedzo-
ne zerowaniem karty. Po zakończe-
niu zerowania, karta musi być za-
silana napięciem określonym w re-
jestrze OCR.
W kartach SD blok danych ma
domyślny rozmiar 512 bajtów i nie
jest możliwe zapisanie bloku o innej
długości. Również sektor kasowania
danych ma długość 512 bajtów.
Przy przesyłaniu danych ma-
gistralą pracującą w trybie SD SPI
trzeba pamiętać o kilku ogranicze-
niach:
• Częstotliwość taktowania magi-
strali może się zmieniać w do-
wolnym momencie, ale nie może
przekroczyć maksymalnej często-
tliwości podanej w parametrach
karty.
• Wymagane jest, żeby sygnał ze-
gara na linii SCLK był przesy-
łany do karty w czasie odczyty-
wania danych i oczekiwania na
potwierdzenia i bajtu startu.
• Host musi wykrywać stan zaję-
tości. Karta sygnalizuje stan za-
jętości w trakcie wykonywania
zapisywania lub kasowania da-
nych przez wymuszenie stanu
niskiego na linii danych DO.
W czasie, kiedy karta jest w sta-
nie zajętości host musi taktować
linię zegarową SCLK. Jeżeli kar-
ta nie będzie taktowana, to linia
DO przejdzie w stan niski i po-
zostanie w tym stanie nawet po
zakończeniu zapisywania.
Po zakończeniu transakcji na ma-
gistrali SPI wymagane jest wysłanie
8 cykli zegarowych w następujących
sytuacjach:
• W sekwencji komenda – potwier-
dzenie. Osiem cykli zegara jest
wysyłanych po odebraniu ostat-
niego bitu potwierdzenia.
• Zakończenie sekwencji odczyty-
wania danych. Osiem cykli ze-
gara jest wysyłanych po odczy-
taniu ostatniego bitu bloku da-
nych (ostatniego bitu CRC).
• Zakończenie sekwencji zapisy-
wania danych. Osiem cykli ze-
gara jest wysyłanych po
odebraniu ostatniego bitu
potwierdzenia Data Re-
sponse.
W czasie wysyłania tych
cykli stan linii CS nie jest
istotny. Dane z karty są od-
czytywane w blokach o dłu-
gości określonej w polu
READ_BL_LEN rejestru CSD.
Długość bloku danych może
mieć minimalną długość
1 bajta, a maksymalną 512
bajtów, i jest ustawiana komendą
CMD16 SET_BLOCK_LENGHT.
Do odczytywania danych karty
SD wykorzystywane są 2 komendy:
CMD17 i CMD18. Komenda CMD17
odczytuje pojedynczy blok. Jeżeli
karta zaakceptuje komendę odczytu
danych, to wysyła potwierdzenie R1
z wyzerowanymi wszystkimi bitami.
Host musi odczytywać dane z karty,
aż odbierze bajt startu 0xEF. Może
się zdarzyć, że z jakichś powodów
karta nie odpowie bajtem startu.
Procedura odczytywania bajtu star-
tu powinna odczytywać bajt startu
z karty przez określony czas i jeżeli
nie odbierze 0xEF, to kończy od-
czytywanie danych i zgłasza błąd.
Po odebraniu bajtu startu od-
czytywany jest blok danych. Blok
danych jest uzupełniany dwoma
bajtami sumy kontrolnej CRC wyli-
czanej według zależności:
x 16 + x 12 + x 5 +1
Odczytanie CRC kończy odczy-
tywanie pojedynczego bloku danych
i karta jest gotowa na przyjęcie no-
wej komendy.
Parametrem komendy odczytywa-
nia bloku danych jest adres danych.
Podawany adres nie może mieć do-
wolnej wartości. Na przykład, je-
żeli blok ma długość 512 bajtów,
to adres odczytywania pierwszego
bloku ma wartość 0, adres odczy-
tywania drugiego bloku ma wartość
512, trzeciego 1024 itd. Wysłanie
w tym wypadku komendy CMD17
z adresem innym niż wielokrotność
długości bloku zostanie zinterpreto-
wane przez kartę jako błąd Addres-
sError sygnalizowany w potwierdze-
niu R1. Wysłanie adresu większego
niż to wynika z pojemności karty
sygnalizowane będzie błędem Para-
meterError w potwierdzeniu R1.
Komenda odczytywania bloku
danych może powodować błąd we-
wnętrznego sterownika, lub karta
z jakichś przyczyn nie może ode-
słać danych. Wtedy karta zamiast
Rys. 13. Potwierdzenie Data Error Token
Elektronika Praktyczna 2/2008
101
649301171.144.png 649301171.155.png 649301171.166.png 649301171.177.png 649301171.188.png 649301171.199.png
KURS
Rys. 14. Potwierdzenie Data Response
Zapisywanie pojedynczego bloku
danych rozpoczyna się od wysłania
komendy CMD24. Karta odpowiada
potwierdzeniem R1 z wyzerowanymi
wszystkimi bitami. Host wysyła bajt
startu 0xFE i 512 bajtowy blok da-
nych plus 2 bajty CRC. Karta po-
twierdza odebrany blok danych baj-
tem Data Response rys. 14 .
Dane zostaną zapisane poprawnie,
kiedy pole STATUS ma wartość 010.
Zapisywanie danych w pamięci Flash
musi trwać jakiż czas. Nie można
wysłać komendy zapisywania nowych
danych, jeżeli zapis poprzednich jesz-
cze się nie zakończył. Karta sygna-
lizuje, że trwa proces zapisu przez
wymuszenie stanu niskiego na linii
danych – host musi czekać, aż linia
DO przejdzie w stan wysoki. Po za-
kończeniu zapisu, kiedy wystąpił błąd
zapisywania (Status=110), host powi-
nien odczytać rejestr statusu komendą
CMD13 SEND_STATUS, żeby określić
jego przyczynę.
Komenda CMD25 może zapisywać
wiele bloków danych. Po wysłaniu
kodu komendy z adresem pierwsze-
go bloku danych do zapisania karta
odpowiada potwierdzeniem R1 z wy-
zerowanymi wszystkimi bitami. Host
musi wtedy wysłać bajt startu 0xFC
i zapisywany blok danych. Karta po-
twierdza odebranie bloku danych baj-
tem Data Response i wymusza na linii
danych DO stan zajętości (stan niski).
Wykrycie błędu sygnalizowane w Data
Response wymaga zatrzymania zapisu
wielkoblokowego przez host komen-
dą CMD12. Dodatkowe informacje
o przyczynach błędu zapisu znajdują
się w rejestrze statusu odczytywanym
komendą CMD13 SEND_STATUS. Ko-
menda ACMD22 umożliwia określenie
liczby poprawnie zapisanych bloków.
Żeby zatrzymać zapisywanie wielko-
blokowe trzeba wysłać do karty bajt
stopu 0xFD.
Gdy karta podczas zapisywania
danych jest zajęta, host może ustawić
linię CS w stan wysoki. Linia DO
przejdzie w stan wysokiej impedancji,
ale nie przerwie to zapisywania da-
nych w pamięci Flash.
W protokole SPI rejestry statusu
i OCR są przesyłane do hosta jako
potwierdzenia komend. Zawartości
rejestrów CID i CSD są odczytywane
tak jak blok danych o długości 16
bajtów uzupełniony o 2 bajty sumy
kontrolnej CRC. Czas dostępu do da-
nych w trakcie odczytywania rejestru
CSD nie może być określony przez
pole TAAC, bo to pole jest zawarte
w rejestrze CSD. Do określenia czasu
dostępu w tym przypadku stosowany
jest standardowy czas dostępu definio-
wany w parametrach karty jako Ncr .
Tomasz Jabłoński, EP
tomasz.jablonski@ep.com.pl
danych odeśle bajt Data Error To-
ken rys. 13 .
Komenda CMD18 odczytuje wie-
le bloków danych. Tak jak w przy-
padku komendy odczytywania po-
jedynczego bloku, po wysłaniu
komendy karta odpowiada potwier-
dzeniem R1, a potem bajtem startu
0xFE. Również w razie wystąpienia
błędu karta odpowiada bajtem Data
Error Token .
Po prawidłowym potwierdzeniu
R1 (wszystkie bity wyzerowane)
i odebraniu bajtu startu, host może
odczytywać kolejne bloki danych od
bloku, którego adres został umiesz-
czony w argumencie komendy. Każ-
dy blok danych jest uzupełniany
dwoma bajtami CRC. Karta kończy
wysyłanie danych, kiedy odbierze
komendę CMD12 STOP_TRANSMIS-
SION.
W trybie SPI karta SD może za-
pisywać pojedynczy blok danych
komendą CMD24 i wiele bloków da-
nych komendą CMD25.
R
E
K
L
A
M
A
102
Elektronika Praktyczna 2/2008
649301171.210.png 649301171.221.png 649301171.232.png 649301171.240.png 649301171.241.png 649301171.242.png 649301171.243.png 649301171.244.png 649301171.245.png 649301171.246.png 649301171.247.png 649301171.248.png 649301171.249.png 649301171.250.png 649301171.251.png 649301171.252.png 649301171.253.png 649301171.254.png 649301171.255.png 649301171.256.png 649301171.257.png 649301171.258.png 649301171.259.png 649301171.260.png 649301171.261.png 649301171.262.png 649301171.263.png 649301171.264.png 649301171.265.png 649301171.266.png 649301171.267.png 649301171.269.png 649301171.270.png 649301171.271.png 649301171.272.png 649301171.273.png 649301171.274.png 649301171.275.png 649301171.276.png 649301171.277.png 649301171.278.png 649301171.280.png 649301171.281.png 649301171.282.png 649301171.283.png 649301171.284.png 649301171.285.png 649301171.286.png 649301171.287.png 649301171.288.png 649301171.289.png 649301171.291.png 649301171.292.png 649301171.293.png 649301171.294.png 649301171.295.png 649301171.296.png 649301171.297.png 649301171.298.png 649301171.299.png 649301171.300.png 649301171.302.png 649301171.303.png 649301171.304.png 649301171.305.png 649301171.306.png 649301171.307.png 649301171.308.png 649301171.309.png 649301171.310.png 649301171.311.png 649301171.002.png 649301171.003.png 649301171.004.png 649301171.005.png 649301171.006.png 649301171.007.png 649301171.008.png 649301171.009.png 649301171.010.png 649301171.011.png 649301171.013.png 649301171.014.png 649301171.015.png 649301171.016.png 649301171.017.png 649301171.018.png 649301171.019.png 649301171.020.png 649301171.021.png 649301171.022.png 649301171.024.png 649301171.025.png 649301171.026.png 649301171.027.png 649301171.028.png 649301171.029.png 649301171.030.png 649301171.031.png 649301171.032.png 649301171.033.png 649301171.035.png 649301171.036.png 649301171.037.png 649301171.038.png 649301171.039.png 649301171.040.png 649301171.041.png 649301171.042.png 649301171.043.png 649301171.044.png 649301171.046.png 649301171.047.png 649301171.048.png 649301171.049.png 649301171.050.png 649301171.051.png 649301171.052.png 649301171.053.png 649301171.054.png 649301171.055.png 649301171.057.png 649301171.058.png 649301171.059.png 649301171.060.png 649301171.061.png 649301171.062.png 649301171.063.png 649301171.064.png 649301171.065.png 649301171.066.png 649301171.068.png 649301171.069.png 649301171.070.png 649301171.071.png 649301171.072.png 649301171.073.png 649301171.074.png 649301171.075.png 649301171.076.png 649301171.077.png 649301171.079.png 649301171.080.png 649301171.081.png 649301171.082.png 649301171.083.png 649301171.084.png 649301171.085.png 649301171.086.png 649301171.087.png 649301171.088.png 649301171.090.png 649301171.091.png 649301171.092.png 649301171.093.png 649301171.094.png 649301171.095.png 649301171.096.png 649301171.097.png 649301171.098.png 649301171.099.png 649301171.101.png 649301171.102.png 649301171.103.png 649301171.104.png 649301171.105.png 649301171.106.png 649301171.107.png 649301171.108.png 649301171.109.png 649301171.110.png 649301171.112.png 649301171.113.png 649301171.114.png 649301171.115.png 649301171.116.png 649301171.117.png 649301171.118.png 649301171.119.png 649301171.120.png 649301171.121.png 649301171.123.png 649301171.124.png 649301171.125.png 649301171.126.png 649301171.127.png 649301171.128.png 649301171.129.png 649301171.130.png 649301171.131.png 649301171.132.png 649301171.134.png 649301171.135.png 649301171.136.png 649301171.137.png 649301171.138.png 649301171.139.png 649301171.140.png 649301171.141.png 649301171.142.png 649301171.143.png 649301171.145.png 649301171.146.png 649301171.147.png 649301171.148.png 649301171.149.png 649301171.150.png 649301171.151.png 649301171.152.png 649301171.153.png 649301171.154.png 649301171.156.png 649301171.157.png 649301171.158.png 649301171.159.png 649301171.160.png 649301171.161.png 649301171.162.png 649301171.163.png 649301171.164.png 649301171.165.png 649301171.167.png 649301171.168.png 649301171.169.png 649301171.170.png 649301171.171.png 649301171.172.png 649301171.173.png 649301171.174.png 649301171.175.png 649301171.176.png 649301171.178.png 649301171.179.png 649301171.180.png 649301171.181.png 649301171.182.png 649301171.183.png 649301171.184.png 649301171.185.png 649301171.186.png 649301171.187.png 649301171.189.png 649301171.190.png 649301171.191.png 649301171.192.png 649301171.193.png 649301171.194.png 649301171.195.png 649301171.196.png 649301171.197.png 649301171.198.png 649301171.200.png 649301171.201.png 649301171.202.png 649301171.203.png 649301171.204.png 649301171.205.png 649301171.206.png 649301171.207.png 649301171.208.png 649301171.209.png 649301171.211.png 649301171.212.png 649301171.213.png 649301171.214.png 649301171.215.png 649301171.216.png 649301171.217.png 649301171.218.png 649301171.219.png 649301171.220.png 649301171.222.png 649301171.223.png 649301171.224.png 649301171.225.png 649301171.226.png 649301171.227.png 649301171.228.png 649301171.229.png 649301171.230.png 649301171.231.png 649301171.233.png 649301171.234.png 649301171.235.png 649301171.236.png 649301171.237.png 649301171.238.png 649301171.239.png
Zgłoś jeśli naruszono regulamin