FT232 это не только USB <> UART (Часть 1)

Кроме очевидной функции преобразования интерфейсов эта микросхема умеет целых три режима bit bang. А еще разные свиселки-перделки, которые можно вывести на ножки CBUS.

Сначала решил свалить все в одну кучу, но потом передумал — будет несколько небольших постов.
В первом — описание функционала FT232 и её тюнинга с помощью FT Prog. Интересен будет наверное, лишь начинающим.
Дальше CBUS битбанг, синхронный и асинхронный битбанг. На дельфи и LabView.

ft_prog_0.jpg

Начнем с альтернативных функций пинов CBUS. Их аж 13 штук:

TXDEN — сигнал разрешения передачи (Transmit Enable) для интерфейса RS-485. Может быть выведен на любую из ножек CBUS. Если поглядеть на распиновку, видно что удобнее всего его выкинуть на CBUS2..4 — они на той стороне микросхемы, где и остальные линии RS-232.

PWREN — Сигнал о том, что комп благополучно ушел в спящий режим. Для нас это значит, что надо отключить всю мощную нагрузку. В даташите советуют прицепить на этот пин p-канальный полевик и включать всю нагрузку через него.

TXLED, RXLED и TX&RXLED — три варианта включения светодиодной индикации. TXLED светится, когда данные передаются через USB. То-есть, когда FT232 принимает данные по UART. В RXLED все наоборот. А последний — порождение двух предыдущих режимов. Подключать их надо катодом к FT232 (анодами на питание).

SLEEP — противоположность PWREN (в смысле полярности). Предназначен для уведомления МК о том, что комп уснул. В обычно режиме он находится в высоком лог. уровне. В спячке — в низком. Его тоже можно использовать для отключения нагрузки в спящем режиме.

CLK48, CLK24, CLK12, CLK6 — выход тактового сигнала. Да еще и с разными частотами! Просто сказка для строителей программаторов. На практике первые два-три варианта мало применимы, а вот последний можно удачно использовать в программаторе. Только позвольте отговорить вас от идеи сделать из этого внешний так для МК — при переходе компа в спящий режим этот тактовый сигнал так-же отрубится. Так-же следует помнить, что тактовый сигнал FT232 всегда будет не больше 3.2 Вольт.

CBitBangI/O — Превращает ножку CBUS в GPIO, управляемый с компа. Работает только на CBUS0..3 по причине того, что разработчики засунули направление линий (вход/выход) и уровень (высокий/низкий) в один байт. Это первый вариант реализации bit bang. О нем будет следующая статья.

BitBangWRn, BitBangRDn — сигналы записи и чтения для двух других режимов bit bang — Синхронного и Асинхронного. Тоже работает на CBUS0..3

Вот такая компания.
Возникает резонный вопрос — как все это настраивать? Для этого есть утилита FT_prog, которая умеет прошивать EEPROM память FTшки. Выглядит она вот так:

ft_prog_1.PNG

При запуске тут-же нажимаем на кнопку «Scan and Parse» (c лупой) или F5 и получаем список подключенных FTDI устройств.
У меня подключен только один модуль. Пробежимся по его настройкам:

Chip Details -> Type Здесь у нас название чипа. Менять ничего нельзя. Идем дальше.

USB Device Descriptor — тут PID (Product ID), VID (Vendor ID). Их можно изменять. Но для домашних разработок это все-равно никакого значения не имеет.

USB Config Descriptor — тут уже больше вкусных настроек:
Bus powered \ Self Powered — режим питания устройства (сомостоятельно или от шины USB).

Max Bus Power — максимальный ток, который наше устройство собирается кушать от линии USB. Что характерно, превышение тока не наказуемо. При заявленом значении в 10мА моё устройство съедало все 120мА а хрюша даже «еггог» не сказала. Но все-же нарушать не стоит.

USB remote Wake Up — Если этот режим активирован, то дерганье вниз ноги RI выводит комп из спящего режима. Но работает только на FT245. Fail.

Pull down I/O Pins in USB Suspend — если включено, то при переходе в спящий режим, выводы UART должны подтягиваться к земле с целью уменьщения потребления. У меня так и не заработало. Наверно чип такой попался :(

USB String Descriptor — тут можно написать название производителя, описание устройства и задать параметры генерации серийника. Вот тут есть один прикол — по умолчанию FT Prog генерит новый серийник при каждой прошивке. Видна, соответственно думает что это новое устройство и назначает ему другой виртуальный COM порт. Так, через несколько итераций номер порта сдвинется непойми-куда, поэтому генерацию серийника я запретил.

Последний пунт — Hardware Specific. Там описаны настройки железа.
High Current IO — позволяет пинам двигать большей нагрузкой. 12мА, против 4мА в обычном режиме. Но это отрицательно сказывается на энергопотреблении.
Load D2XX Driver — если поставить галочку, то загрузка D2XX драйвера будет предпочтительнее, чем обычного драйвера VCP (Virtual Com Port). На практике, никаких изменений я не заметил — виртуальный COM порт по прежнему доступен сразу при подключении устройства.
Use External Oscillator — переключиться на внешний кварц. ВНИМАНИЕ! Если включить этот режим без внешнего кварца, труп FT232 станет неплохой возможностью поиметь с NXP халяву, но не более того (Кто не в теме — НХП раздает демоплаты за фото/видео зверской расправы над МК. Мертвая FT232 вполне сойдет за какой-нибудь МК… :) ).

Invert RS-232 Signals — инверсия любой из 8 линий COM порта. В некоторых случаях позволяет избавится от лишней микросхемы-инвертора.

IO Control — те самые дополнительные возможности, список которых приводился выше.

После того, как конфигурация будет настроена — тыкаем кнопку с молнией или нажимаем Ctrl+P. Нам показывают краткое описание настроек.
ft_prog_2.PNG
Нажимаем program, дожидаемся завершения операции (надпись ready в левом нижнем углу основного окна) и передергиваем FT232 — новые настройки вступают в силу только после сброса.

Вторая часть будет про реализацию CBUS-битбанга в delphi.

Useful appnotes:

AN100 — Подлючение внешнего кварца.
AN119 — Установка дров под Вин7 (сам не читал, но может кому пригодится)
AN124 — руководство по FT Prog
AN146 — общие правила разработки устройств с FTDI


Useful software:

FT Prog — программа для настройки FTDI чипов.
USB View — показывает подключенные USb устройства. Тоже самое но для linux.

  • +4
  • 21 мая 2011, 21:48
  • dcoder

Комментарии (22)

RSS свернуть / развернуть
Ждем ждем :)
0
LabView? Не общаю, что будет что-то эпичное, но пару простых примеров сделаю :)
0
Ну я про LV даже не заикался, но было бы тоже очень неплохо.
0
Так я так и не понял, чего нового Вы сказали то? Все это и так было известоно! Не примите за придирку но не ACE!)
0
Цеж только часть первая. Еще будет вторая и далее.
0
Немного оффтоп, но ни у кого не было такой фигни — при питании ft232rl от внутреннего LDO на 3.3В винда пишет «usb устройство не опознано»? хотя на 5В все ок.
0
Если ты про подключене 3.3 к VCCIO, то не было. Все отлично работало. Посмотри, может у тебя что-то нагружает 3.3V сильно — оттуда больше 50мА брать нельзя.

А если ты про питание всей микросхемы от 3.3, то тут надо ставить внешний кварц. Об этом в ДШ написано — минимальное напряжение, при котором работает внутренний — 4V.
0
50мА негусто… хотя у меня вообще нагрузки не было. И да, имеется ввиду питание внутренней логики. В любом случае, есть повод спаять преобразователь на CP2102 =)
0
А линии, которые настроены на выход не замыкают ни с чем?

Я на 3.3 Вольтах её гонял не во всех режимах, но простая передача по UART работает отлично.

У 2102 выводы USB разведены гениально :)
0
Да прозванивал все, должны быть ок.
Я правда по запарке сначала 5-контактный юсб-мини разъем запаял неправильно, потом исправил, но ID контакт висит на земле (снимать неохота было уже).
Да, перекрестить D+ и D- это сильно.
0
В статье сказано, что на пин PWREN желательно повесить p-канальный полевик для управления питанием. А конкретно какую модель полевика лучше взять?
0
Такой, чтобы у FT232 хватило напряжения для его открытия, и он протащит ток всей схемы. Юзайте параметрический поиск на сайте производителя.
0
А можно конкретную модель?
0
IRLML9301 например. стоит рублей 5.
0
Спасибо
0
Интересно вот что узнать. Как эта штука определяет «спящий режим»?
Может кто, у кого она есть, проверить? Мне нужно включать усилитель после того, как включится комп, и выключать его до того, как тот выключится. (Ну на перспективу можно будет запланировать и другое управление, так как всё равно интерфейс уже будет, — громкость там, переключение каналов или ещё что-то.) Подойдёт ли для этих целей она, или городить что-то иное нужно?
0
В итоге сам себе отвечу, так как появилась платка с ft232. Для описанных мною выше целей — отлично подходит выход «CBUS4». Единственное — нужно учесть, что при включении системы происходит «мигание» — этот выход несколько раз переключается. Думаю — логично будет параллельно «мьютить» усилитель. Или только «мьютить».
0
+1
Поставил в избранное.

Так сказать: не отходя от пивной, вкурил букварь(получил digest и Одминское «что где нажать») по популярному чипу FT232. сЪэкономилЪ массу нервных клеток и времени на будущее(гуглить/тупить в даташиты и аппноты).

P.S. Все-таки я был не совсем прав — много чего можно получить при капитализме «нахаляву»/бесплатно/без затрат «энергии» B)
0
Как сделать что бы когда ОС прогрузиться FT232 подключилась, а то приходиться дергать ее.
0
По идее сама должна найтись, какая у вас ОСь?
0
Было проверенно на Linux и Windows
0
У меня под вынь7 х64 сама опознаётся при перезагрузках, специально ничего для этого не делал, просто работает и всё. Хотя она через 2 хаба подключается, может быть, с этим связано.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.