- PVSM.RU - https://www.pvsm.ru -

FT232H, MPSSE и SPI-программатор за 15 евро

FT232H, MPSSE и SPI программатор за 15 евро
Странно, что про этот крайне популярный и полезный чип до сих пор не было статьи на Хабре. Считаю необходимым восполнить этот пробел. В статье будет описано несколько интересных способов применения чипа FTDI FT232H и его аналогов для различных прикладных целей.
Пару слов о нем: относительно дешевый, простой в разводке и программировании, распространенный конвертер USB 2.0 <-> последовательные протоколы (USART, SPI, I2C, JTAG TAP и просто GPIO bit-bang), хорошо подходящий как для изготовления собственных устройств с подключением к ПК по USB, так и для тестирования и отладки других устройств.
Из простой breakout-платы на этом чипе легко и непринужденно можно сделать UART-конвертер, SPI-программатор, JTAG-отладчик, I2C-master, конвертер GPIO bit-bang (а с ним и остальных протоколов, не требующих запредельных частот и стойких к возможным задержкам, вносимым USB-стеком, к примеру, Dallas 1-wire).
Если вышеуказанные возможности сумели вас заинтересовать — прошу под кат.

Немного истории

Компания уже [1] не раз [2] упоминались [3] на Хабре в различных статьях о DIY-железе и прошивке микроконтроллеров. Серия эта к настоящему времени все еще успешно производится и продается, но прогресс не стоит на месте, и в конце 2009 года с выпуском микросхемы FT2232D началась «перезагрузка» серии, добавившая к уже имевшимся возможностям киллер-фичу — Multi-Protocol Synchronous Serial Engine (MPSSE), о которой в этой статье и пойдет речь.

Технология MPSSE и поддерживающие её чипы

Технология эта обеспечивает аппаратную поддержку последовательных протоколов SPI, I2C и JTAG, а также возможность «дрыгать ногами» GPIO после перевода чипа в специальный режим, называемый, как это ни странно, MPSSE Mode.
Это режим поддерживается в настоящий момент 4 различными контролерами, производимыми FTDI:
FT232H, FT2232D, FT2232H, FT4232H.
Имеются также разные проекты по эмуляции этого режима на микроконтролерах различных архитектур и производителей, но в этой статье я буду рассматривать только FTDI, иначе она рискует вырасти еще вдвое.
Хорошее введение в технологию, со схемами подключения для каждого протокола, списком поддерживаемых возможностей для каждого чипа и пояснениями можно найти в Application Note 135 [4] с говорящим названием MPSSE Basics.
Подробности о подключении и работе с соответствующими протоколами — в отдельных AN: SPI [5], I2C [6], JTAG [7].

Теперь немного от технических характеристиках самого младшего из 4 поддерживаемых чипов — FT232H, т.к остальные отличаются от него, по большому счету, только количеством каналов и наличием или отсутствием определенных возможностей (встроенного LDO-регулятора, к примеру).
Позволю себе процитировать некоторые ключевые ТХ из даташита [8]:

  • Поддержка MPSSE
  • USB <-> USART на скорости до 12 МБод (скорость RS232 может быть лимитирована внешней микросхемой сдвига логических уровней)
  • Конфигурируемые выводы GPIO с регулировкой максимального тока (4, 8, 12 или 16 мА)
  • Хранение конфигурации выводов, режима работы после Reset, USB VID, DID и Description string во внешней EEPROM с возможностью её перезаписи по USB
  • Напряжение питания ядра 1.8 В (входящее — от 3.3 В до 5 В ), выводов — 3.3 В (все выводы толерантны к 5 В)
  • Температурный диапазон от -40°C до 85°C
  • Выпускается в корпусах LQFP48 и QFN
  • Имеются драйверы для Windows, MacOS X и Linux

Про USART мне здесь добавить нечего — это основной режим работы всех чипов серии, и работает он прекрасно. Поддерживаются все необходимые настройки стоп-битов и аппаратный контроль четности, так что можно смело делать свой USB-модем, если нужно.
Если от чипа необходим только интерфейс GPIO, то на каждый канал приходится по 16 выводов (в режиме MPSSE), если же планируется использовать GPIO параллельно с каким-либо из аппаратно-поддерживаемых протоколов, то выводов будет доступно всего 12.
Запись конфигурации (при наличии внешнего EEPROM) производится программой FT_Prog, доступных опций немного, самые важные — Vendor ID, Device ID, Description и Serial Number.
К питанию чип неприхотлив, кушает что дают (если дают в указанном выше диапазоне), но у его старших братьев встроенный LDO-регулятор отсутствует, поэтому для питания от USB необходимо использовать внешний.
Корпус LQFP48 вполне паябельный в домашних условиях даже при отсутствии термовоздушной станции или паяльника с жалом-микроволной, но все, конечно, зависит от рук. Про пайку QFN говорить не буду, если вы умеете паять такие корпуса, то и про FT232, скорее всего, уже не раз слышали.
Про драйверы стоит добавить, что FTDI предоставляет на условиях royalty-free два вида драйверов — Virtual Com. Port и D2XX Direct, но для работы с MPSSE необходим только последний. Существует также свободный драйвер на основе libusb — libftdi [9].

Я не хочу ничего паять!

Для тех, кто не хочет паять, на рынке имеется множество breakout-плат, оснащенных чипом FT2232H (двухканальный вариант FT232H, который для простоты можно считать двумя FT232H в одном корпусе), всей необходимой обвязкой и внешней EEPROM.
Купленная мной плата [10] стоила 15 евро, в СНГ можно купить похожую приблизительно за 600 рублей без доставки (у DiHalt [11]'а, к примеру [12], только требуйте вариант на FT2232D, а лучше сразу на FT2232H, если есть).

Моя плата выглядит так:
FT232H, MPSSE и SPI программатор за 15 евро
Слева — питание, земля и 16 выводов канала А, справа — питание, земля, 16 выводов канала B, Reset и Wake-up. Диоды TX и RX работают правильно только в режиме USART (если специально их не зажигать программно при работе с MPSSE), поэтому на свою плату я их даже не стал запаивать. LDO-регулятор и чип EEPROM находятся на обратной стороне платы.

Практическое применение

Хватит теории и рассказов, пора перейти к практике. Представьте, что такая плата у вас уже есть, и теперь вы задумываетесь, а что с ней можно сделать. А вот что:
0. Конвертер USB<->USART без всяких там новомодных MPSSE, как учили отцы. Применений ему масса, можно восстанавливать убитые неудачной прошивкой модемы и роутеры, восстанавливать (слегка) испортившиеся жесткие диски, подключаться к отладочным интерфейсам различного оборудования и так далее, применений масса, рассматривать я их тут не буду.
1. SPI-программатор для прошивки и восстановления БИОСов для более или менее новых ПК (производства 2008 года и новее, массовый переход на SPI-чипы для хранения БИОСа произошел вместе с внедрением X58, насколько я помню). С внедрением технологии SecureBoot (и сопутствующих ей) прошивка модифицированного БИОСа превратилась из обыкновенной операции в прогулку по граблям, в результате которой «окирпичить» машину — как два байта переслать. Внешний SPI-программатор решает эти проблемы полностью.
2. JTAG-отладчик для различных МК. В данный момент я прошиваю и отлаживаю этой платой следующие МК: STM32F1xxL1xxF4xx, Infineon XMC4500 (ARM Cortex-M) и Infineon XE167FM (C166), но список поддерживаемых МК значительно шире, ибо на FT232H основаны такие популярные отладчики как отрытый CooCox CoLink [13] и закрытый но более мощный Amontec JTAGKey2 [14], под которые можно успешно мимикрировать.
3. I2C bus master, который можно использовать, к примеру, для контроля за VID процессора или видеокарты, и при нормальных условиях I2C совместим с SMBus и PCBus, на которых висит половина низкоскоростной периферии ПК. Пока я этот режим досконально не изучал, поэтому описывать работу с ним не буду.
4. Конвертер USB<->GPIO, на базе которого можно реализовать как простые задачи из серии «выключить устройство нажатием кнопки в программе», так и задачи посложнее, вроде реализации собственных протоколов на программном уровне. Программа при этом пишется на ПК, что имеет как преимущества (намного больше свободы в выборе ЯП и обилие ресурсов), так и недостатки (задержки в работе USB-стека и его непредсказуемые тайминги не позволят реализовать очень скоростные протоколы), но сама возможность не использовать МК для взаимодействия с железом для тех, кто с ними малознаком — это хорошо.
Остановлюсь подробнее на пунке 1, оставив пункт 2 для следующей статьи.

Делаем SPI-программатор

Для превращения платы на чипе FT232H в SPI-программатор нам понадобятся:
0. Сама плата
1. Чип EEPROM с интерфейсом SPI, например, популярный у производителей современных материнских плат Winbond W25Q64BV [15], который мы будем программировать. На десктопных платах они бывают в корпусах DIP8 (почти всегда) и SOIC8 (некоторые модели Gigabyte и EVGA), для упрощения замены в случае порчи БИОСа обычно чип не припаян, а установлен в кроватку или ZIF-сокет. На ноутбуках чип БИОСа чаще всего припаян на материнскую плату, и для программирования приходится использовать ISP-порт или специальный зажим, надеваемый на чип сверху
2. Два необязательных резистора номиналом 4.7 КОм для подтяжки выводов #WP и #HOLD к питанию во время прошивки (можно обойтись и без них, если на плате достаточно свободных выводов 3.3 В)
3. Необязательный сокет для чипа EEPROM (чтобы не паять провода к его выводам)
4. ПК с Linux (меньше всего телодвижений), Windows (побольше) или OS X (не поддерживается официально, только энтузиастами).
5. Установленная в систему утилита flashrom [16], собранная с поддержкой libftdi.

Далее все просто, соединяем FT232H и EEPROM по схеме (взятой из схемы моего программатора RushSPI [17]):
FT232H, MPSSE и SPI программатор за 15 евро
Открываем командную строку и выполняем там команду:
flashrom -p ft2232_spi:type=232H
Для многоканальных чипов FTDI нужно будет дополнительно указать, на каком именно канале находится подключенная микросхема EEPROM, к примеру, для FT2232H и канала А команда будет такой:
flashrom -p ft2232_spi:type=2232H,port=A
Результат выполнения этой команды должен быть примерно таким:
Found chip "Winbond W25Q64.V" (8192 KB, SPI)
Если чип не нашелся, то либо вы что-то напутали с подключением, либо ваш flashrom собран без libftdi, либо у вас Windows и вам нужно ставить вместо найденного системой драйвера от производителя другой драйвер на основе libusb, как описано здесь [18].
Если же чип нашелся, то теперь читать содержимое той же командой с дополнительным ключом -r dumpname.rom, либо записать свой файл командой с ключем -w newbios.rom
Список доступных ключей, поддерживаемых программаторов и все остальное можно найти в официальной Wiki проекта [16]. Там же находится статья, посвященная программаторам на базе FT232H, вот она [19].

Заключение

Получившийся программатор прошивает восьмимегабайтную микросхему SPI за ~150 секунд, что не быстро, но и не слишком долго, а за 15 евро — просто отлично.
С его помощью я уже не раз восстанавливал себе БИОС, не вынесший [20] экспериментов [21].
С его же помощью (правда, в режиме USART-конвертера) удалось починить [22] сломавшийся было жесткий диск.
Про прошивку и отладку различных МК по JTAG с его помощью я расскажу в следующей статье.

О возможных ошибках, очепятках и недоработках прошу сообщать в ЛС.
Спасибо за внимание и за то, что прочитали эту портянку.

Автор: CodeRush

Источник [23]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/news/50727

Ссылки в тексте:

[1] уже: http://habrahabr.ru/post/129416/

[2] не раз: http://habrahabr.ru/post/109629/

[3] упоминались: http://habrahabr.ru/post/160469/

[4] Application Note 135: http://www.ftdichip.com/Support/Documents/AppNotes/AN_135_MPSSE_Basics.pdf

[5] SPI: http://www.ftdichip.com/Support/Documents/AppNotes/AN_114_FTDI_Hi_Speed_USB_To_SPI_Example.pdf

[6] I2C: http://www.ftdichip.com/Support/Documents/AppNotes/AN_113_FTDI_Hi_Speed_USB_To_I2C_Example.pdf

[7] JTAG: http://www.ftdichip.com/Support/Documents/AppNotes/AN_129_FTDI_Hi_Speed_USB_To_JTAG_Example.pdf

[8] даташита: http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232H.pdf

[9] libftdi: http://www.intra2net.com/en/developer/libftdi/

[10] Купленная мной плата: http://www.elv.de/elv-highspeed-mini-usb-modul-um-ft2232h-komplettbausatz.html

[11] DiHalt: http://habrahabr.ru/users/dihalt/

[12] к примеру: http://shop.easyelectronics.ru/index.php?productID=163

[13] CooCox CoLink: http://www.coocox.org/colink.htm

[14] Amontec JTAGKey2: http://www.amontec.com/jtagkey2.shtml

[15] Winbond W25Q64BV: http://www.winbond.com/hq/enu/ProductAndSales/ProductLines/FlashMemory/SerialFlash/W25Q64BV.htm

[16] flashrom: http://flashrom.org/

[17] моего программатора RushSPI: http://randomprojects.org/wiki/RushSPI

[18] здесь: http://flashrom.org/Windows#Using_flashrom_on_Windows

[19] вот она: http://flashrom.org/FT2232SPI_Programmer

[20] вынесший : http://forums.overclockers.ru/viewtopic.php?f=25&t=447045

[21] экспериментов: http://forums.overclockers.ru/viewtopic.php?f=25&t=479847

[22] удалось починить: http://forums.overclockers.ru/viewtopic.php?p=9669064#p9669064

[23] Источник: http://habrahabr.ru/post/206036/