Подключение карт SD через SPI (упрощенное описание стандарта) Печать
Добавил(а) microsin   

Здесь приведен перевод Главы 7 документа SD_Physical_Layer_Spec.pdf - SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00 September 25, 2006. В Главе 7 описывается принцип работы карт памяти Security Digital (SD) в режиме подключения через интерфейс SPI [2]. Это упрощенное, но довольно полное описание стандарта, достаточное для понимания принципов работы протокола интерфейса, и успешного применения карт SD во встраиваемых системах. Все непонятные термины и сокращения см. в разделе "Словарик" статьи [1].

[7.1 Подключение карты через SPI. Введение]

Режим SPI представляет вторичный (дополнительный) коммуникационный протокол, который поддерживают карты памяти SD, основанные на носителе FLASH. Протокол SPI является подмножеством традиционного протокола SD Memory Card, и он разработан для обмена через канал SPI, который можно найти во многих моделях микроконтроллеров. SPI на карте выбирается специальной процедурой инициализации (перевод выборки CS в лог. 0 вместе с подачей первой команды сброса CMD0 после включения питания, подробности см. далее), и затем не может быть изменен, пока на карту подано питание.

Стандарт SPI определяет только физический линк (краткое описание SPI см. в [2]), но не сам протокол обмена данными. Реализация SD Memory Card SPI использует подмножество набора команд протокола SD Memory Card. Достоинство режима SPI в том, что можно использовать стандартный хост, снижая до минимума усилия на разработку и траты на железо. Недостаток состоит в том, что скорость доступа к данным карты у режима SPI меньше, чем у традиционного режима SD (это и понятно, потому что для передачи данных используется только 1 разряд данных и 1 аппаратный сигнал выборки CS на каждую карту). Подробное описание физического подключения карты SD через SPI, описание цоколевки выводов карты и примеры схем подключения карты см. в статье [3].

Примечание: в этой статье приведено описание подключения карты исключительно через интерфейс SPI. Однако часто упоминается "традиционное" подключение (native, не SPI), которое требует наличия специальной аппаратуры. Традиционное подключение упоминается только для того, чтобы показать его отличия от подключения через SPI - в контексте протокола и системы команд карты. Описание традиционного подключения карты см. в статье [1].

[7.2 Протокол шины SPI]

В то время как канал SD Memory Card основан на битовых потоках команды и данных, которые инициируются стартовым битом (start-бит, лог. 0) и завершаются стоповым битом (end-бит, лог. 1), канал SPI является байт-ориентированным. Каждая команда или блок данных построены из байтов (каждый байт занимает 8 бит). Каждая команда и блок данных выровнены по сигналу выборки CS, и длина любой битовой посылки делится нацело на 8 тактов интерфейса SPI.

Карта начинает считать такты шины SPI при каждом переводе выборки CS в лог. 0. Каждая команда или данные должны быть выровнены по границе пачки из 8 тактовых импульсов. Подобно традиционному протоколу SD Memory Card, сообщения SPI состоят из токенов команды для карты (command), ответа карты (response) и блока данных. Все коммуникации между хостом и картой управляются хостом (устройство master). Хост начинает каждую транзакцию по шине переводом сигнала выборки в лог. 0.

Выбранная карта всегда ответит на команду, в отличие от традиционного режима SD.

Когда карта обнаружила проблему в извлечении данных на операции чтения, она ответит токеном error response (который заменит ожидаемый блок данных), вместо таймаута ожидания в традиционном режиме SD. Дополнительно каждый блок данных, отправляемый в карту операциями записи, будет подтвержден токеном data response.

Обычная карта SD и карта SDHC. В случае карт стандартной емкости (Standard Capacity Memory Card) блок данных может быть настолько большим, как один записываемый блок карты, и настолько мал, как 1 байт. Для этих карт через регистр CSD разрешаются частичные операции чтения/записи блока, и данные адресуются на карте байтами. Сегодня из-за ускоряющегося прогресса в области роста объема ностелей данных карты SD стандартной емкости встречаются уже довольно редко, поскольку их размер не превышает 4 гигабайт.

В случае карты большой емкости (High Capacity SD Memory Card, сокращенно SDHC) размер блока данных фиксирован, и составляет 512 байт. Длина блока устанавливается командой CMD16, что используется только для CMD42, и не используется для передач данных памяти. Таким образом, запрещены операции частичного чтения/записи блока, т. е. блок данных должен быть кратен по размеру 512 байтам, и адрес данных на карте указывается по номеру 512-байтного блока. Кроме того, команды защиты от записи (CMD28, CMD29 и CMD30) не поддерживаются.

SD spec SPI mode state diagram fig7 1

Рис. 7-1. Диаграмма состояний SD Memory Card (режим SPI).

Примечания к рис. 7-1:

(1) Карта вернет занятость (busy), когда
   - она выполняет внутренний процесс инициализации.
   - если карта высокой емкости (High Capacity SD Memory Card), то здесь может быть 2 случая:
      1. CMD8 не была выдана перед ACMD41
      2. ACMD41 выдана с HCS=0

(2) карта памяти SD Thick толщиной 2.1 мм может быть инициализирована командой CMD1, и тонкая карта (Thin, толщина 1.4 мм) может быть инициализирована выдачей CMD1 только после того, как она была сначала инициализирована с использованием CMD0 и ACMD41. В любом случае CMD1 не рекомендуется, потому что для хоста может быть сложно отличить друг от друга карту MMC (MultiMediaCard) и карту SD (SD Memory Card). Если карта SD была инициализирована командой CMD1, и хост обрабатывает её как карту MMC (не SD Memory Card), то данные на карте могут быть повреждены из-за неправильной интерпретации регистров CSD и CID.

7.2.1 Выбор режима и инициализация. После включения питания карта SD находится в режиме SD (не SPI). Она войдет в режим SPI, если выборка CS выставлена в лог. 0 во время приема команды сброса (reset command CMD0). Если карта распознала, что требуется традиционный режим SD (не SPI), то она не ответит на CMD0, и останется в режиме SD (не перейдет в режим SPI). Если требуется режим SPI, то карта переключится в SPI, и ответит выдачей R1 response.

Есть только один способ вернуться в режим SD - передернуть питание у карты (снять и снова подать VDD). В режиме SPI машина состояний традиционного протокола карты SD не обрабатывается. Доступны все команды SD, которые поддерживаются режимом SPI.

На рис. 7-2 показана последовательность инициализации карты в режиме SPI.

SD spec SPI mode initialization flow fig7 2

Рис. 7-2. Алгоритм инициализации карты в режиме SPI.

SEND_IF_COND (CMD8) используется, чтобы проверить рабочее состояние интерфейса карты памяти SD (interface operating condition). Формат аргумента CMD8 тот же самый, как это определено для традиционного режима SD, и формат ответа (response) на CMD8 определяется в секции 7.3.2.6. Карта проверяет допустимость рабочих условий путем анализа аргумента CMD8, и хост проверяет допустимость условий анализом ответа на CMD8. Предоставленное напряжение показывается полем VHS в аргументе. Карта подразумевает, что напряжение, указанное в VHS, такое же, как текущее поданное напряжение. В поле VHS всегда должен быть установлен только 1 бит. Хостом используется маска проверки, по которой он проверяет допустимость коммуникаций с картой в текущих рабочих условиях.

Если карта показывает недопустимую команду, то карта старая (legacy), и она не поддерживает команду CMD8. Если карта поддерживает CMD8, и может работать на предоставленном напряжении, то в ответе эхом будет оправлено напряжение питания и маска проверки, которая была установлена в аргументе команды.

Если поле VCA в ответе установлено в 0, то карта не может работать на предоставленном напряжении. Если маска проверки не совпала, результат обмена CMD8 не допустим. В этом случае рекомендуется повторить последовательности выдачи CMD8 (возможно, с другим аргументом).

READ_OCR (CMD58) разработана для предоставления хосту механизма идентификации карт, которые не соответствуют диапазону напряжений VDD, который желателен для хоста. Если хост не принял диапазон напряжений, то он должен прекратить дальнейшие попытки инициализации. Должны быть соответствующим образом определены уровни в регистре OCR (см. Главу 5.1).

SD_SEND_OP_COND (ACMD41) используется для запуска инициализации и проверки - завершила ли карта инициализацию. Обязательное требование - выдать CMD8 перед первой выдачей ACMD41. Прием CMD8 расширяет функцию CMD58 и ACMD41; используется поле HCS (High Capacity Support, поддержка высокой емкости) в аргументе ACMD41 и поле CCS (Card Capacity Status, статус емкости карты) в ответе CMD58. HCS игнорируется той картой, которая не приняла CMD8. Карты стандартной емкости (Standard Capacity SD Memory Card) игнорируют HCS. Бит "in idle state" (в состоянии ожидания) ответа R1 на команду ACMD41 используется картой, чтобы информировать хост - завершена ли инициализация ACMD41. Установка этого бита в 1 показывает, что карта все еще инициализируется. Сброс этого бита в 0 показывает завершение инициализации. Хост с повтором выдает команду ACMD41, пока этот бит не будет сброшен в 0. Карта проверяет бит HCS в OCR только на первой команде ACMD41. При повторах ACMD41 хост не должен выдавать другой команды, кроме CMD0.

После того, как инициализация завершена, хост должен получить информацию CCS в ответе на команду CMD58. Информация CCS допустима, когда карта приняла CMD8, и после завершения инициализации. CCS=1 означает, что карта является High Capacity SD Memory Card (SDHC). CCS=0 означает, что карта является Standard Capacity SD Memory Card.

7.2.2 Защита передачи данных по шине. Каждая команда карты SD, переданная по шине, защищена битами контрольной суммы, CRC. В режиме SPI карта памяти SD предоставляет режим включенной контрольной суммы (CRC ON mode), который разрешает системам, построенным с надежными линками данных, исключить аппаратуру, требуемую для реализации функций генерации и проверки CRC. В режиме выключенной контрольной суммы (CRC OFF mode) биты CRC команд определены как "все равно какие" для передатчика, и они игнорируются приемником.

По умолчанию интерфейс SPI инициализируется в режиме CRC OFF. Однако команда сброса RESET (CMD0), которая используется для переключения карты в режим SPI, принимается картой, когда она в режиме SD и, таким образом, у неё должно быть правильно заполненное поле CRC.

Поскольку у CMD0 нет аргументов, то содержимое всех полей, включая поле CRC, постоянное, и CRC не нужно вычислять во время выполнения программы. Поэтому данные команды, включая CRC, можно заменить константами, и допустимая команда сброса будет следующей:

0x40, 0x00, 0x00, 0x00, 0x00, 0x95

После того, как карта перешла в режим SPI, проверка CRC для всех команд, включая CMD0, будет осуществляться на основе установки CMD59. Хост может включить и выключить проверку CRC с использованием команды CRC_ON_OFF (CMD59). Хост должен разрешить проверку CRC перед выдачей ACMD41.

Проверка CRC для команды CMD8 всегда разрешена. Хост должен установить корректную CRC в аргументе CMD8. Если была детектирована ошибка CRC, то карта вернет ошибку CRC в ответе R1 response, независимо от индекса команды.

7.2.3 Чтение данных (Data Read). Режим SPI поддерживает одиночное чтение блока (Single Block Read) и множественное чтение блоков (Multiple Block Read), команды CMD17 или CMD18 соответственно из традиционного протокола SD Memory Card. При приеме допустимой команды чтения карта ответит токеном response, за которым идет токен data (см. рис. 7-3). В случае карты стандартной емкости (Standard Capacity Card), размер в токене данных определяется длиной блока, установленной командой SET_BLOCKLEN (CMD16). В случае карты высокой емкости (High Capacity Card, SDHC) размер данных в токене данных фиксирован на 512 байт, независимо от длины, установленной командой CMD16.

SD spec SPI mode Single Block Read operation fig7 3

Рис. 7-3. Операция чтения одного блока (Single Block Read).

Допустимый блок данных снабжается суффиксом из 16-битной CRC, генерируемой по стандартному полиному CCITT x16+x12+x5+1 (алгоритм известен как CRC16).

Максимальная длина блока составляет 512 байт, независимо от READ_BL_LEN, определенной в регистре CSD. Если разрешен частичный доступ к данным блока (partial block access) для карт стандартной емкости (Standard Capacity Card), например параметр READ_BL_PARTIAL в регистре CSD равен 1, то длина блока может быть любой между 1 и 512 байтами включительно. Начальный адрес может быть любым допустимым байтовым карты. Каждый блок, однако, должен содержаться в одном физическом секторе карты (без пересечения адресной границы сектора). Поэтому обычно частичный доступ к данным блока не используется, и данные всегда вычитываются физическими секторами, строго по 512 байт. Это поддерживает также идеологией файловых систем, где размер сектора равен 512 байт, а размер кластера кратен 512 байтам.

Если частичный доступ к блокам запрещен, то поддерживается только 512-байтная длина данных.

Карты высокой емкости (High Capacity SD Memory, SDHC) поддерживают исключительно 512-байтную длину блоков (размер сектора). Адрес блока выравнивается по границе блока, и сами данные адресуются не байтами, а номерами сектора.

В случае ошибки выборки данных карта не передаст никакие данные. Вместо этого хосту будет отправлен специальный токен ошибки данных (data error token). На рисунке 7-4 показана операция чтения данных, которая была прервана с токеном ошибки вместо блока данных.

SD spec SPI mode Read operation Data Error fig7 4

Рис. 7-4. Операция Read - Data Error.

В случае операции чтения нескольких блоков (множественное чтение блоков, Multiple Block Read) каждый переданный блок имеет суффикс из 16-битной CRC. Команда остановки передачи (CMD12) остановит действительную передачу данных (так же, как и в традиционном режиме работы SD Memory Card).

SD spec SPI mode Multiple Block Read operation fig7 5

Рис. 7-5: Операция Multiple Block Read.

7.2.4 Запись данных (Data Write). Режим SPI поддерживает команды одиночной записи блока (Single Block Write) и множественной записи блоков (Multiple Block Write). На приеме допустимой команды записи (CMD24 или CMD25 протокола SD Memory Card), карта будет отвечать токеном response, и будет ждать блока, отправленного хостом. Ограничения на суффикс CRC, длину блока и стартовый адрес идентичны (за исключением параметра WRITE_BL_PARTIAL в регистре CSD, управляющем опцией частичной записи блока partial block write и длиной записываемого блока WRITE_BL_LEN) операции чтения (см. рис. 7-6).

SD spec SPI mode Single Block Write operation fig7 6

Рис. 7-6. Операция Single Block Write.

Каждый блок данных снабжен префиксом в виде токена "Start Block" (1 байт).

После приема блока данных карта ответит токеном data-response. Если блок данных был принят без ошибок, то он будет запрограммирован на носитель данных карты. Пока карта находится в состоянии занятости при программировании данных, хосту будут отправляться повторяющиеся токены занятости (busy token), что в действительности соответствует сигналу выхода данных карты MISO, притянутому к лог. 0.

Как только операция программирования завершена, хост должен прочитать результаты программирования, используя для этого команду SEND_STATUS (CMD13). Некоторые ошибки (такие как адрес вне допустимого диапазона, срабатывание защиты от записи) детектируются только во время программирования. Единственной проверкой блока данных в обмене с хостом в токене data-response является CRC и индикация ошибки записи (Write Error).

В операции множественной записи блоков (Multiple Block Write) остановка передачи выполняется отправкой хостом токена "Stop Tran" вместо токена "Start Block" в начале следующего блока. В случае индикации ошибки записи Write Error (в ответе карты data response) хост должен использовать команду SEND_NUM_WR_BLOCKS (ACMD22), чтобы узнать у карты количество успешно записанных блоков. Описание токенов данных приведено в главе 7.3.3.2.

SD spec SPI mode Multiple Block Write operation fig7 7

Рис. 7-7. Операция Multiple Block Write.

Когда карта занята, снятие сигнала выборки CS не останавливает процесс программирования. Карта при снятии выборки отпустит MISO (свой выходной сигнал DataOut, который может переключаться в третье состояние line, tri-state), и он при наличии pull-up резистора перейдет в состояние лог. 1, но карта при этом продолжит внутренний процесс программирования. Если карта будет повторно выбрана перед тем, как завершится программирование, сигнал DataOut снова будет притянут к лог. 0, и все команды от хоста будут отбрасываться. Сброс карты (с использованием CMD0) оборвут любую ожидающую или активную операцию программирования. Это делать не рекомендуется, поскольку может нарушить формат данных на карте. В зоне ответственности хоста находится корректная обработка процедуры программирования данных, чтобы избегать подобных ситуаций.

7.2.5 Очистка и управление защитой от записи (Erase & Write Protect Management). Процедуры очистки данных (erase) и управления защитой от записи (write protect) в режиме SPI идентичны традиционному режиму SD. Пока карта занята очисткой или изменением битов защиты от записи для предопределенного списка секторов, она будет показывать хосту свой busy-статус притягиванием к лог. 0 своего выхода DataOut (сигнал MISO интерфейса SPI). Рисунок 7-8 иллюстрирует транзакцию шины "no data" (нет данных) с сигнализацией занятости и без сигнализации занятости.

SD spec SPI mode No data operations fig7 8

Рис. 7-8. Операции "no data".

7.2.6 Чтение регистров CID/CSD. В отличие от традиционного протокола SD Memory Card (где содержимое регистра передается как command response через отдельный сигнал CMD), чтение регистров CSD и CID в режиме SPI осуществляется как простая транзакция чтения блока. Карта ответит стандартным токеном response (см. рис. 7-3), за которым будет послан блок данных из 16 байт, снабженный суффиксом из 16-битной CRC.

Таймаут данных для команды CSD не может быть установлен для карт типа TAAC, поскольку эта величина сохраняется в регистре CSD карты. Таким образом, стандартное значение таймаута для response (NCR) используется для латентности чтения регистра CSD.

7.2.7 Процедура сброса (Reset Sequence). Карта SD Memory Card требует определенной последовательности сброса. Карта входит в состояние ожидания (Idle State) после сброса от подачи питания (power on reset) или от команды сброса (reset command CMD0 протокола карт памяти SD). В этом состоянии ожидания допустимыми командами хоста являются только CMD8 (SEND_IF_COND), ACMD41 (SD_SEND_OP_COND), CMD58 (READ_OCR) и CMD59 (CRC_ON_OFF).

Для карт памяти SD толщины Thick (2.1 мм) также допустима команда CMD1 (SEND_OP_COND). Это означает, что в режиме SPI команды CMD1 и ACMD41 ведут себя одинаково, но использование ACMD41 предпочтительнее, потому что позволяет проще отличать карты типов SD Memory Card и MultiMediaCard. Для карт Thin (1.4 мм) стандартного размера (Standard Size SD Memory Card) команда CMD1 (SEND_OP_COND) недопустима во время выполнения инициализации после включения питания. После подачи питания (Power On), как только карта приняла допустимую команду ACMD41, она сможет также принять CMD1 даже если она использовалась после переинициализации (командой CMD0) карты. Это было определено для того, чтобы иметь возможность отличить друг от друга Thin SD Memory Card и MultiMediaCard (которая также поддерживает CMD1).

7.2.8 Состояния ошибки (Error Conditions). В отличие от традиционного протокола SD Memory Card, в режиме SPI карта будет всегда отвечать на команду хоста. Ответ (response) показывает принятие команды картой или отбрасывание команды картой. Команда может быть отброшена в одном из следующих случаев:

- Команда была отправлена во время операции чтения (исключая CMD12, которая допустима для этой операции).
- Команда была отправлена, когда карта занята внутренним процессом (например, программирование данных).
- Карта заблокирована, и команда не принадлежит классам команд Class 0 или Class 7.
- Команда не поддерживается (недопустимый код операции).
- Ошибка CRC команды (когда включена проверка CRC).
- Команда содержит недопустимый операнд.
- Команда отправлена вне последовательности во время процедуры очистки.

Обратите внимание, что в случае, когда хост посылает команду во время отправки картой данных при операции чтения, карта пошлет response с индикацией недопустимой команды, и это может нарушить передачу данных.

7.2.9 Деление носителя данных на разделы (Memory Array Partitioning). Такое же, как и в традиционном режиме SD (не SPI).

7.2.10 Блокировка/разблокировка карты (Card Lock/Unlock). Использование команд блокировки (lock) и разблокировки (unlock) карты идентично традиционному режиму SD. В обоих случаях на команду посылается response типа R1b. После очистки сигнала занятости хост должен получить результат операции отправкой команды SEND_STATUS (CMD13). Подробности см. в главе 4.3.7.

7.2.11 Команды, специфичные для приложения. Это идентично традиционному режиму SD за исключением бита статуса APP_CMD (см. таблицу 4-35), который недоступен в режиме SPI.

7.2.12 Команда защиты содержимого карты (Content Protection Command). Все команды ACMD, относящиеся к защите контента (Content Protection) и функциональности безопасности такие же, как и в традиционном режиме SD.

7.2.13 Команда переключения функции (Switch Function Command). Она такая же, как и в традиционном режиме SD, с двумя исключениями:

• Команда допустима, когда карта не в состоянии ожидания (idle state).
• Период переключения составляет 8 тактов после выхода end-бита ответа R1 response команды CMD0.

7.2.14 High-Speed Mode. То же самое, что и в традиционном режиме SD mode. Имеется в виду, что протокол и команды те же, но скорость передачи данных будет конечно меньше, поскольку уже канал передачи данных, и он общий как для команд, так и для полезной нагрузки.

7.2.15 Спецификация класса скорости (Speed Class Specification). В отличие от традиционного режима SD, карта в режиме SPI не может гарантировать класс скорости. В режиме SPI хост должен работать с картой как картой Class 0, не обращая внимания на класс, который показывает SD Status.

[7.3 Пакеты транзакций режима SPI]

7.3.1 Токены команды (Command Tokens)

7.3.1.1 Формат команды. Все команды SD Memory Card имеют длину 6 бит. Передача команды всегда начинается с левого (старшего, MSB) бита кодового слова команды. Все команды защищены CRC (см. Главу 4.5). Команды и их аргументы режима SPI перечислены в таблице 7-3.

Таблица 7-1. Формат команды.

Позиции бит 47 46 [45:40] [39:8] [7:1] 0
Ширина (в битах) 1 1 6 32 7 1
Значение поля 0 1 xxxxxx x...x x...x 1
Описание start bit Бит передачи Индекс команды Аргумент CRC7 end bit

7.3.1.2 Классы команд. В режиме SPI команды поделены на 2 класса (см. таблицу 7-2). Каждый класс поддерживает определенный набор функций карты. Карта памяти SD будет поддерживать тот же самый набор классов опциональных команд для обоих режимов обмена (здесь имеется только таблица одного класса команд в регистре CSD). Допустимые классы команд и поддерживаемые команды для определенного класса отличаются у традиционного режима обмена SD и режима обмена SPI.

Обратите внимание на исключения классов, которые не поддерживаются в режиме SPI mode (Class 1, Class 3 и Class 9). Обязательные требуемые классы для режима обмена SD и режима обмена SPI одинаковые.

Таблица 7-2. Классы команд в режиме SPI.

CMD Class  Описание класса Поддерживаемые команды
0 1 5 6 8 9 10 12 13 16 17 18 24 25 27 28 29 30 32 33 34 35 36 37 38 42 50 52 53 55 56 57 58 59
Class 0  Basic (базовый набор команд) + +     + + + + +                                                  
Class 1 Нет в SPI                                                                    
Class 2 Block Read                   + + +                                            
Class 3 Нет в SPI                                                                    
Class 4 Block Write                   +     + + +                                      
Class 5 Erase                                     + +         +                  
Class 6 Write Protect (опционально)                               + + +                                
Class 7 Lock Card (обязательно)                   +                               +                
Class 8 Application specific                                                           + +      
Class 9 I/O mode     +                                                 + +          
Class 10(1) Switch       +                                 + + + +     +         +    
Class 11 Зарезервировано                                                                    

Примечание (1): этот класс команд был добавлен в спецификации Version 1.10.

7.3.1.3 Подробное описание команд. В следующей таблице приведено подробное описание команд шины SPI. Ответы (response) определены в главе 7.3.2. Таблица 7-3 перечисляет все команды карт памяти SD. Слово "ДА" в столбце "SPI" означает, что эта команда поддерживается в режиме SPI. С этими ограничениями описание класса команд в CSD остается достоверным. Если команда не требует аргумента, значение этого поля должно быть установлено в 0. Зарезервированные команды традиционного режима SD также зарезервированы и в режиме SPI.

Двоичный код команд определен символом мнемоники. Например, поле индекса команды (в двоичном виде) будет 000000 для команды CMD0 и 100111 для команды CMD39.

Карта игнорирует stuff-биты и зарезервированные биты в аргументе.

Таблица 7-3. Команды и аргументы команд.

CMD
Index
SPIАргументResp.АббревиатураОписание
CMD0 ДА [31:0] stuff-биты (все в 0) R1 GO_IDLE_STATE Программный сброс карты (Software reset).
CMD1 ДА(1) [31] зарезервирован
[30] HCS
[29:0] зарезервированы
R1 SEND_OP_COND Отправка хосту информации о поддерживаемой
емкости и запуск процесса инициализации карты.
HCS эффективен, когда карта принимает
команду SEND_IF_COND. Зарезервированные
биты должны быть равны 0.
CMD2 нет        
CMD3 нет        
CMD4 нет        
CMD5 Зарезервировано для использования в I/O mode (см. "SDIO Card Specification")
CMD6(8) ДА [31] режим (0 Check, 1 Switch)
[30:24] резерв (все в 0)
[23:20] для функциональной
группы 6 (все 0x0 или 0xF)
[19:16] для функциональной
группы 5 (все 0x0 или 0xF)
[15:12] для функциональной
группы 4 (все 0x0 или 0xF)
[11:8] для функциональной
группы 3 (все 0x0 или 0xF)
[7:4] функциональная группа 2
для системы команд
[3:0] функциональная группа 1
для режима доступа
R1 SWITCH_FUNC Проверяет переключаемую функцию (режим 0)
и переключает функцию карты (режим 1).
См. главу 4.3.10 [1].
CMD7 нет        
CMD8(9) ДА [31:12] зарезервированы
[11:8] напряжение питания (VHS)
[7:0] маска проверки
(check pattern)
R7 SEND_IF_COND Только для карт SDC V2. Проверка диапазона
напряжения питания. Карте посылается
информация об интерфейсе, включающая
напряжение питания, и запрашивается
у карты ответ - может ли она работать от этого
напряжения. Зарезервированные биты
должны быть заполнены нулями.
CMD9 ДА [31:0] stuff-биты (все в 0) R1 SEND_CSD Чтение регистра CSD.
CMD10 ДА [31:0] stuff-биты (все в 0) R1 SEND_CID Чтение регистра CID.
CMD11 нет        
CMD12 ДА [31:0] stuff-биты (все в 0) R1b(5) STOP_TRANSMISSION Принудительная остановка чтения данных для
операции Multiple Block Read.
CMD13 ДА [31:0] stuff-биты (все в 0) R2 SEND_STATUS Запрашивает выбранную карту послать её
регистр статуса.
CMD14 Зарезервировано
CMD15 нет        
CMD16 ДА [31:0] длина блока R1 SET_BLOCKLEN Изменение размера блока чтения/записи(2)
карты Standard Capacity, указывается в байтах.
Длина блока команд чтения и записи для карт
High Capacity фиксирована на размере 512 байт.
Этой командой устанавливается длина команды
LOCK_UNLOCK для карт обоих емкостей.
CMD17 ДА [31:0] адрес данных(10) R1 READ_SINGLE_BLOCK Чтение блока размера, установленного командой
SET_BLOCKLEN(3).
CMD18 ДА [31:0] адрес данных(10) R1 READ_MULTIPLE_BLOCK Постоянное чтение друг за другом блоков, пока
этот процесс не будет остановлен командой
STOP_TRANSMISSION хоста.
CMD19 Зарезервировано
CMD20 нет        
CMD21,
CMD22
Зарезервировано
CMD23 ДА [15:0] количество блоков R1 SET_BLOCK_COUNT Только для MMC. Указание количества блоков
для трансфера вместе со следующей командой
многоблочного чтения/записи.
CMD24 ДА [31:0] адрес данных(10) R1 WRITE_BLOCK Запись блока размера, установленного командой
SET_BLOCKLEN(4).
CMD25 ДА [31:0] адрес данных(10) R1 WRITE_MULTIPLE_BLOCK Постоянная запись друг за другом блоков, пока
не будет отправлен токен Stop Tran (вместо
токена Start Block).
CMD26 нет        
CMD27 ДА [31:0] stuff-биты (все в 0) R1 PROGRAM_CSD Записывает программируемые биты регистра CSD.
CMD28 ДА [31:0] адрес данных R1b(5) SET_WRITE_PROT Если карта поддерживает функции защиты от
записи, эта команда устанавливает бит защиты
от записи для адресованной группы. Свойства
защиты от записи закодированы в специфических
данных карты (регистр CSD, поле WP_GRP_SIZE).
Карты High Capacity (SDHC) не поддерживают
эту команду.
CMD29 ДА [31:0] адрес данных R1b(5) CLR_WRITE_PROT Если карта поддерживает функции защиты от
записи, эта команда очищает бит защиты от записи
для адресованной группы. Карты High Capacity
(SDHC) не поддерживают эту команду.
CMD30 ДА [31:0] адрес защищенных
от записи данных
R1 SEND_WRITE_PROT Если карта поддерживает функции защиты
от записи, эта команда запросит у карты послать
состояние бит, определяющих защиту
от записи. Карты High Capacity (SDHC)
не поддерживают эту команду.
CMD31 Зарезервировано
CMD32 ДА [31:0] адрес данных(10) R1 ERASE_WR_BLK_START_ADDR Устанавливает адрес первого записываемого
блока, который должен быть очищен.
CMD33 ДА [31:0] адрес данных(10) R1 ERASE_WR_BLK_END_ADDR Устанавливает адрес последнего записываемого
блока, который должен быть очищен.
CMD34..
CMD37(8)
Зарезервировано для каждого набора систем команд, устанавливаемого командой переключения функций (CMD6).
Подробнее см. спецификацию по каждой системе команд.
CMD38 ДА [31:0] stuff-биты (все в 0) R1b(5) ERASE Стирает все ранее выбранные записываемые
блоки.
CMD39 нет        
CMD40 нет        
CMD41 Зарезервировано
CMD42 ДА [31:0] зарезервированные биты
(все должны быть в 0)
R1 LOCK_UNLOCK Используется для установки/снятия пароля или
блокировки/разблокировки карты. Переданный
блок данных включает в себя все необходимые
для команды подробности - см. главу 4.3.7 [1].
Размер блока данных определяется командой
SET_BLOCK_LEN. Зарезервированные биты в
аргументе и структуре Lock Card Data должны
быть установлены в 0.
CMD43..
CMD49
Зарезервировано
CMD50(8) Зарезервировано для каждого набора систем команд, устанавливаемого командой переключения функций (CMD6).
Подробнее см. спецификацию по каждой системе команд.
CMD51 Зарезервировано
CMD52..
CMD54
Зарезервировано для I/O Mode (см. "SDIO Card Specification").
CMD55 ДА [31:0] stuff-биты (все в 0) R1 APP_CMD Определяет для карты следующую команду как
команду специфичную для приложения (ACMD),
а не как обычную команду (CMD).
CMD56 ДА [31:1] stuff-биты (все в 0)
[0] RD/WR(7)
R1 GEN_CMD Используется либо для передачи блока данных
в карту, либо для получения блока данных от
карты для обычных команд и для команд,
специфичных для приложения. В случае карты
памяти Standard Capacity размер блока данных
должен быть определен командой
SET_BLOCK_LEN. Для карт High Capacity размер
блока данных для этой команды фиксирован
на 512 байтах.
CMD57(8) Зарезервировано для каждого набора систем команд, устанавливаемого командой переключения функций (CMD6).
Подробнее см. спецификацию по каждой системе команд.
CMD58 ДА [31:0] stuff-биты (все в 0) R3 READ_OCR Чтение регистр OCR карты. Бит CCS назначен
в OCR[30]
CMD59 ДА [31:1] stuff-биты (все в 0)
[0] опция проверки CRC
R1 CRC_ON_OFF Включает (1) или выключает (0) опцию
проверки CRC.
CMD60..
CMD63
Зарезервировано для производителя карт.

Примечания к таблице 7-3:

(1) CMD1 является допустимой командой для карт стандартного размера Thin (толщина 1.4 мм) только в том случае, если она использовалась после переинициализации карты командой CMD0 (сразу после включения питания CMD1 для этих карт недопустима).

(2) Длина блока по умолчанию (default block length) указана в регистре CSD.

(3) Передаваемые читаемые данные не должны пересекать физическую границу блока за исключением случая, когда READ_BLK_MISALIGN установлен в 1 в регистре CSD.

(4) Передаваемые записываемые данные не должны пересекать физическую границу блока за исключением случая, когда WRITE_BLK_MISALIGN установлен в 1 в регистре CSD.

(5) R1b: это R1 response с опциональным завершающим сигналом занятости (trailing busy signal).

(6) 32 бита защиты от записи (представляющих 32 защищенные от записи группы начиная с указанного адреса), за которыми идут 16 бит CRC, передаются в формате полезной нагрузки через линию данных. Последний (наименее значащий, LSB) бит строки битов защиты от записи соответствует первой адресованной группе. Если адреса последних групп выходят за пределы допустимого адресного пространства карты, то соответствующие биты защиты от записи будут обнулены.

(7) RD/WR_: лог. 1 означает, что хост получает (читает) данные карты. лог. 0 означает, что хост посылает данные в карту.

(8) Эта команда была добавлена в спецификации Version 1.10.

(9) Эта команда была добавлена в спецификации Version 2.00.

(10) Единица размера в аргументе адреса данных (data address) будет соответствовать 1 байту для карт стандартного размера (Standard Capacity SD Memory Card) и блоку (512 байт) для карт высокой емкости (High Capacity SD Memory Card, SDHC).

В следующей таблице описаны все команды, относящиеся к приложению (application specific commands), которые поддерживаются/зарезервированы SD Memory Card. Всем следующим командам должен предшествовать код команды APP_CMD (CMD55).

Таблица 7-4. Список Application Specific Command, используемых/зарезервированных SD Memory Card в режиме SPI.

CMD
Index
SPIАргументResp.АббревиатураОписание
ACMD6 нет        
ACMD13 ДА [31:0] stuff-биты R2 SD_STATUS Отправка SD Status. Поля битов статуса показаны
в таблице 4-37 [1].
ACMD17 Зарезервировано
ACMD18 ДА -- -- -- Зарезервировано для приложений
безопасности SD(1).
ACMD14..
ACMD21
Зарезервировано
ACMD22 ДА [31:0] stuff-биты R1 SEND_NUM_WR_BLOCKS Отправка количества успешно записанных (без
ошибок) блоков. Отвечает блоком данных из
32 бит + CRC.
ACMD23 ДА [31:23] stuff-биты
[22:0] количество блоков
R1 SET_WR_BLK_ERASE_COUNT Устанавливает количество записываемых блоков,
которые должны быть предварительно очищены
перед записью (для ускорения использования
команды Multiple Block Write). Установка по
умолчанию 1 (один записываемый блок)(2).
ACMD24 Зарезервировано
ACMD25,
ACMD26,
ACMD38
ДА -- -- -- Зарезервировано для приложений
безопасности SD(1).
ACMD39..
ACMD40
Зарезервировано
ACMD41 ДА [31] зарезервированный бит
[30] HCS
[29:0] зарезервированные биты
R1 SD_SEND_OP_COND Отправляет хосту информацию о поддержке
емкости и активирует процесс инициализации
карты. Зарезервированные биты должны
быть заполнены нулями.
ACMD42 ДА [31:1] stuff-биты
[0] set_cd
R1 SET_CLR_CARD_DETECT Задает подключить (1) / отключить (0) резистор
50 кОм pull-up на выводе выборки карты CS
(вывод 1). Этот pull-up может использоваться
для детектирования наличия карты.
ACMD43..
ACMD49
ДА -- -- -- Зарезервировано для приложений
безопасности SD(1).
ACMD51 ДА [31:0] stuff-биты R1 SEND_SCR Читает регистр конфигурации карты (SCR).

Примечания к таблице 7-4:

(1) См. документ "SD Specifications Part3 Security Specification" для получения подробного объяснения по функциям безопасности карт SD (SD Security Features).

(2) Токен Stop Tran используется для остановки передачи множественной записи блоков (Multiple Block Write) независимо от того используется ли функция предварительной очистки (pre-erase, ACMD23), или нет.

7.3.1.4 Работа команды CMD8 в режиме SPI. Как уже упоминалось, в режиме SPI карта всегда пошлет ответ на команду - response. В таблице 7-5 показана работа карты для команды CMD8.

Таблица 7-5. Как работает карта для команды CMD8 в режиме SPI.

Проверка аргумента команды
Ответ карты(1)
Индекс Зарезервировано VHS Маска CRC R1 Ver Зарезервировано VCA Маска
=8 Не имеет значения Не имеет значения Не имеет значения Ошибка 09h (Только R1)
не 8 Не имеет значения Не имеет значения Зависит от индекса команды
=8 Нет совпадения(2) Корректна 01h Ver=0 0 0 Обратное
эхо
=8 Совпадение(2) Корректна 01h Ver=0 0 Обратное
эхо
Обратное
эхо

Примечания к таблице 7-5:

(1) Response показывает действительный ответ, возвращаемый картой (это не включает ошибки во время передачи ответа).

(2) "Match" означает выполнение (по логике AND) обоих условий, и a), и b). "Mismatch" означает все другие случаи.
   a) В поле диапазона напряжений питания VHS установлен в лог. 1 только один бит.
   b) Эта карта поддерживает напряжение питания, предоставленное хостом.

7.3.2 Ответы (Response). Имеется несколько типов токенов response. В режиме SD все данные ответов передаются старшим битом (MSB) вперед.

7.3.2.1 Формат ответа R1. Этот токен response отправляется картой после каждой команды, кроме команд SEND_STATUS. Этот ответ длиной в 1 байт, и в нем старший бит MSB всегда установлен в 0. Другие биты служат для индикаций ошибок, единичка сигнализирует об ошибке. Структура формата R1 приведена на рис. 7-9. Значение флагов определено следующим образом:

• In idle state: карта находится в состоянии ожидания, происходит внутренний процесс инициализации.
• Erase reset: последовательность очистки была отменена до завершения, потому что была принята команда, не входящая в перечень допустимых для последовательности процедуры стирания.
• Illegal command: определена недопустимая команда.
• Communication CRC error: ошибка проверки CRC последней команды.
• Erase sequence error: произошла ошибка в последовательности команд очистки.
• Address error: в команде используется адрес, не выровненный на длину блока.
• Parameter error: аргумент команды (например адрес, длина блока и т. п.) выходит за пределы допустимого для этой карты диапазона.

SD spec SPI mode R1 Response format fig7 9

Рис. 7-9. Формат R1 Response.

7.3.2.2 Формат ответа R1b. Этот токен response идентичен токену формата R1, но имеет опционально добавленный сигнал занятости (busy signal). Токен busy signal может продолжаться любое количество байт. Значение 0 показывает, что карта занята (она притянула свой сигнал MISO к лог. 0). Ненулевое значение показывает, что карта готова к приему следующей команды.

7.3.2.3 Формат ответа R2. Этот токен response имеет длину 2 байта, и посылается как ответ на команду SEND_STATUS. Его формат приведен на рис. 7-10.

SD spec SPI mode R2 Response format fig7 10

Рис. 7-10. Формат R2 Response.

Первый байт идентичен ответу R1. Содержимое второго байта описывается следующим образом:

• Erase param: недопустимый выбор секторов или групп для очистки.
• Write protect violation: команда попыталась записать блок, который защищен от записи.
• Card ECC failed: картой была проведена внутренняя проверка ECC, но она завершилась неудачно, данные некорректны.
• CC error: ошибка внутреннего контроллера карты.
• Error: во время этой операции произошла общая или неизвестная ошибка.
• Write protect erase skip | lock/unlock command failed: этот бит статуса имеет 2 перезагружаемые функции. Он устанавливается, когда хост пытается очистить защищенный от записи сектор, или произошла ошибка пароля во время операции блокировки/разблокировки карты.
• Card is locked: устанавливается, когда карта заблокирована пользователем. Сбрасывается, когда карта разблокирована.

7.3.2.4 Формат ответа R3. Этот токен response отправляется картой, когда принята команда READ_OCR. Длина ответа составляет 5 байт (см. рис. 7-11). Структура первого байта (старший байт) идентична ответу типа R1. Остальные 4 байта содержат биты регистра OCR.

SD spec SPI mode R3 Response format fig7 11

Рис. 7-11. Формат R3 Response.

7.3.2.5 Форматы ответа R4 и R5. Эти форматы response зарезервированы для режима ввода/вывода (I/O mode, см. "SDIO Card Specification").

7.3.2.6 Формат ответа R7. Этот токен response посылается, когда принята команда SEND_IF_COND (CMD8). Длина ответа составляет 5 байт. Структура первого байта (старший байт) идентична ответу типа R1. Остальные 4 байта содержат информацию о рабочем напряжении карты, и обратное эхо маски проверки (check pattern), переданной в аргументе команды - точно так же, как это определено для R7 response традиционного режима SD (см. секцию 4.9 [1]).

SD spec SPI mode R7 Response format fig7 12

Рис. 7-12. Формат R7 Response.

7.3.3 Токены управления (Control Tokens). Передача блока управляется некоторыми токенами.

7.3.3.1 Data Response Token. Каждый записанный в карту блок данных подтверждается токеном Data Response. Этот токен длиной в 1 байт, который имеет следующий формат:

SD spec SPI mode Data Response Token

Значение бит поля Status определено следующим образом:

010 - данные приняты успешно.
101 - данные отброшены из-за ошибки CRC (CRC Error).
110 - данные отброшены из-за ошибки записи (Write Error).

В случае любой ошибки (CRC Error или Write Error) во время операции множественной записи блоков (Multiple Block Write) хост должен остановить передачу данных командой CMD12. В случае ошибки записи Write Error (response в статусе показал 110) хост может послать команду CMD13 (SEND_STATUS), чтобы определить причину проблемы записи. Может использоваться ACMD22, чтобы определить количество успешно записанных блоков.

7.3.3.2 Токены начала блока (Start Block Token) и останова передачи (Stop Tran Token).  Команды чтения и записи используют передачу связанных с ними данных. Данные передаются или принимаются в токенах данных (токен Data). Все байты данных передаются старшим битом (MSB) вперед. Токены Data имеют длину от 4 до 515 байт и передаются в следующем формате для одиночного чтения блока (Single Block Read), одиночной записи блока (Single Block Write) и множественного чтения блоков (Multiple Block Read):

• 1 байт содержит токен Start Block

SD spec SPI mode Start Block Token

• Байты 2..513 (в зависимости от длины блока): данные пользователя (полезная нагрузка, payload).

• 2 последний байта содержат 16 бит контрольной суммы CRC16.

Для операции множественной записи блоков (Multiple Block Write) формат передаваемых данных следующий:

• Если данные передаются, то первый байт будет токеном Start Block

SD spec SPI mode Start Block Token Multiple Block Write

Если передается команда останова передачи, то первый байт будет токеном Stop Tran

SD spec SPI mode Stop Tran Token

Обратите внимание, что этот формат используется только для операции Multiple Block Write. В случае операции Multiple Block Read для останова передачи используется команда STOP_TRAN (CMD12).

7.3.3.3 Токен Data Error. Если операция чтения была неудачной, и карта не может предоставить требуемые данные, то она вместо самих данных отправит код токен ошибки данных. Этот токен имеет длину 1 байт в следующем формате:

SD spec SPI mode Data Error Token fig7 13

Рис. 7-13. Токен Data Error.

Здесь 4 младших, правых бита (LSB) содержат те же данные, что и биты ошибки в формате ответа R2.

7.3.4 Очистка битов статуса (Status Bits). Как было описано в предыдущих параграфах, в режиме SPI биты статуса сообщаются хосту в 3 разных форматах: ответе response R1, ответе response R2 и токене Data Error (те же самые биты могут быть в наличии в разных типах ответов, например Card ECC failed).

Как и в традиционном режиме SD, биты ошибки очищаются, когда они прочитаны хостом, независимо от формата ответа. Индикаторы состояния очищаются чтением или очисткой в соответствии с текущим состоянием карты.

В следующей таблице суммарно показаны условия установки и очистки различных битов статуса:

Таблица 7-6. Биты статуса режима SPI.

Идентификатор Включен в Response Тип(1) Значение Описание Условие очистки(2)
Out of range R2, DataErr E R X 0: нет ошибки
1: ошибка
В аргументе команды указан параметр, вышедший за пределы допустимого диапазона для этой карты. C
Address error R1, R2 E R X 0: нет ошибки
1: ошибка
В этой команде был использован не выровненный адрес, не соответствующий длине блока. C
Erase sequence error R1, R2 E R 0: нет ошибки
1: ошибка
Произошла ошибка в последовательности команд очистки данных. C
Erase param R2 E X 0: нет ошибки
1: ошибка
Произошла ошибка в параметрах последовательности команд очистки данных. C
Parameter error R1, R2 E R X 0: нет ошибки
1: ошибка
Ошибка в параметрах команды. C
WP violation R2 E R X 0: нет защиты от записи
1: защита от записи
Нарушение защиты от записи - попытка запрограммировать блок, защищенный от записи (Write Protect, WP). C
Com CRC error R1, R2 E R 0: нет ошибки
1: ошибка
Произошла ошибка CRC в команде. C
Illegal command R1, R2 E R 0: нет ошибки
1: ошибка
Команда недопустима для текущего состояния карты. C
Card ECC failed R2, DataErr E X 0: успешно
1: отказ
Картой была проведена внутренняя проверка ECC, но она не смогла скорректировать данные. C
CC Error R2, DataErr E R X 0: нет ошибки
1: ошибка
Внутренняя ошибка контроллера карты. C
Error R2, DataErr E R X 0: нет ошибки
1: ошибка
Во время выполнения операции произошла общая ошибка или неизвестная ошибка. C
CSD_OVERWRITE R2 E R X 0: нет ошибки
1: ошибка
Могла произойти одна из следующих ошибок:
- Секция только для чтения CSD не соответствует содержимому карты.
- Попытка отката копии (установка как в оригинале) или нарушение постоянной защиты от записи.
C
WP erase skip R2 S X 0: нет защиты от записи
1: защита от записи
Была очищена только часть адресного пространства, потому что в нем были блоки, защищенные от записи (Write Protect, WP). C
Lock/Unlock cmd failed R2 X 0: нет ошибки
1: ошибка
Во время блокировки/разблокировки карты произошла ошибка последовательности или ошибка пароля. C
Card is locked R2 S X 0: карта не заблокирована
1: карта заблокирована
Карта заблокирована паролем пользователя. A
Erase reset R1, R2 S R 0: очищено
1: установлено
Была прекращена последовательность очистки, потому что была принята команда, не входящая в последовательность команд очистки. C
In Idle state R1, R2 S R 0: карта в состоянии готовности
1: карта в состоянии ожидания
Карта вошла в состояние ожидания (Idle State) после включения питания или команды сброса. Она выйдет из этого состояния и перейдет в состояние готовности (ready) по завершении процедур инициализации. A

Примечания к таблице 7-6:

(1) Тип:

   E: бит ошибки.
   S: бит состояния.
   R: детектируется и устанавливается для действительного ответа на команду (response).
   X: детектируется и устанавливается во время выполнения команды. Хост может получить статус выдачей команды с ответом R1.

(2) Условие очистки (Clear Condition):

   A: Соответствует текущему состоянию карты.
   C: Очищается чтением.

[7.4 Регистры карты]

В режиме SPI недоступен только регистр RCA. Форматы других регистров идентичны традиционному режиму SD.

[7.5 Диаграммы времени шины SPI]

В упрощенной спецификации описание этой секции опущено.

[7.6 Электрический интерфейс SPI]

Физические параметры интерфейса SPI по току и напряжению идентичны сигналам традиционного режима SD, за исключением опции программируемого выхода драйвера карты, которая недоступна в режиме SPI.

[7.7 Рабочие условия шины SPI]

Рабочие условия шины SPI (SPI Bus Operating Conditions) идентичны традиционному режиму SD [1].

[7.8 Тайминг шины]

Интервалы времени (тайминг) идентичны традиционному режиму SD. Тайминг сигнала выборки CS такой же, как и у других входов карты.

[Ссылки]

1. Упрощенное описание стандарта физического уровня карт SD.
2Интерфейс SPI.
3. Как использовать карты памяти MMC/SDC.