Подключение карт 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) не поддерживаются. Рис. 7-1. Диаграмма состояний SD Memory Card (режим SPI). Примечания к рис. 7-1: (1) Карта вернет занятость (busy), когда (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. Рис. 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. Рис. 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 показана операция чтения данных, которая была прервана с токеном ошибки вместо блока данных. Рис. 7-4. Операция Read - Data Error. В случае операции чтения нескольких блоков (множественное чтение блоков, Multiple Block Read) каждый переданный блок имеет суффикс из 16-битной CRC. Команда остановки передачи (CMD12) остановит действительную передачу данных (так же, как и в традиционном режиме работы SD Memory Card). Рис. 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). Рис. 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. Рис. 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" (нет данных) с сигнализацией занятости и без сигнализации занятости. Рис. 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, которая допустима для этой операции). Обратите внимание, что в случае, когда хост посылает команду во время отправки картой данных при операции чтения, карта пошлет 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). 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. Формат команды.
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.
Примечание (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. Команды и аргументы команд.
Примечания к таблице 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.
Примечания к таблице 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.
Примечания к таблице 7-5: (1) Response показывает действительный ответ, возвращаемый картой (это не включает ошибки во время передачи ответа). (2) "Match" означает выполнение (по логике AND) обоих условий, и a), и b). "Mismatch" означает все другие случаи. 7.3.2 Ответы (Response). Имеется несколько типов токенов response. В режиме SD все данные ответов передаются старшим битом (MSB) вперед. 7.3.2.1 Формат ответа R1. Этот токен response отправляется картой после каждой команды, кроме команд SEND_STATUS. Этот ответ длиной в 1 байт, и в нем старший бит MSB всегда установлен в 0. Другие биты служат для индикаций ошибок, единичка сигнализирует об ошибке. Структура формата R1 приведена на рис. 7-9. Значение флагов определено следующим образом: • In idle state: карта находится в состоянии ожидания, происходит внутренний процесс инициализации. Рис. 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. Рис. 7-10. Формат R2 Response. Первый байт идентичен ответу R1. Содержимое второго байта описывается следующим образом: • Erase param: недопустимый выбор секторов или групп для очистки. 7.3.2.4 Формат ответа R3. Этот токен response отправляется картой, когда принята команда READ_OCR. Длина ответа составляет 5 байт (см. рис. 7-11). Структура первого байта (старший байт) идентична ответу типа R1. Остальные 4 байта содержат биты регистра OCR. Рис. 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]). Рис. 7-12. Формат R7 Response. 7.3.3 Токены управления (Control Tokens). Передача блока управляется некоторыми токенами. 7.3.3.1 Data Response Token. Каждый записанный в карту блок данных подтверждается токеном Data Response. Этот токен длиной в 1 байт, который имеет следующий формат: Значение бит поля Status определено следующим образом: 010 - данные приняты успешно. В случае любой ошибки (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 • Байты 2..513 (в зависимости от длины блока): данные пользователя (полезная нагрузка, payload). • 2 последний байта содержат 16 бит контрольной суммы CRC16. Для операции множественной записи блоков (Multiple Block Write) формат передаваемых данных следующий: • Если данные передаются, то первый байт будет токеном Start Block Если передается команда останова передачи, то первый байт будет токеном Stop Tran Обратите внимание, что этот формат используется только для операции Multiple Block Write. В случае операции Multiple Block Read для останова передачи используется команда STOP_TRAN (CMD12). 7.3.3.3 Токен Data Error. Если операция чтения была неудачной, и карта не может предоставить требуемые данные, то она вместо самих данных отправит код токен ошибки данных. Этот токен имеет длину 1 байт в следующем формате: Рис. 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.
Примечания к таблице 7-6: (1) Тип: E: бит ошибки. (2) Условие очистки (Clear Condition): A: Соответствует текущему состоянию карты. [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. |