Практический способ программной эмуляции Secure Digital хоста
SD-стандарт был разработан группой ведущих компаний — производителей электроники (Panasonic, SanDisk и Toshiba) в 1999 году [1]. Его первая версия (1.01) описывала карты памяти объемом до 2 Гбайт со скоростью передачи данных до 10 Мбайт/с. Развитием стандарта стала версия 1.10, выпущенная в октябре 2004 года, в которой был введен высокоскоростной режим (High Speed bus mode, HS), обеспечивающий обмен данными и командами по SD-шине со скоростью до 25 Мбайт/с и минимальной скоростью чтения/записи 10 Мбайт/с. В мае 2006 года появилась версия 2.0, основным отличием которой стало введение нового класса SD-карт памяти с увеличенным объемом хранимой информации — до 32 Гбайт включительно (Secure Digital High Capacity, SDHC). Текущая версия стандарта (Physical Layer Specification, version 3.01) описывает SD-карты объемом до 2 Тбайт включительно (Secure Digital eXtended Capacity, SDXC), которые обеспечивают защиту хранимой информации от несанкционированного доступа и копирования. Были введены также новые высокоскоростные режимы работы SD-шины (Ultra High Speed I bus mode), и скорость обмена увеличилась до 104 Мбайт/c. Продолжением стандарта станет разрабатываемая сейчас 4-я версия (Physical Layer Specification, version 4.0), согласно которой скорость обмена по SD-шине может достигнуть уже 312 Мбайт/с (UHS-II bus mode) [2].
Перед авторами статьи стояла задача — разработать систему на кристалле: контроллер карты памяти стандарта SDHC. В процессе выполнения этой работы одной из основных задач была проверка разрабатываемого контроллера на соответствие нормативно-технической документации — SD Physical Layer Specification [2].
Сегодня существует множество бытовых и промышленных устройств на основе SDHC-карт. Для передачи данных между SD-картой и устройством (хостом) используется стандартизированный набор команд и ответов на них. Большинство устройств с различными алгоритмами работы с картой памяти оперируют весьма ограниченным количеством последовательностей команд. (Пример такой последовательности для инициализации SDHC-контроллера изображен на рис. 1.) Поэтому, проверив работоспособность контроллера SDHC-карты памяти с каким-то набором устройств, сделать вывод об общей работоспособности контроллера нельзя, так как такая проверка не обеспечивает достаточного покрытия. Кроме того, даже используемые команды невозможно проанализировать вне их определенной последовательности.
Рис. 1. Последовательность команд при инициализации SDHC-контроллера
В рамках этой статьи предлагается решение, которое позволяет обойти вышеперечисленные недостатки: это программный эмулятор SDHC-хоста. Такой хост должен посылать любые необходимые для отладки команды, а также в режиме реального времени разбирать и отображать получаемые на них ответы. Для этого было принято решение использовать микросхему FT2232H шотландской компании Future Technology Devices International (FTDI) (рис. 2). Она отличается от своих аналогов доступностью, большим набором режимов и функций, а также подробной документацией [2]. Микросхема подключается к ЭВМ через USB-интерфейс и позволяет реализовать большое количество разнообразных интерфейсов (JTAG, I 2 C, SPI, UART и др.).
Рис. 2. Модуль MMusbX232H на основе микросхемы FTDI FT2232H
Наиболее подходящим режимом для реализации программного эмулятора SDHC-контроллера является MPSSE (Multi-Protocol Synchronous Serial Engine), который предоставляет гибкие средства взаимодействия синхронных последовательных устройств с портом USB [3].
Режим MPSSE позволяет программисту отправлять на устройство разные команды, управляющие 16 сигналами микросхемы. Список используемых сигналов представлен в таблице 1.
Таблица 1. Список используемых сигналов микросхемы FTDI [4]
Название контакта Направление передачи данных Data Out Out Data In In Clock Out Chip Select Out GPIOL 0-3 In/Out GPIOH 0-7 In/Out
Список выводов SD-карты приведен в таблице 2. Их фактическое расположение на SD-карте изображено на рис. 3.
Таблица 2. Список выводов SD-карты [2] и их соответствие сигналам микросхемы FTDI
Номер вывода Назначение Направление Сигналы FTDI 1 Линия данных 3 In/Out GRIOH4 2 Линия команд In/Out GRIOH0 3 «Земля» – – 4 Питание – – 5 Тактовый сигнал In GRIOH7 6 «Земля» – – 7 Линия данных 0 In/Out GRIOH1 8 Линия данных 1 In/Out GRIOH2 9 Линия данных 2 In/Out GRIOH3
Рис. 3. Расположение контактных площадок SD-карты [2]
Микросхема FT2232H обладает большим набором функций для управления сигналами Data In, Data Out, Chip Select и синхронизации их с контактом Clock. Однако их использование недопустимо, так как они не имеют возможности переключения направления передачи данных (In/Out). В результате для подключения SD-карты к микросхеме FTDI было принято решение использовать сигналы GPIOH. Их соответствие выводам SD-карты также отображено в таблице 2.
Рассмотрим программную реализацию эмулятора SDHC. Для отправки команды в FT2232H необходимо записать управляющую последовательность байтов с помощью функции FT_Write [6]. Для реализации SD-интерфейса были использованы всего три команды режима MPSSE:
-
Команда Set Data bits High Byte [7]: 0x82 0xValue 0xDirection
Для ускорения работы микросхемы с помощью функции FT_Write рекомендуется записывать сразу большое количество команд для генерации тактового сигнала, отправки данных и запроса для чтения ответов, согласно спецификации физического уровня [2].
На рис. 4 представлена программная часть эмулятора хоста SDHC.
Рис. 4. Интерфейс управляющей программы эмулятора хоста SDHC
Предложенный программный эмулятор хоста SDHC позволяет эффективно отлаживать SDHC-карты, посылая любые команды, пошагово проходить различные последовательности команд, придерживаясь спецификации тестирования [8], и получать результаты в реальном времени в удобном для восприятия виде. На базе эмулятора хоста SDHC можно составлять программы и методики тестирования SD-карт памяти, а также проводить оптимизацию алгоритмов работы внутреннего программного обеспечения контроллера карты.
Статья подготовлена сотрудниками компании ООО «НПП «Цифровые решения» в рамках выполнения государственного контракта с №16.426.11.0035 Минобрнауки РФ.