Linux USB HOST 外接USB转串口模块

目录

目录

前言

DTS配置的参考

内核配置的参考

[USB Subsystem内核配置](#USB Subsystem内核配置)

[USB Phy内核配置](#USB Phy内核配置)

[USB Host Core驱动内核配置](#USB Host Core驱动内核配置)

[USB EHCI驱动内核配置](#USB EHCI驱动内核配置)

[芯片平台USB Host Controller驱动内核配置](#芯片平台USB Host Controller驱动内核配置)

USB转串口设备驱动内核配置

验证测试的参考

总结


前言

USB转串口模块的核心功能是作为硬件桥梁,将通用串行总线(USB)接口转换为通用异步收发传输器(UART)或RS-232/RS-485等串行接口,实现现代设备与传统串行设备之间的数据通信。‌12

‌协议转换与数据传输:‌ 该模块内部集成专用芯片(如CP2102N、FT232RL或CH340),负责处理USB与串行协议之间的转换,包括数据包的拆分、重组、波特率同步及错误检测,确保数据在高速USB与低速串行总线间稳定传输;例如,上位机通过USB发送数据包时,模块会将其解析并串行化输出至TXD引脚,接收方向则相反。‌

USB转TTL串口转换模块常用于USB接口转换为TTL(逻辑电平)串口,以便与其它串口设备进行通信。这里主要是指主控外接USB转TTL串口模块后再与UART接口的BLE、Wi-Fi、GSM/GPRS、315MHz/433MHz、GPS等模块通信。


DTS配置的参考

bash 复制代码
/* usb20 host controller */
   usb_1: usb1@YYYYYYYY {
        compatible = "xxx,xxx-usb";
        reg = <0xYYYYYYYY 0xYYY>;
        interrupts = <GIC_SPI INT_USB20_HOST IRQ_TYPE_LEVEL_HIGH>;
 
        clocks = <&ahbX_gate 9>, <&ahbX_reset 9>;
        clock-names = "usb_gate", "usb_reset";
 
        xxx,usbphy = <&usbphy_1>;
 
        dr_mode = "host"; /* 配置成了USB host模式 */
   ...

内核配置的参考

USB Subsystem内核配置

bash 复制代码
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y

USB Phy内核配置

bash 复制代码
CONFIG_USB_PHY=y
CONFIG_USB_NX_PHY=y

USB Host Core驱动内核配置

bash 复制代码
CONFIG_USB_COMMON=y
CONFIG_USB=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_DEFAULT_PERSIST=y

USB EHCI驱动内核配置

bash 复制代码
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
CONFIG_USB_EHCI_HCD_PLATFORM=y

芯片平台USB Host Controller驱动内核配置

bash 复制代码
CONFIG_USB_XXX=y
CONFIG_USB_XXX_HOST=y
CONFIG_USB_XXX_DEBUG=y

USB转串口设备驱动内核配置

bash 复制代码
   CONFIG_USB_SERIAL=y
   CONFIG_USB_SERIAL_GENERIC=y
   CONFIG_USB_SERIAL_CH341=y (用于CH34X芯片的USB转TTL串口模块)
   CONFIG_USB_SERIAL_PL2303=y(用于PL2303X芯片USB转TTL串口模块)

验证测试的参考

  1. 烧录固件后,接入USB转TTL串口模块,正常开机,命令行终端可以输入:dmesg | grep "usb",探测到该USB转TTL串口模块的打印如下:
bash 复制代码
# dmesg | grep "usb"
  ...
  [    0.071219] nx_usb xxxxxxxx.usb0: xxx_hdc_nx_probe done.
  [    0.443378] usb 1-1: new full-speed USB device number 2 using xxx_hdc
  [    0.649005] usb 1-1: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.63
  [    0.649014] usb 1-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
  [    0.649019] usb 1-1: Product: USB2.0-Serial
  [    0.670264] usbcore: registered new interface driver usbserial_generic
  [    0.670331] usbserial: USB Serial support registered for generic
  [    0.670410] usbcore: registered new interface driver ch341
  [    0.670477] usbserial: USB Serial support registered for ch341-uart
  [    0.675144] usb 1-1: ch341-uart converter now attached to ttyUSB0 (从这里可以知道USB转TTL串口模块的设备节点是/dev/ttyUSB0)
  [    0.846868] usbcore: registered new interface driver usbhid
  [    0.846872] usbhid: USB HID core driver
  ...
  1. 列出USB设备列表,查看USB转TTL串口模块的USB设备信息是否存在。例如:
bash 复制代码
# lsusb
  Bus 001 Device 001: ID 1d6b:0002
  Bus 001 Device 002: ID 1a86:7523(这里USB转TTL串口模块的VID是1a86,PID是7523。)
  1. 查看USB设备信息存在后,进行收发数据测试。例如,主控<--->USB转TTL串口模块<--->SIM900A GSM/GPRS模块:
bash 复制代码
# microcom -s 9600 /dev/ttyUSB0
  ATI
  SIM900A R11.0

  OK
  AT
  OK
  AT+CSQ
  +CSQ: 10,0

  OK

总结

USB转串口模块的核心功能是‌将主控的USB接口转换为串行通信接口‌,实现不同设备间的数据交互。它通过协议转换和电平兼容,支持多种串口标准(如TLL、RS232和RS485等)和高速数据传输,广泛应用于嵌入式开发、工业控制、物联网设备调试等领域。而Linux内核原生支持多种USB转串口芯片(如CH340、CP2102、FT232等),能够自动识别并加载驱动,生成如/dev/ttyUSBx的设备文件,实现即插即用,简化了连接过程。‌


相关推荐
wheeldown5 小时前
【Linux】 Linux网络编程入门:Soket编程详解
linux·运维·网络
zfxwasaboy12 小时前
DRM KMS 子系统(4)Planes/Encoder/Connector
linux·c语言
暮色_年华13 小时前
随想 2:对比 linux内核侵入式链表和 STL 非侵入链表
linux·c++·链表
dnncool13 小时前
【Linux】操作系统发展
linux
文言一心13 小时前
LINUX离线升级 Python 至 3.11.9 操作手册
linux·运维·python
自由的好好干活14 小时前
PLX 9x5x PCI 驱动程序执行流程详解(Qoder生成)
驱动开发·ai编程
XRJ040618xrj14 小时前
如何在Linux中根据物理网卡建立虚拟网卡
linux·服务器·网络
码农水水15 小时前
蚂蚁Java面试被问:混沌工程在分布式系统中的应用
java·linux·开发语言·面试·职场和发展·php
晚风吹长发15 小时前
初步了解Linux中的动静态库及其制作和使用
linux·运维·服务器·数据结构·c++·后端·算法