Сегментация EEPROM-памяти микросхем FTDI на примере ft232h

№ 3’2014
PDF версия
В статье рассматривается назначение полей энергонезависимой памяти EEPROM, применяемых для конфигурации микросхем фирмы FTDI, а также совместимость конфигурации микросхем внутри серии.

Компания Future Technology Devices International (FTDI) [1] выпускает широкий спектр аппаратных преобразователей интерфейсов (USB-мосты). Эти устройства позволяют соединять USB Host с устройством, не имеющим USB-интерфейса.

Одноканальные или многоканальные универсальные USB-мосты имеют один, два или четыре пользовательских порта, а их универсальность достигается за счет режима MPSSE (Multi-Protocol Synchronous Serial Engine). В режиме MPSSE эти мосты могут эмулировать работу различных последовательных протоколов [2]. Серия состоит из таких микросхем: FT2232D, FT2232С, FT232Н, FT2232H и FT4232H.

Они имеют возможность настройки VID/PID-устройства, режима использования порта, области данных производителя, пользовательской области данных, которые сохраняются в энергонезависимой памяти EEPROM. Эти микросхемы могут работать с внешней памятью AT93c46/56/66 фирмы Atmel или совместимыми с ней видами памяти.

USB-мосты компании FTDI очень часто используют в качестве универсального средства для программирования и отладки различного вида микроконтроллеров и ПЛИС.

Для того чтобы разобраться в содержимом памяти, возьмем для примера устройство, которое предлагает компания Digilent [3] на базе микросхемы FTDI. Это устройство представляет собой программатор-отладчик для микросхем ПЛИС фирмы Xilinx.

Хотелось бы также отметить, что компания Digilent позаботилась о полной совместимости своего устройства JTAG-HS2 со всеми отладочными средствами, которые предлагает Xilinx (EDK, ChipScope, Impact).

Разработчики устройства JTAG-HS2 построили его на микросхеме FT232Н. Чтобы разобраться, что к чему, рассмотрим память, считанную с устройства JTAG-HS2. Вычитать данные можно при помощи программы FT_Prog [4], предоставляемой компанией FTDI. Для удобства все данные были сведены в таблицу, различные области отмечены разным цветом:

  • красный — область конфигурации;
  • зеленый — область пользовательских данных;
  • синий — область отметки о производителе;
  • желтый — область отметки о продукте;
  • оранжевый — область серийного номера устройства;
  • фиолетовый — контрольная сумма.
Таблица. Содержимое памяти EEPROM

Адрес

Данные

0000:

0100

0304

1460

0009

80FA

0800

0000

A012

0008:

B228

DA1A

0000

0000

0000

0000

0000

5600

0010:

0100

C792

6A35

5201

9030

4A74

6167

4873

0018:

3200

0000

0000

0000

0000

0044

6967

696C

0020:

656E

7420

4A54

4147

2D48

5332

0000

0000

0028:

0000

0000

0000

0000

1100

0000

0000

0000

0030:

0000

0000

0000

0000

0000

0000

0000

0000

0038:

0000

0000

0000

0000

0000

0000

0000

0000

0040:

0000

0000

0000

0000

0000

4800

0000

0000

0048:

0000

0000

0000

0000

0000

0000

0000

0000

0050:

1203

4400

6900

6700

6900

6C00

6500

6E00

0058:

7400

2803

4400

6900

6700

6900

6C00

6500

0060:

6E00

7400

2000

5500

5300

4200

2000

4400

0068:

6500

7600

6900

6300

6500

1A03

3200

3100

0070:

3000

3200

3400

3900

3800

3500

3400

3600

0078:

3000

3600

0203

0000

0000

0000

0000

102D

Рассмотрим, какая информация записана в каждой из областей памяти с указанием смещения в байтах относительно начала:

  • 0х00; 0х01 — настройки порта(-ов) устройства (для каждого устройства индивидуальные).
  • 0х02; 0х03 — Vendor ID (0x0403).
  • 0х04; 0х05 — Product ID (0x6014).
  • 0х06; 0х07 — тип используемой микросхемы USB-моста:
    • 0х0009 — FT232H;
    • 0х0008 — FT4232H;
    • 0х0007 — FT2232H;
    • 0х0006 — TYPE_R;
    • 0х0005 — FT2232C;
    • 0х0004 — TYPE_AM;
    • 0х0002 — TYPE_BM.
  • 0х08 — конфигурационные биты:
    • бит 7: всегда 1;
    • бит 6: 1/0 — устройство имеет/не имеет собственный источник питания;
    • бит 5: 1/0 — устройство использует/ не использует режим дистанционного пробуждения;
    • биты 4–0: всегда 0.
  • 0х09 — максимальное потребление тока умноженное на 2 мА (0хFA — 500 мА).
  • 0х0А — настройки микросхемы:
    • биты 7–5: всегда 0;
    • бит 4: 1/0 — версия USB 2.0/1.1;
    • бит 3: 1/0 — использовать/не использовать строку серийного номера;
    • бит 2: 1/0 — включить/выключить подтяжки к 0 в режиме остановки для более низкого потребления;
    • бит 1: 1/0 — изохронный/стандартный режим обращения к выходной конечной точке;
    • бит 0: 1/0 — изохронный/стандартный режим обращения к входной конечной точке.
  • 0хВ; 0хC; 0xD — настройки порта(-ов) устройства (для каждого устройства индивидуальные).
  • 0хЕ — смещение в байтах, по которому находится область отметки о производителе (синий).
  • 0хF — длина блока области отметки о производителе (синий).
  • 0х10 — смещение в байтах, по которому находится область отметки о продукте (желтый).
  • 0х11 — длина блока области отметки о продукте (желтый).
  • 0х12 — смещение в байтах, по которому находится область серийного номера устройства (оранжевый).
  • 0х13 — длина блока области серийного номера устройства (оранжевый).
  • 0х1Е — тип микросхемы EEPROM (46/56/66) (для каждого типа микросхем смещение этого поля различное).
  • (0х20–0х9F) + (0хF6–0xFD) — область пользовательских данных (первая часть всегда занимает (EEPROM_Size) 128 байт) (зеленый) [4].
  • (0xA0–0xB1) — область отметки о производителе (записывается в формате unicode).
  • (0xB2–0xD9) — область отметки о продукте (записывается в формате unicode).
  • (0xDA–0xF3) — область серийного номера устройства (записывается в формате unicode).
  • 0xF4; 0xF5 — поле, указывающее на номер порта и режим PnP (если такая настройка доступна для данной микросхемы, в противном случае поле содержит нули).
  • 0хFE; 0xFF — контрольная сумма, вычисляемая по алгоритму:
checksum = 0xAAAA;
for (i = 0; i < eeprom_size-1; i++)
{
    checksum = value[i]^checksum;
    checksum = (checksum << 1) | (checksum >> 15);
}
return user_area_size;

В старшем байте первого слова каждой из областей отметки о производителе, продукте и серийном номере записана длина этой области в байтах. В младшем байте этого слова записан признак наличия данных 0х03. Более подробную информацию о настройке порта(-ов) устройства или размещении поля типа микросхемы EEPROM можно найти в исходниках библиотеки [5].

Для того чтобы убедиться в полной совместимости USB-мостов внутри серии, запишем ту же информацию в двухпортовую ft2232h. Для этого возьмем модуль FT2232HQ Mini Module [6], подключим его к компьютеру и откроем при помощи программы FT_Prog.

Во вкладке USB_Config_Description в поле Max Bus Power следует поставить значение 500. Во вкладке USB_String_Description необходимо записать в полях:

  • Manufacturer— Digilent;
  • Product Description— Digilent USB Device;
  • Serial Number— 210249854606.

Во вкладке Hardware_Specific Port_A Hardware нужно установить отметку напротив 245 FIFO, а в Hardware_Specific Port_A Driver — напротив D2XX. Все эти действия показаны на рис. 1.

Настройка микросхемы в программе FT_Prog

Рис. 1. Настройка микросхемы в программе FT_Prog

После настройки нужно записать эти данные в память EEPROM (рис. 2).

Запись памяти EEPROM

Рис. 2. Запись памяти EEPROM

Для записи пользовательской области EEPROM необходимо воспользоваться функцией FT_EE_UAWrite из библиотеки D2XX API (пример использования этой функции приведен в [5]) либо программой автора (программа автора предлагается без техподдержки.) [6], которая запишет все необходимые данные автоматически (рис. 3).

Запись пользовательской области EEPROM

Рис. 3. Запись пользовательской области EEPROM

Далее необходимо отсоединить кабель USB и затем вновь подключить его к компьютеру. После чего должна начаться автоматическая настройка драйверов устройства, по окончании которой в списке устройств у вас должно появиться три устройства (рис. 4):

  • USB Serial Converter A;
  • USB Serial Converter B;
  • составное USB-устройство.
Список устройств USB

Рис. 4. Список устройств USB

При подключении все USB-устройства должны передавать в USB Host свои дескрипторы в ответ на специальный запрос. Стандарт USB определяет специальную группу дескрипторов, которая должна выдаваться устройством в ответ на стандартный запрос [9]. Благодаря использованию памяти EEPROM пользователь может настроить некоторые дескрипторы по своему усмотрению. Часть из них передается микросхемой FTDI в USB Host в неизменном виде (например, Vendor ID, Product ID, область серийного номера устройства (рис. 4)), а другая часть кодируется (например, версия USB 2.0/1.1 в EEPROM указывается одним битом, а в USB Host передается 0х0200/0х0110). Более детально о дескрипторах и взаимодействии с USB-устройствами можно прочитать в [9].

Поскольку за образец был взят программатор-отладчик ПЛИС Xilinx, то для проверки корректности проделанных операций нужно подключить выводы микросхемы USB-моста к выводам ПЛИС следующим образом:

  • ADBUS0 — TCK;
  • ADBUS1 — TDI;
  • ADBUS2 — TDO;
  • ADBUS3 — TMS.

В приложении impact, поставляемом в Web Edition версии ПО Xilinx, проверяем работу устройства, предварительно установив драйверы от Digilent, которые находятся в папке \…\Xilinx\14.1\ISE_DS\common\bin\nt64\digilent\install_digilent.exe. Устройство должно определиться как оригинальное JTAG-HS2 при выборе меню Output Cable Auto Connect. Далее следует просканировать JTAG-цепочку, выбрав File Initialize Jtag Chain, и после этого можно программировать устройства (рис. 5).

Результат работы программатора-отладчика

Рис. 5. Результат работы программатора-отладчика

Таким образом, разработчики JTAG-HS2 для идентификации своего устройства используют не только области стандартного дескриптора (отметка о производителе, отметка о продукте, серийный номер), но и дополнительную область пользовательских данных, которая не входит ни в один из дескрипторов. После проверки всех этих областей программа, которая взаимодействует с этим программатором-отладчиком, однозначно может идентифицировать его на шине USB.

В завершение отметим, что результаты, приведенные в этой статье, отражают лишь методы исследования. Вся информация для них была собрана из общедоступных публичных интернет-ресурсов и предназначена исключительно для ознакомительных целей. Изложенные сведения могут несколько отличаться в зависимости от серии, типа и ревизии микросхем. Также предупреждаем читателей, что, как и все устройства, подключаемые к порту JTAG, предлагаемое автором устройство требует тщательной проверки. Поэтому сначала проверьте осциллографом сигналы на JTAG без их подключения к ПЛИС и только затем подключайте устройство к ПЛИС.

 

Выводы

FTDI предлагает практически универсальные, гибкие в настройке, простые в использовании аппаратные средства для создания USB-совместимых устройств.

Используя дополнительные ресурсы внешней памяти EEPROM, подключаемой к микросхемам от FTDI, пользователь получает возможность расширить сферу применения продукции этой компании. Разработчику предоставляется возможность изменять не только стандартные дескрипторы устройства, но и дополнительную область пользовательских данных, что позволяет однозначно идентифицировать подключаемое оборудование программой, которая выполняется со стороны USB Host.

Литература
  1. ftdichip.com
  2. Долгушин С. Аппаратные USB-мосты FTDI // Компоненты и технологии. 2010. № 4.
  3. http://www.digilentinc.com/Products/Detail.cfm?Prod=JTAG-HS2
  4. http://www.ftdichip.com/Support/Utilities/FT_Prog_v2.8.2.0.zip
  5. Accessing The EEPROM User Area Of FTDI Devices
  6. https://github.com/ADA007/FTDI_User_Area_Writer.git
  7. http://www.intra2net.com/en/developer/libftdi/
  8. http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT2232H_Mini_Module.pdf
  9. Агуров П. В. Интерфейсы USB. Практика использования и программирования. СПб: БХВ‑Петербург, 2004.

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

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