Практический способ программной эмуляции Secure Digital хоста

№ 11’2012
PDF версия
В современном мире сложно представить себе устройство без съемного носителя информации. Наличие мировых стандартов, таких как файловые системы, форматы кодирования изображений и музыки, позволяет свободно переносить данные с одного устройства на другое. По мере развития переносных носителей информации (дискеты, лазерные диски и флэш-карты) все больше требований стало предъявляться к их надежности и компактности. С появлением карт памяти на основе флэш-памяти стандарта Secure Digital они быстро стали завоевывать рынок мобильных устройств. На сегодня SD-карты памяти, а также miniSD и microSD используются почти во всех мобильных телефонах, фотоаппаратах, переносных ЭВМ и других бытовых и промышленных устройствах.

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-карты памяти с каким-то набором устройств, сделать вывод об общей работоспособности контроллера нельзя, так как такая проверка не обеспечивает достаточного покрытия. Кроме того, даже используемые команды невозможно проанализировать вне их определенной последовательности.

Последовательность команд при инициализации SDHC-контроллера

Рис. 1. Последовательность команд при инициализации SDHC-контроллера

В рамках этой статьи предлагается решение, которое позволяет обойти вышеперечисленные недостатки: это программный эмулятор SDHC-хоста. Такой хост должен посылать любые необходимые для отладки команды, а также в режиме реального времени разбирать и отображать получаемые на них ответы. Для этого было принято решение использовать микросхему FT2232H шотландской компании Future Technology Devices International (FTDI) (рис. 2). Она отличается от своих аналогов доступностью, большим набором режимов и функций, а также подробной документацией [2]. Микросхема подключается к ЭВМ через USB-интерфейс и позволяет реализовать большое количество разнообразных интерфейсов (JTAG, I2C, SPI, UART и др.).

Модуль MMusbX232H на основе микросхемы FTDI FT2232H

Рис. 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
Расположение контактных площадок SD-карты

Рис. 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

    Здесь байт 0xValue содержит значения всех выводов GPIOH. Каждый из восьми битов соответствует одному выводу (0–7). Байт 0xDirection указывает, следует ли настроить соответствующий вывод GPIOH на вход (0) или на выход (1). Все настроенные на выход выводы байтом 0xValue не управляются.

  • Команда Read Data bits High Byte [7]:
    0x83

    Эта команда считывает значения всех выводов и записывает результат во внутренний буфер устройства в виде одного байта. Вычитать это значение можно с помощью функции FT_Read [6]. Однако сразу же после команды 0x83 это сделать нельзя. Внутренний буфер устройства FTDI имеет размер 4 кбайт и, как правило, становится доступным после заполнения либо длительного простоя. Для того чтобы получить возможность считать все накопившиеся значения немедленно, следует использовать команду Send Immediate.

  • Команда Send Immediate [7]:
    0x87

    Выполнение этой команды, в зависимости от производительности вашего компьютера, может занять некоторое время, так что для отслеживания получаемых с устройства данных рекомендуется использовать системное событие. Подключить это событие можно с помощью функции FT_SetEventNotification [6]. Оно будет срабатывать, как только для чтения станут доступны новые данные.

Для ускорения работы микросхемы с помощью функции FT_Write рекомендуется записывать сразу большое количество команд для генерации тактового сигнала, отправки данных и запроса для чтения ответов, согласно спецификации физического уровня [2].

На рис. 4 представлена программная часть эмулятора хоста SDHC.

Интерфейс управляющей программы эмулятора хоста SDHC

Рис. 4. Интерфейс управляющей программы эмулятора хоста SDHC

Предложенный программный эмулятор хоста SDHC позволяет эффективно отлаживать SDHC-карты, посылая любые команды, пошагово проходить различные последовательности команд, придерживаясь спецификации тестирования [8], и получать результаты в реальном времени в удобном для восприятия виде. На базе эмулятора хоста SDHC можно составлять программы и методики тестирования SD-карт памяти, а также проводить оптимизацию алгоритмов работы внутреннего программного обеспечения контроллера карты.

Статья подготовлена сотрудниками компании ООО «НПП «Цифровые решения» в рамках выполнения государственного контракта с №16.426.11.0035 Минобрнауки РФ.

Литература
  1. Стешенко В., Куляс М., Руткевич А. Технология Secure Digital для карт памяти // Компоненты и технологии. 2011. № 12.
  2. SD Physical Layer Specification Version 4.00. SD Group, 2011.
  3. FTDI MPSSE Basics, Application Note. FTDI, 2010.
  4. FT2232H Dual High Speed USB to Multipurpose UART/FIFO IC. FTDI, 2010.
  5. Software Application Development D2XX Programmer’s Guide. FTDI, 2012.
  6. Command Processor for MPSSE and MCU Host Bus Emulation Modes, Application Note. FTDI, 2011.
  7. SD Physical Test Specification for Card Version 3.00. SD Group, 2010.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *