Usb to ttl (serial) adapters

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

  1. Hobby Components HCMODU0051 ()

  2. More details of the «breakout board» can be found ()

  3. Supplied by phenoptix ()

  4. More details of the LCD/Serial board can be found here ()

  5. Even with VCC linked to 3V3 pin ()

  6. Amazon link: http://www.amazon.co.uk/dp/B00HSXDGOE/ref=pe_385721_37986871_TE_item ()

  7. via a Nwazet Key Lime Pi GPIO adapter ()

  8. Amazon link: http://www.amazon.co.uk/gp/product/B00JGP1N10/ref=oh_details_o02_s00_i00?ie=UTF8&psc=1 ()

  9. Amazon link: http://www.amazon.co.uk/gp/product/B00DEWBB4K/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1 ()

  10. via this adapter (Gnd, Rx & Tx connections only) ()

  11. via this adapter (5V, Gnd, Rx & Tx connected) ()

  12. 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
Power?

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

Configuration of Serial Terminal Input within Raspbian Jessie + Pixel post-release of the Raspberry Pi Model P3B