1. Что такое TTL и при чём тут USB ?
Как-то на «Али» привлёк моё внимание очень недорогой конвертер USB-UART. Сначала я был не вполне уверен, что это за штука на самом деле
Название товара на английском выглядело так: «USB to TTL converter UART module CH340G CH340 3.3V 5V switch». Упоминание UART и микросхемы CH340G, вроде, рассеивало сомнения, но не нравилась фраза «USB to TTL», которая была видна также и на фотографии модуля, на его нижней стороне. Дело в том, что эта фраза не имеет смысла, а значит, открывает широкий простор для вольного толкования.
По идее в переводе на русский язык фраза «USB to TTL» должна означать «преобразование USB в TTL». Объяснять, что такое USB, сейчас никому не надо, а вот про TTL слышали не многие. Поэтому давайте обратимся к истории, и посмотрим, что такое TTL.
Интересно, что и Гугл и Яндекс на запрос «Что такое TTL» выдали ссылки про TTL из совсем другой области. Так что же это такое, применительно к электронике? Аббревиатура TTL на русском языке не отличается от англоязычного варианта и расшифровывается, как транзисторно-транзисторная логика (ТТЛ). Изначально это понятие подразумевало особенности внутреннего строения некоторых цифровых микросхем, совокупность технических решений, включая схемотехнические и технологические. Кроме всего прочего, стандарт ТТЛ задавал и способ кодирования логических сигналов. Так, например, логический ноль кодировался напряжением, близким общему проводу питания. Причём общий провод подключался к минусу источника питания и принимался за нулевой потенциал — «земля». А логическая единица кодировалась напряжением, близким напряжению питания +5В. Само напряжение питания +5В тоже стало неотъемлемой частью стандарта ТТЛ.
Надо отметить, что микросхемы ТТЛ в своё время получили очень широкое распространение. В Советском Союзе, пожалуй, наиболее известной была серия К155. Широкое применение этих и им подобных микросхем заставило разработчиков аппаратуры в целях совместимости придерживаться тех же способов кодирования сигналов логического нуля и логической единицы, которые предусматривались стандартом ТТЛ.
Но ничего не стоит на месте. Микросхемы ТТЛ, построенные на биполярных транзисторах, вскоре стали устаревать. Они сильно проигрывали более современным микросхемам как по быстродействию, так и по потреблению энергии. Им на замену стали приходить другие семейства микросхем, основанные на МДП-структурах (металл-диэлектрик-полупроводник), а по-простому — на полевых транзисторах. Но стандарт кодирования сигналов устаревать не собирался, поэтому многие новые микросхемы, даже не имея прямого отношения к ТТЛ, сохраняли совместимость с ТТЛ. Сами же микросхемы ТТЛ постепенно стали частью истории (хотя в любительских конструкциях применяются по сей день), а их общее название — аббревиатура ТТЛ — обрело несколько иной смысл. Теперь ТТЛ следует толковать как «стандарт уровней напряжения для кодирования логических нуля и единицы, применявшийся в микросхемах ТТЛ».
И что же, с учётом вышесказанного, могут означать слова «USB to TTL»? Думаю, теперь понятно, почему эта фраза не имеет смысла.
3. Доработка модуля UART до полноценного RS232TTL
Вывод | Назначение |
---|---|
2 | выход TXD |
3 | вход RXD |
9 | вход CTS |
10 | вход DSR |
11 | вход RI |
12 | вход DCD |
13 | выход DTR |
14 | выход RTS |
Таб. 1. Нумерация выводовмикросхемы CH340Gс сигналами RS232
В общем-то, вся доработка заключалась только в том, чтобы подпаяться к соответствующим ножкам микросхемы. Для этого предварительно потребовалось прорезать окно в термоусадочной оболочке. Соответствие выводов микросхемы CH340G и сигналов RS232 смотрите в таблице Таб.1.
Как видно из таблицы, все сигналы, кроме TXD и RXD находятся на одной стороне микросхемы, но TXD и RXD уже выведены на разъём, поэтому паять дополнительные провода потребовалось лишь с одной стороны.
USB Console Stub
lsusb and lsusb -t
pi@raspiP4B4b-32GbP:~ $ lsusb Bus 002 Device 002: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9 G2 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 005: ID 04d9:1503 Holtek Semiconductor, Inc. Keyboard Bus 001 Device 004: ID 25a7:fa61 Bus 001 Device 003: ID 1a40:0101 Terminus Technology Inc. Hub Bus 001 Device 006: ID 3171:0035 Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub pi@raspiP4B4b-32GbP:~ $ lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 3: Dev 6, If 0, Class=Communications, Driver=cdc_acm, 12M |__ Port 3: Dev 6, If 1, Class=CDC Data, Driver=cdc_acm, 12M |__ Port 3: Dev 6, If 2, Class=Human Interface Device, Driver=, 12M |__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 3: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 5, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M |__ Port 1: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
Extract from usb-devices
T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=01 Dev#= 6 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 8 #Cfgs= 1 P: Vendor=3171 ProdID=0035 Rev=01.10 S: Manufacturer=8086 Consultancy S: Product=USB Serial Stub S: SerialNumber=0126 C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=100mA I: If#=0x0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=01 Driver=cdc_acm I: If#=0x1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm I: If#=0x2 Alt= 0 #EPs= 0 Cls=03(HID ) Sub=00 Prot=00 Driver=(none)
pi@raspiP4B4b-32GbP:~ $ cat .gtktermrc port = /dev/ttyS0 speed = 9600 bits = 8 stopbits = 1 parity = none flow = none wait_delay = 0 wait_char = 255 rs485_rts_time_before_tx = 30 rs485_rts_time_after_tx = 30 echo = False crlfauto = False font = "Monospace 12" term_block_cursor = True term_rows = 80 term_columns = 25 term_scrollback = 200 term_visual_bell = True term_foreground_red = 0.660000 term_foreground_blue = 0.660000 term_foreground_green = 0.660000 term_foreground_alpha = 1.000000 term_background_red = 0.000000 term_background_blue = 0.000000 term_background_green = 0.000000 term_background_alpha = 1.000000 port = /dev/ttyACM0 speed = 115200 bits = 8 stopbits = 1 parity = none flow = none wait_delay = 0 wait_char = 255 rs485_rts_time_before_tx = 30 rs485_rts_time_after_tx = 30 echo = False crlfauto = False font = "Monospace 12" term_block_cursor = True term_rows = 80 term_columns = 25 term_scrollback = 200 term_visual_bell = True term_foreground_red = 0.660000 term_foreground_blue = 0.660000 term_foreground_green = 0.660000 term_foreground_alpha = 1.000000 term_background_red = 0.000000 term_background_blue = 0.000000 term_background_green = 0.000000 term_background_alpha = 1.000000
Similarily for Raspberry Pi OS («Buster») for the P4B onwards
-
Hobby Components HCMODU0051 ()
-
More details of the «breakout board» can be found ()
-
Supplied by phenoptix ()
-
More details of the LCD/Serial board can be found here ()
-
Even with VCC linked to 3V3 pin ()
-
Amazon link: http://www.amazon.co.uk/dp/B00HSXDGOE/ref=pe_385721_37986871_TE_item ()
-
via a Nwazet Key Lime Pi GPIO adapter ()
-
Amazon link: http://www.amazon.co.uk/gp/product/B00JGP1N10/ref=oh_details_o02_s00_i00?ie=UTF8&psc=1 ()
-
Amazon link: http://www.amazon.co.uk/gp/product/B00DEWBB4K/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1 ()
-
via this adapter (Gnd, Rx & Tx connections only) ()
-
via this adapter (5V, Gnd, Rx & Tx connected) ()
-
4-wire direct Pi connection possible ( )
2. Конвертер интерфейса на микросхеме CH340G
Данное изделие я в итоге заказал. Обошлось оно мне с пересылкой в 44,30 руб., то есть почти даром. Но это не тот случай, когда дёшево — значит плохо. При подключении он сразу определился в системе (Windows 8.1). Никаких проблем с драйверами не возникло. Ранее я уже подключал другой конвертер на CH340 (тот в виде шнура-переходника USB-COM), поэтому драйвер уже стоял. Надо сказать, что и в прошлый раз не было нужды искать драйвер и ставить его вручную — всё получилось в автоматическом режиме. Теперь же ранее установленный драйвер сразу признал новое устройство.
Добавлю, что модуль имеет три светодиода (все красные), один из которых сигнализирует о подаче питающего напряжения от USB, а два других отображают состояние сигналов TXD и RXD (загораясь при логическом нуле, то есть при низком напряжении относительно GND).
Homyl CH340G 3.3V/5V UART Serial Adapter
In and Out of the bags: |
|
Jumpered for Loopback Test & 3.3V Operation |
|
Testing with a Pi Zero |
|
lsusb and lsusb -t
pi@raspiP4B4b-32GbP:~ $ lsusb Bus 002 Device 002: ID 174c:55aa ASMedia Technology Inc. Name: ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 005: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma Ivory Bus 001 Device 004: ID 1ea7:0064 SHARKOON Technologies GmbH Bus 001 Device 006: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter Bus 001 Device 003: ID 1a40:0101 Terminus Technology Inc. Hub Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub pi@raspiP4B4b-32GbP:~ $ lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 3: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 6, If 0, Class=Vendor Specific Class, Driver=ch341, 12M |__ Port 2: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M |__ Port 4: Dev 5, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 4: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
Extract from usb-devices
T: Bus=01 Lev=03 Prnt=03 Port=00 Cnt=01 Dev#= 6 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=ff(vend.) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=1a86 ProdID=7523 Rev=02.64 S: Product=USB Serial C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=98mA I: If#=0x0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=02 Driver=ch341
Summary Table (3.3V Devices Only)
Device |
«Chipset» |
Primary Pinout |
«MxPwr» |
Pi Zero |
CP210x |
+5V GND RXD TXD 3V3 |
100 mA |
||
PL2303 |
+5V GND RXD TXD 3V3 |
100 mA |
||
CP2102 |
+5V GND RXD TXD 3V3 |
mA |
||
CP210x |
GND CTS 5V TXD RXD DTR |
100 mA |
||
CP2102 |
GND RXC TXC 5V RST 3.3 |
100 mA |
||
FT232 |
DTR RX TX VCC CTS GND |
90 mA |
||
FT232 |
GND CTS VCC TX RX DTR |
90 mA |
||
PL2303 |
GND TXD RXD VCC 3V3 |
100 mA |
||
(5V/NC) (5V/NC) GND TXD RXD |
100 mA |
|||
CH340G |
(RTS) 5V 3V3 TXD RXD GND (CTS) |
98 mA |