Продолжая тему практического применения микросхемы FTDI FT232H, затронутую мной в предыдущей статье, хотелось бы рассказать об использовании отладочной платы на ней в качестве дешевого и почти универсального JTAG-адаптера с интерфейсом USB и поддержкой множества микроконтроллеров различных архитектур и производителей. Я намеренно не называю этот адаптер «JTAG-отладчиком», т.к. далеко не все устройства с JTAG TAP поддерживают отладку, но обычными пользователями JTAG-адаптер используется в большинстве случаев именно для прошивки и отладки своего кода на МК. В этой статье я опишу только собственный опыт использования FT232H в качестве JTAG-адаптера, чтобы не давать ссылок на непроверенные решения, поэтому предлагаю читателям поделиться своими (или чужими) способами использования этой микросхемы в комментариях. Уверен, что способов этих найдется намного больше, чем здесь описано.
Заинтересовавшихся прошу под кат.
Пара слов про FT232H
Если вы не знакомы микросхемой FTDI FT232H, прочтите посвященную ей статью, и возвращайтесь. Если читать другие статьи не входит в ваши планы, то позволю себе немного повториться:
FT232H и его более старые, но отличающиеся большим количеством каналов братья: двухканальный FT2232D, его USB 2.0 версия FT2232H и четырехканальный FT4232H — это контролеры USB<->USART c дополнительным режимом работы, обеспечивающим аппаратную поддержку протоколов SPI (сборка SPI-программатора была описана в предыдущей статье), JTAG (работа с которым будет описана в этой) и I2C (который я пока не буду рассматривать).
Сам чип достаточно дешевый, и в мелких партиях стоит приблизительно 200 рублей, но выпускается он в не очень удобных для DIY корпусах LQFP и QFN, поэтому проще всего купить не сам чип, а уже готовую breakout-плату вроде такой (те самые 15 евро за двухканальный FT2232H из заголовка статьи), или такой (600 рублей без доставки), или такой (тоже 600 рублей, но в другом месте), или любой другой — чип популярный, поэтому различных плат на нем очень много. Старайтесь выбирать такую, на которой уже распаяна микросхема EEPROM для хранения настроек — намного проще будет притворяться другими устройствами, что может не раз понадобиться в дальнейшем.
Пара слов про JTAG
Если вы не знакомы с интерфейсом JTAG, прочтите вот эту статью и снова возвращайтесь. Вообще говоря, JTAG Test Access Port — это, в первую очередь, интерфейс для отладки аппаратной части устройства, а не его программы, но, «чтобы два раза не бегать», прошивку и отладку кода через него поддерживают подавляющее большинство программируемых микросхем с этим интерфейсом. С другой стороны, зачастую даже 4 свободных выводов (а для JTAG требуется не менее 4) на МК нет, да и большинство производителей страдает (а зачастую даже наслаждается) синдромом NIH, поэтому вместо JTAG встречаются разного рода проприентарные интерфейсы, такие как SWD от ARM (протокол тот же, только по 2 вывода вместо 4), BDM от Freescale и Motorola (протокол другой, достаточно одного двунаправленного вывода), Spy-Bi-Wire от Texas Instruments (еще один вариант JTAG с 2 выводами), DebugWIRE от AVR (упрощенный отладочный протокол, которому достаточно 1 вывода) и другие. Некоторые из них, при желании, можно реализовать на базе FT232H программно, используя чип как USB<->GPIO-адаптер, а SWD и SWV — при помощи грамотной коммутации, как это сделано в отладчике KT-Link и его эмуляторе на базе открытого отладчика BusBlaster. На «голом» FT232H из вышеупомянутых вариантов отладочных интерфейсов поддерживается только JTAG, имейте это в виду.
Прошиваем и отлаживаем ARM'ы
В силу того, что на FT232H основано много распространенных отладчиков, самым простым способом добавления поддержки нашей платы в IDE и другие утилиты является эмуляция этих самых отладчиков. Некоторые фичи, возможно, не будут работать, но и от написания своих драйверов этот трюк избавляет. Проще всего притвориться открытым отладчиком CoLink (без суффикса Ex), схема которого отличается от большинства схем breakout-плат только наличием буфера. Более того, CooCox IDE напрямую поддерживает использование любых устройств на базе FT232H в качестве отладчика после предварительной конфигурации, а для Keil uVision и IAR Workbench имеются плагины для CoLink, причем ни Vendor ID, ни Product ID менять не понадобится, т.к. CoLink использует как стандартные для FT232H VID и PID, так и стандартные драйверы FTDI D2XX.
Если ваша ОС отличается от Windows и вас не интересуют ни Keil, ни IAR, ни CooCox IDE — обратите внимание на проекты UrJTAG и OpenOCD, которые имеют полную поддержку отладчиков на базе FT232H. Я работаю в uVision, и этот выбор был сделан не мной, поэтому подробнее об использовании FT232H в Linux и OS X рассказать пока не могу.
В Keil же достаточно установить плагин, выбрать правильный Target и CoLink в качестве отладчика в свойства проекта, после чего как прошивка, так и отладка будет проходить из IDE без привлечения какого-либо стороннего софта.
К сожалению, я не могу найти полного списка совместимых с CoLink чипов (официальный есть по ссылке выше, но он далеко не полон), поэтому придется либо пробовать, либо пользоваться списком совместимости с OpenOCD. В общем, лучше всего просто попробовать, есть большая вероятность, что заработает сразу.
Прошиваем и отлаживаем XE166
Уверен, что даже многие «матерые волки» впервые слышат о данной 16-битной RISC-архитектуре, не очень популярной за пределами ее родины — Германии. Архитектура эта уже достаточно старая, ее начальная модификация была разработана в 1993 году концерном Siemens в сотрудничестве с ST для использования в промышленной автоматике, и называлась она тогда C166. Позднее, в 2007 году, уже вышедшая из состава Siemens компания Infineon немного доработала эту архитектуру, увеличив количество стадий конвеера с 4 до 5 и добавив 32-битный блок сложения-умножения. Чипы на получившейся в итоге архитектуре XE166 выпускаются до сих пор, широко применяются в немецкой автоматике и устаревать пока не собираются. Работу с ними преподают студентам технических ВУЗов соответствующих ИТ-специальностей, поэтому и мне пришлось столкнуться с этой архитектурой и чипами на ней.
Мое мнение — нормальные чипы для своих задач, очень много периферии (по 6 каналов CAN с поддержкой MultiCAN, к примеру), до 100 Мгц с производительностью 1 MIPS на Мгц, но не без недостатков — легко могут жрать по 120 мА на 100 Мгц без особой вычислительной нагрузки и практически полностью отключенной от тактования периферии, да и в программировании посложнее AVR, но на уровне с типичными ARM'ами того же сегмента. Ну и vendor lock-in, куда без него.
Вследствие редкости и малой распространенности на некорпоративном рынке отладчики для этой архитектуры либо невозможно купить совсем, либо на их стоимость можно приобрести сотню нормальных отладчиков для других более популярных архитектур. Но пристальное изучение схемы девкита, на которой обнаруживается все тот же FT2232D, наводит на мысль, что отладчик можно добыть малой кровью. Так и есть, но в Infineon, в отличие от CooCox, решили все-таки поменять VID, PID и серийный номер установленного на девките FT2232D, поэтому это придется сделать и нам. Подключаем девкит, ждем установки драйверов, запускаем FT_Prog, записываем VID, PID и серийный номер (я добавлю их в статью, когда доберусь до девкита, сейчас, каюсь, уже не помню), а затем прошиваем эти же значения (номер серийный можно слегка поменять) в EEPROM нашей платы (вот тут то он и понадобился). Отключаем плату от ПК, подключаем заново — новые VID и PID подхватываются драйверами и далее работа с нашей платой мало чем отличается от работы с девкитом — все те же Keil и Infineon DAS в качестве отладчика.
Другие применения
Поиском по тематическим сайтам несложно найти массу других способов применения FT232H и его братьев для прошивки и отладки МК и ПЛИС, но я пока с ними не сталкивался, поэтому писать о «практическом применении» не имею права. Что не мешает мне, однако, попросить читателей, знакомых с этими самыми способами, поделиться ими в комментариях. Заранее большое спасибо.
Благодарю за внимание и удачной отладки.
Автор: CodeRush