FT232H и почти универсальный USB JTAG-адаптер за 15 евро
Продолжая тему практического применения микросхемы 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 имеются плагины, причем ни Vendor ID, ни Product ID менять не понадобится, т.к. CoLink использует как стандартные для FT232H VID и PID, так и стандартные драйверы FTDI D2XX.
Если ваша ОС отличается от Windows и вас не интересуют ни Keil, ни IAR, ни CooCox IDE — обратите внимание на проекты UrJTAG и OpenOCD, которые имеют полную поддержку отладчиков на базе FT232H. Я работаю в Keil uVision4, и этот выбор был сделан не мной, поэтому подробнее об использовании 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 и его братьев для прошивки и отладки МК и ПЛИС, но я пока с ними не сталкивался, поэтому писать о «практическом применении» не имею права. Что не мешает мне, однако, попросить читателей, знакомых с этими самыми способами, поделиться ими в комментариях. Заранее большое спасибо.
Источник
Адаптер ftdi своими руками
USB — RS-232 преобразователи
Автор: Aheir, DeNew
Опубликовано 12.11.2007
Продолжаем разговор про шину USB и ее применение в радиолюбительской практике.
В прошлый раз (USB 1.1 хаб. Light — версия) мы довольно успешно снабдили ПК десятком дополнительных USB-портов, теперь пришло время начинать использовать все это изобилие.
Естественно, первое, что приходит в голову, применить эти порты для обмена данными с собственными конструкциями на МК. Однако далеко не все МК сейчас имеют периферию для работы непосредственно с USB, а программная реализация этого протокола достаточно сложна и отнимает немало процессорного времени. С другой стороны, подавляющее большинство МК имеет «на борту» модуль универсального асинхронного приемопередатчика, который может работать в режиме, совместимом с протоколом RS-232, т.е. такой микроконтроллер при условии согласования уровней сигналов можно подключать непосредственно к COM-порту компьютера. А при чем здесь USB, спросите вы? Отвечу: производители, как всегда, подсуетились, в результате чего на рынке появилось несколько вариантов преобразователей интерфейсов USB RS-232. Т.е. в нашем распоряжении есть устройство, подключаемое к ПК по USB, а на выходе имеющее сигналы, понятные любому МК с модулем USART (или даже с программно реализованным USART»ом). Здорово? Конечно, здорово, особенно с учетом того, что ОС воспринимает такой переходник просто как еще один (виртуальный) СОМ-порт (VCP: Virtual Com Port) и позволяет работать с ним с помощью обычных терминальных средств.
Вот о микросхемах, позволяющих все это реализовывать, у нас и пойдет сегодня речь…
Пожалуй, наиболее распространенными на сегодняшний день являются преобразователи FT232BM от FTDI Ltd (USB 1.1) (ничего от Maxim не напоминает по названию? 😉 ), TUSB3410 от Texas Instruments (USB 2.0), а так же PL-2303 от Prolific. Что за звери такие? Будем разбираться…
FT232BM выпускается в 32 выводном корпусе LQFP-32 с шагом выводов 0.8мм.
Микросхема имеет интерфейс для подключения внешней EEPROM памяти (выводы 1,2 и 32), в которой могут храниться уникальные идентификационные коды производителя и типа устройства, а также текстовые строки, содержащие информацию о наименовании, производителе устройства и т.п. Микросхема может питаться либо от шины USB, либо от внешнего стабилизированного источника питания с напряжением 5В. В качестве генератора тактовой частоты используется кварц на 6MHz, подключаемый к выводам 27 и 28.
Микросхема имеет встроенный LDO-стабилизатор с выходным напряжением 3.3В, который служит для питания внутренней логики, но может использоваться и для питания каких-либо внешних устройств (вывод 6: 3V3OUT), правда, максимальный ток – всего 5мА. Уровень логической единицы на выходах модуля UART микросхемы (выводы 16-25) задается напряжением на входе VCCIO (вывод 13) и может изменяться в пределах от 3 до 5В (это нужно для обеспечения совместимости с 3-х вольтовой логикой).
Режим питания микросхемы определяется логическим уровнем на входе PWRCTL: лог.0 – питание от шины USB (Bus-Powered), лог.1 – питание от стороннего источника (Self-Powered). Инверсный вход RESET надо через резистор (а можно даже и без него) подтянуть к плюсу питания микросхемы – этого достаточно для нормальной работы. Выход RSROUT может использоваться для сброса внешних устройств в момент сброса FT232. Кроме того, к этому выводу подключается подтягивающий резистор для линии USB Data+. Сами линии Data+ и Data- — это выводы USBDP и USBDM соответственно.
Замечу, что вход TEST должен быть соединен с землей, в противном случае работа микросхемы нестабильна.
Выходы SLEEP и PWREN могут использоваться для управления внешними устройствами, в частности, SLEEP = 0, если микросхема не активна («спит»), а PWREN = 0 после окончания инициализации микросхемы при подключении и = 1, если микросхема не активна.
На выводах 16-25, как уже отмечалось, присутствуют все сигналы, предусмотренные стандартом RS-232. При подключении к ним соответствующих микросхем-преобразователей уровня возможна конвертация исходных данных, поступающих по USB, в поток байт протоколов RS-232, RS-422 или RS-485.
Прием и передача данных по USB могут отображаться светодиодами, подключенными к выходам RXLED и TXLED соответственно.
Схема, которую я обычно использую, приведена на рисунке:
Как видите, навесных элементов очень немного. Для подключения к МК достаточно использовать сигналы RX и TX, в ряде случаев может понадобиться организовать гальваническую развязку этой схемы с остальным устройством. С учетом того, что преобразователь питается от USB, достаточно добавить на RX и TX по оптрону, причем выход TX может напрямую управлять светодиодом одной из оптопар.
В качестве EEPROM можно использовать микросхемы памяти 93С46/56/66, достаточно и самой маленькой по объему:
С железом немножко разобрались, а что касается софта, то здесь тоже ничего сложного нет. С сайта производителя доступны для скачивания две версии драйвера: VCP Driver (только драйвер виртуального СОМ-порта) и D2XX Driver (дает ряд дополнительных возможностей, например, прямой доступ к USB – более интересен для программистов). Если планируется использование микросхемы памяти – надо ставить D2XX, кроме того, понадобится также специальная утилита для прошивки: MProg, также доступная для скачивания с сайта. В остальном – подключаете устройство к ПК, говорите ОС откуда взять драйверы, наблюдаете за установкой. В «Диспетчере устройств» в разделе «USB» должен появиться «USB Serial Converter», а в «Портах» — следующий по номеру «USB Serial Port». Все, можете с ним работать, как с обычным портом.
Я работал с этой микросхемой на скорости порта 115200, хотя драйвер позволяет выставлять максимальную скорость до 921600. В разделе «Port Settings» свойств порта есть кнопка «Advanced». Там в разделе «BM Options» параметр «Latency Timer» стоит поставить поменьше, т.е. 1мс – это увеличит скорость работы.
Если вы всерьез соберетесь использовать эту микросхему, советую ознакомиться с материалами на странице , там действительного много полезного и интересного, а многие моменты объяснены гораздо подробнее, чем в этой статье.
С TUSB3410 все будет несколько сложнее. Дело в том, что эта микросхема по своей сути – микроконтроллер с интегрированным интерфейсным модулем USB. Поэтому, как всякий микроконтроллер, ее придется еще и программировать…
Так получилось, что эта микросхема выпускается в таком же корпусе:
Функциональная оснащенность примерно та же: полный последовательный порт (выводы 13-21, только RX/TX называются SIN/SOUT), интерфейс для EEPROM (здесь это I2C), кварц, питание, Reset и четыре программируемые линии ввода/вывода общего назначения Р3.0 – Р3.4 – вот их-то у FTDI-ки точно не было… Напряжение питания микросхемы – 3.3В, что не очень удобно, поскольку при питании от USB заставляет использовать LDO-стабилизатор. Зато никаких хитрых режимов питания нет.
Ну что, как всегда, кратенько пробежимся по функциональному назначению выводов? Поехали…
С последовательным портом все вроде бы понятно, скажу лишь, что при соответствующей прошивке он может работать не только по протоколу RS-232, но и как IrDA приемопередатчик. Четыре линии ввода/вывода тоже не экзотика, производитель, в частности, предоставляет пример, где они используются для подключения нескольких кнопок, а устройство определяется ОС как HID-совместимое, что позволяет достаточно легко реализовать опрос этих самых кнопок.
DP, DM – линии Data+ и Data- USB, PUR служит для подключения подтягивающего резистора для линии Data+.
На линию VDD18 надо подать напряжение 1.8В от внешнего источника или, что проще, подать лог.0 на вывод VREGEN, включив тем самым внутренний источник на 1.8В, а на VDD18 добавить конденсатор 0.1мкФ на землю…
На RESET – обычную RC-цепочку, более чем достаточно, TEST0 и TEST1 надо подтянуть через 10кОм к питанию, а выход тактовой частоты CLKOUT мы использовать не будем.
Кварц 12МГц на ноги Х1 и Х2, выход индикатора SUSPEND – по вкусу, вход пробуждения WAKEUP можно оставить неподключенным или подтянуть через резистор к плюсу питания.
К линиям последовательного порта этой микросхемы также можно подключать непосредственно МК, опторазвязки или преобразователи уровней.
Вроде как все необходимое для минимальной конфигурации подключили, схема получилось вот такая:
Микросхема EEPROM здесь также не является обязательным элементом и лично я ее так ни разу и не использовал…
Итак, собрали мы эту схему, воткнули в комп, ОС нашла некое устройство и попросила ткнуть ее носом в драйвера для него. Вот тут-то самое интересное и начинается.
Как я уже говорил, TUSB3410 на самом деле микроконтроллер, внутри у него 8052-совместимое ядро. Соответственно, функционал нашего устройства определяется залитой прошивкой. Нам требуется пока что – преобразователь интерфейсов.
В принципе, при условии регистрации и предоставлении информации о вашем проекте производитель предоставляет и исходники, и прошивку для применения микросхемы в качестве преобразователя интерфейсов, но можно пойти и по другому пути. Эта микросхема используется в таком качестве в некоторых интерфейсных шнурках для мобильных телефонов, в GSM-модемах, в некоторых других устройствах. А драйвера для них доступны для свободной закачки. Более того, все эти драйвера содержат необходимую прошивку. Это связано с особенностями работы микросхемы.
Дело в том, что при установке драйвера прошивка для микроконтроллера копируется в /System32/drivers. Далее, при включении устройства TUSB проверяет наличие EEPROM и прошивки в ней. Если все в порядке – грузится с нее, если нет – подгружает прошивку с компа и записывает в EEPROM, если она есть. Или не записывает и просто работает. Если EEPROMа нет, при следующем включении процесс повторяется.
В общем, в результате анализа нескольких комплектов драйверов к готовым устройствам методом проб и ошибок, последовательных приближений и высоконаучного тыка был сгенерирован собственный работоспособный комплект. Во всех файлах драйверов и даже внутри прошивок стоят копирайты Texas Instruments, поэтому скажу, что все предпринятые над драйверами действия цели имели исключительно образовательные и некоммерческие, а здесь результат публикуется сугубо для ознакомления.
После подключения к ПК ОС найдет новое устройство «TUSB3410 Device» и потребует установку драйвера, надо указать на файл umpusbXP.inf. В ходе установки в системную директорию будут скопированы файлы umpusbxp.sys и umpf3410.i51 (прошивка). Далее система найдет виртуальный СОМ-порт, для него потребуется драйвер UmpComXP.inf.
В обоих *.inf-файлах помечены строки, изменив которые можно отредактировать названия определяемых системой устройств и установленные по умолчанию VID&PID, передаваемые ОС. Однако, как и в прошлый раз, я бы не стал этого делать без полного понимания того, к чему это может привести.
Для чего TUSB3410 нужна EEPROM я уже упоминал. Добавлю, что лично я с ней не экспериментировал, однако на сайте производителя доступны для скачивания утилита для генерации бинарного файла прошивки EEPROM на основе umpf3410.i51 и конфигурационного файла (содержит серийный номер устройства, VID&PID, строковые данный по аналогии с FT232BM) и утилита для непосредственной прошивки полученного файла в микросхему.
На странице, посвященной этой микросхеме при желании можно найти подробный даташит, ряд аппноутов, документы, описывающие особенности применения, ссылки на исходные коды и утилиты для работы. Настоятельно рекомендую посмотреть.
Результатом всех этих изысканий стало создание двух модулей преобразования протокола USB в RS-232, на FT232BM и TUSB3410 соответственно, которые можно рассмотреть на фотографии:
Монтаж, как видно, поверхностный, все детали на одной стороне, с изнанки – пара перемычек. Модули рассчитаны на вертикальное впаивание в плату, поэтому на них нет разъемов, а установлены PLS штырьки, которые, собственно, в плату и впаиваются. На дальней от нас стороне платы сделаны контактные площадки RX/TX (на модуле FT232BM их загораживает конденсатор), остальные сигналы последовательного интерфейса не выведены за ненадобностью: эти модули используются для сопряжения исключительно с МК.
Немножко возвращаясь к FT232BM. Ниже вы можете увидеть фото (а в конце статьи — скачать варианты разводки плат) для двух конструкций на FT232BM с полным RS-232 портом.
В первой из них
cигналы RS-232 имеют TTL-уровень и выведены на двухрядный разъем BH-10 (по аналогии с материнскими платами), причем коммутацией входа VCCIO (вывод 13) на 5В или сторонний источник 3.3В (в данном случае применен LDO-стабилизатор, но можно, например, и параметрический использовать или регулируемый на LM317) при помощи джампера можно выбирать соответствующий уровень логической «1» на выводах порта RS-232. Эта конструкция разарабатывалась для отладки устройств, имеющих напряжение питания 3.3В
Еще один вариант модуля с полным RS-232 портом содержит в своем составе микросхему MAX213 — преобразователь уровней — и, таким образом, по уровню напряжений обеспечивает совместимость с последовательными портами ПК.
Схема модуля представлена на рисунке:
А готовое устройство выглядит так:
Теперь о PL-2303: микросхема выпускается в 28-выводном SSOP корпусе с шагом выводов 0.65мм:
Микросхема во многом похожа на FT232, но есть и некоторые черты TUSB3410. Для работы требуется кварцевый резонатор на 12 МГц (выводы 27-28), уровень логической единицы последовательного порта определяется напряжением на входе VDD_232 (4), выводы 1-3, 5, 6 и 9-11 — полный последовательный порт. По аналогии с TUSB3410 микросхема имеет пару выводов (13-14) для подключения EEPROM через I2C (память также служит для хранения идентификаторов устройства). Вход 23 определяет режим токовой нагрузки USB-порта («1» — 500мА, «0» — 100мА), вход TRI-STATE определяет состояние выходов последовательного порта при инициализации микросхемы: «1» — высокий уровень, «0» — высокоимпедансное состояние. Отдельные входы питания для логики (8, 20) и PLL (24) в общем случае могут быть присоединены к шине питания USB, однако желательно в непосредственной близости от них установить керамические конденсаторы на землю. PL-2303 имеет встроенные источник напряжения 3.3В для питания USB-трансивера (вывод 17), который используется также для установки подтягивающего резистора к линии Data+. Как обычно, за более полным, точным и правильным описанием стоит обратиться на сайт производителя. Схема модуля, разработанного на основе этой микросхемы, представлена на рисунке:
Фотографии готового устройства:
Как видно, этот модуль также содержит в своем сотаве микросхему MAX213 (SP213), поэтому обеспечивает поддержку полнофункционального порта RS-232, совместимого по уровням с портами ПК.
Для полноценой работы этого устройства под управлением ОС семейства Windows понадобятся драйверы, доступные для скачивания на сайте производителя. Поскольку на этих чипах делается достаточно много интерфейсных шнурков для подключения мобильных телефонов к ПК, вполне вероятно, что подойдут драйвера и от них.
Источник