USB HID интерфейс для STM32 в STM32IDE
Ряд микроконтроллеров STM32 имеют на борту USB интерфейс для связи с компьютерами. Как правило, удобнее всего использовать предоставляемый компаний ST Microelectronics драйвер класса CDC (Communication Device Class ). Он позволяет использовать на стороне компьютера UART через USB и не требует установки драйверов. Со стороны STM32 при этом требуется только поменять операции вывода данных, остальное делается самостоятельно. Причём скорость такого соединения может быть практически любой, поддерживаемой компьютером.
Однако ряд разработок, особенно, когда приходишь в другую компанию, где используется HID Class (Human Interface Device), в случае разработки новой версии устройства требуется поддерживать ранее выбранный интерфейс. Что, собственно, и случилось. Примеры проектов от самой ST, которые они дают при загрузке STM32 Cube MX и IDE, как обычно, дали только минимальное понимание, но не раскрыли, что и как надо делать. Я когда-то разбирался с USB, даже писал собственный драйвер, но это было так давно… Остались только общие воспоминания. Посему пришлось искать дополнительную информацию, чтобы получить стартовую точку.
Первое найденное было видеороликом на youtube в стиле HID за 5 минут 🙂 Автор даёт доступ к своему коду на GitHub. Всё, типа круто, красиво, просто вставляйте к себе и всё будет чудесно. Судя по отзывам под роликом, некоторым этого хватило. Изучив исходники понял, что минимального прозрения не наступило, да и уровень полученной информации мал для того, чтобы решить поставленную задачу. Но закомство с этим материалом было явно полезным. Решение вопроса с использованием кубика (STM32Cube MX) мне лично импонирует больше, чем другие подходы, поскольку позволяет отвлечься от ряда низкоуровневых операций и генерация проекта всегда происходит в одном стиле. Соответственно, изучение этого примера показало, на какие файлы надо обратить внимание, где и что надо поменять или добавить, какие функции использовать для получения и отправки данных именно для нашей выбранной среды программирования.
Следующий поиск оказался весьма удачным. Хабр — известный сайт, на котором можно найти много полезного по разной электронной тематике. Нашлась там и статья STM32 и USB-HID — это просто. Я не являюсь постоянным клиентом Хабра и не знаю автора этой статьи RaJa, но на мой взгляд это очень хорошая статья, описывающая основные положения работы HID интерфейся. Без её прочтения читать дальше здесь бессмысленно, поскольку далее будут, в основном, комментарии для адаптации кода к среде разработки STM32IDE/STM32CubeMX + Atollic TrueStudio. (Далее STM32IDE). Да и столь популярный в 2014 году и реально очень неплохой проект EmBlocks, увы, умер.
Первое, что необходимо решить — как тестировать вновь создаваемое устройство. Лет… дцать назад я использовал для этого анализатор и синтезатор трафика USB — очень полезные, но дорогие игрушки 🙂 Сейчас у меня такой возможности нет, да и должен же быть более простой путь. Тем более для простого стандартного интерфейса без написания собственного драйвера. Авторы обоих рассмотренных выше проектов пошли самы простым для них путём — написание простой программы на известных им языках. Но автор статьи на Хабре сделал очень правильный шаг — он написал свой проект, совместимый с программой ST HID Demonstrator (ссылка есть в статье), позволяющей поуправлять нашим устройством, как графически, так и послать свои данные и посмотреть, что пришло от нашего устройства. Фактически программа может использоваться и в дальнейшем для отладки будущей программы на выбранном микроконтроллере.
Своё ознакомление с проектом для HID я осуществлял с платой STM32L476 Discovery. Плата, вообще говоря, может быть любой, где USB интерфейс микроконтроллера физически подключён к отдельному разъёму USB. Есть у меня и Nucleo 32 с STM32L4, но там один разъём USB тспользуется и для программирования/отладки, и для связи с хостом, что добавляет интриги в интерфейс и может служить источником дополнительных непоняток. Оно нам надо?
Итак, комментарии и дополнения к статье по привязке HID к STM32IDE примерно по тем же шагам, как и в хабровской статье.
Структура проекта
В STM32IDE структура всех проектов задаётся при генерации проекта из среды назначения функциональности пинов и пользователю о том заботиться не надо. В частности, в кубике (что отдельном STM32Cube MX, что в встроенном в STM32IDE) активируем USB, как Device, и добавляем Middleware USB Custom HID.
Рис.1 Выбор USB интерфейса
Рис.2 Выбор и первичная настройка Middleware Надо заметить, что несмотря на установку размера буфера в 64 байта, эта величина не вносится по #define. Видимо баг текущей версии кубика. Далее покажем, где надо пофиксить. Указанный резмер дескриптора равный 79 — это значение для данного конретного стартового проекта
Заходим в Clock Configuration. Вполне вероятно, что могут быть проблемы с системными частотами, которые маркируются малиновым цветом.
Рис. 3 Возможные проблемы по установке частот
Если так, нажимаем Resolve Clock Issues и, скорее всего, всё будет настроено на максимальные частоты. Главное — USB Clock будет выставлен на 48 МГц. Надо заметить, что в семействе STM32L4 генератор на 48МГц имеет автоподстройку по SOF (Start Of Frame), что позволяет создавать USB устройства без внешнего кварца/генератора. Если, конечно, остальной дизайн допускает использование некварцованных генераторов. Для других семейств не проверял, поскольку для моего текущего проекта был выбран именно L4. Только надо отметить, что при использовании USB есть некоторая минимальная частота работы микроконтроллера. Я делал прикидку для другого проекта, где надо общаться с хостом и при этом потреблять минимум тока. Задачи простые, не требуют большой скорости и я хотел запустить МК на 8МГц. Оказалось, что меньше 14МГц при подключении USB ставить не могу, RCC не позволяет. Пришлось остановиться на следующем круглом значении 16МГц.
Собственно, настройка аппаратной части USB и выбор файлов, отвечающих за базовую функциональность этого интерфейса на на этом закончены. Вся остальная периферия, находящаяся на выбранной плате настраивается автоматически при её выборе на старте проекта. Сохраняем, генерим проект и переходим к «программированию» в сравнении с описанным на Хабре проектом.
Это страшное слово Descriptor
Стандартные массивы данных для передачи информации хосту, с чем он будет иметь дело. Для интереса можно посмотреть дескрипторы устройства и конфигурации. Сейчас их можно оставить такими, как получились, но в дальнейшем они наверняка потребуют редактирования. Впрочем, не исключено, что они будут генериться по тем параметрам, что ставятся в кубике. Что не может не радовать. А вот Report Descriptor стоит изучить получше — это фактически основное, что придётся в дальнейшем править ручками. Не знаю, откуда RaJa взял его дескрипторы, в нашём случае они генерируются кубиком и располагаются в следующих файлах проекта:
Дескриптор от Raja | Дескриптор от ST | Файл в проекте |
RHID_DeviceDescriptor | USBD_FS_DeviceDesc | usbd_desc.c |
RHID_ConfigDescriptor | USBD_CUSTOM_HID_CfgFSDesc | usbd_customhid.c |
RHID_ReportDescriptor | CUSTOM_HID_ReportDesc_FS | usbd_custom_hid_if.c |
Поскольку для простоты сейчас будем работать только с ST HID Demonstrator, то не мудрствуя лукаво я просто скопировал содержимое RHID_ReportDescriptor в соответствующее место моего проекта. Только подставил свои константы на место длины. Надо отметить, что надо точно посчитать количество байтов в этом дескрипторе (в этом проекте 79) и убедиться, что именно это значение стоит в Class Parameters. Не больше и не меньше. Иначе хост не опознает подключённое устройство. Проверено 🙂
Далее заходим в файл usbd_customhid.h и меняем значения CUSTOM_HID_EPIN_SIZE и CUSTOM_HID_EPOUT_SIZE на 0x40U. Честно говоря, немного напрягает то, что ST не даёт альтернатив смене значения по умолчанию 2 на другое значение и далее в коде с использованием этих констант стоит комментарий, что не более 2х байт. Но, с другой стороны, это было рекомендовано в первом найденном описании и, вообще говоря, установка такого значения выглядит достаточно логично. Иначе в чём отличие CustomHID от обычного? Проблема в том, что при регенерации проекта из кубика, что на этапе первичного кода происходит довольно часто, это значение не сохраняется и его надо восстанавливать ручками. Для этого я себе в main вывел строку warning, чтобы не забывать проверить эти константы. Возможно я ошибаюсь, и в дальнейшем всё окажется проще. Но в такой конфигурации работает 🙂
Цикл обмена (пишем/читаем)
Для выдачи данных на хост всё достаточно аналогично описанию на Хабре. Только название функции другое: USBD_CUSTOM_HID_SendReport(). Все остальные реомендации из той статьи подходят по полной программе.
А вот чтение здесь интереснее, чем на Хабре. И на самом деле несколько проще. Обработка принятого массива происходит в usbd_custom_hid_if.c / static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state).
В этом тестовом проекте я не заморачивался с обработкой входных параметров и следуя своей обычной практике минимальности времени обработки прерываний, просто копирую полученные данные в заранее определённый массив и устанавливаю флаг готовности данных от USB
Ну, а собственно «сбор данных» (нажатие кнопок джойстика) и реакция на полученные от хоста данные в этом прото проекте делаю внутри бесконечного цикла в main.c Всё просто 🙂 В этом прото проекте нет разделения реакции на SET_FEATURE и SET_REPORT, с этим надо будет разобраться далее, в реальном проекте. Компилируем, запускаем, подключаем к хосту и там должен появиться новый CustomHID от STMicroelectronics.
Звпускаем на хосте USB HID Demonstrator. На плате, с которой я запускал этот проект, не имеет органов для работы с Variable Inputs/Outputs, поэтому в разделе Graphic customization были убраны соответствующие назначениями, оставлено 5 кнопок и назначены ID, определённые в проекте: 1, 2 для Output report (входные данные для ST) и 4 для Input Report (выход от ST).
Рис. 4 Настройка демонстратора
Моей задачей для этого проекта было управлять парой светодиодов на плате, что стало работать сразу, как эта программа обнаружила подключенную плату, и включать «лампочки» этой платы при нажатии различных кнопок джойстика на плате, а вот здесь сразу не получилось. При указанных настройках все пять лампочек одновременно зажигались при нажатии на центр джойстика. Остальные кнопки не отображались. При этом, если перейти на Input/Otput transfer, то данные были вполне ожидаемы. Т.е. сам интерфейс работает, но отображение в программе на хосте не отвечает моим запросам. Слава богу ST предоставляетс исходники, а в соседнем кубике сидит программист нашей группы, пишущий в том числе и софт для компьютеров. В общем, он подправил одну функцию и сгенерил исполняемую программу. Всё стало работать, как хотелось. Конечно, можно было бы на каждую кнопку создать свой report с уникальным номером, что исходно и предусмотрено. В этом случае было бы достаточно посылать по одному байту для каждой кнопки, но мой проект предусматривает многобайтный отчёт. Исходник подправленной функции и подправленный исполняемый файл можно скачать по ссылке ниже.
На этом, пожалуй, всё. Если у Вас есть такая же плата 32L476GDISCOVERY, то для начала можно просто скачать мой прото проект, адаптированный для него демонстратор и исходник изменённой функции по этой ссылке. Исходный USB HID Demonstrator скачивается с сайта STM, инсталлируется и его исполняемый файл заменяется моим. Импортируете в STM32IDE мой проект, компилируете и должны получить работающую базу для своих проектов. Если у Вас другая плата, то адаптируете «сбор информации» и включение светодиодов под свою плату.
Для дальнейшей работы обязательно прочтите указанную статью RaJa с Хабра. Она даст понимание того, что и как должно быть сделано для других проектов с USB HID интерфейсом. А ещё лучше начать с неё 🙂
И при выборе класса устройства для Вашего проекта надо учитывать следующее: минимальный период опроса HID устройств — 1ms. И если я правильно помню, это скорее пожелание системе от внешнего устройства. В стандартном HID устройстве за один кадр (frame) передаётся только два байта, т.е. скорость обмена не более 2 кбайт/с. В Custom HID на
Full Speed (12 мбит/с) объём данных отчёта (report) — не более 64 байт, т.е. скорость обмена с Вашим HID не более 64 кбайт/с. Для High Speed (480 мбит/с) — максимальный объём данных 512 байт (512 кбайт/с). Не будь у меня ограничения совместимости с предыдущим софтом, используемым в компании, использовал хотя бы CDC.
У меня изучение статей и адаптация под мои хотелки заняло три дня. Описание заняло больше 🙂 Надеюсь, что у тех, кто воспользуется этой статьёй, аналогичный процесс займёт не более одного дня. Комментируйте, спрашивайте. Что смогу — отвечу. Что не смогу, вместе поищем решение.
Источник
Интерфейс usb своими руками
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 понадобятся драйверы, доступные для скачивания на сайте производителя. Поскольку на этих чипах делается достаточно много интерфейсных шнурков для подключения мобильных телефонов к ПК, вполне вероятно, что подойдут драйвера и от них.
Источник