Linux USB HOST EXTERNAL VIRTUAL COM PORT

目录

目录

前言

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 HOST CDC ACM内核配置](#USB HOST CDC ACM内核配置)

验证测试的参考

总结


前言

USB虚拟串口(简称VCP,Virtual COM Port的缩写),它是利用USB的CDC(Communication Device Class)类来实现的一种通信接口,在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口。

在系统内部,USB控制器提供了一个批量传输IN端口和一个批量传输的OUT端点,用于数据的接收和发送,模拟串口的RX和TX线。另外USB控制器还提供中断IN端点,发送当前串口的状态,实现对串口传输的控制。

串口设备的数据,由系统的串口采集,在芯片内完成USB包的封装,通过USB总线上传到主机,再由相应的串口应用程序进行处理。对于用户来说,看到的是基于串口的数据采集和传输,而实际上实现的是基于USB协议包的数据传输。

在这里主要实现的是串口通信主机的功能,使用的是USB HOST CDC ACM(Abstract Control Model)驱动来实现。


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 HOST CDC ACM内核配置

bash 复制代码
CONFIG_USB_ACM=y

验证测试的参考

  1. 使用两个主控设备,例如使用两个开发板,其中一个配置成USB HOST CDC ACM,另外一个配置成USB Gadget CDC ACM(配置成工厂测试模式)。

  2. 把USB Gadget CDC ACM的主控设备通过USB线接到USB HOST CDC ACM的主控设备上,此时查看USB HOST CDC ACM的主控设备是否产生`/dev/ttyACM*`的设备节点,例如:

bash 复制代码
# find / -name "*ACM*"
  /dev/ttyACM0
  /sys/devices/platform/xxxxxxxx.usb1/xxx_hdc.1/usb2/2-1/2-1.2/2-1.2:1.0/tty/ttyACM0
  /sys/class/tty/ttyACM0
  1. USB HOST CDC ACM的主控设备向USB Gadget CDC ACM的主控设备发起请求,例如:
bash 复制代码
# echo "date set 2024-11-22 15:10:50" > /dev/ttyACM0
# date set ok
  1. 观察USB Gadget CDC ACM的主控设备的日期时间是否被修改。

总结

USB虚拟串口HOST CDC ACM的作用,简单来说,就是‌让USB设备在主机上模拟出传统串口,实现高速、即插即用的串行通信‌。它属于USB通信设备类(CDC)的一个子类,通过抽象控制模型(ACM)在操作系统中创建虚拟串口,支持跨平台数据传输。

  • 核心作用
  1. 虚拟串口模拟‌:将USB设备映射为系统识别的串行端口(如/dev/ttyACM*),兼容传统串口应用。
  2. 高速数据传输‌:理论速率可达12Mbps,远超传统串口(如RS-232的115.2Kbps)。
  3. 即插即用‌:主流操作系统(Windows 7+、Linux和macOS)原生支持,无需额外驱动。
  4. 控制信号支持‌:管理RTS/CTS、DTR/DSR等硬件流控信号。
  • 技术实现
  1. 接口分离‌:通过控制接口(端点0)管理设备状态,数据接口(端点1/2)传输数据,支持双向通信。
  2. 跨平台兼容‌:遵循USB-IF标准,可在嵌入式系统、物联网设备等场景灵活应用。
  • 典型应用
  1. 嵌入式开发‌:如ARM板卡通过USB Gadget框架实现CDC ACM。
  2. 工业通信‌:替代传统串口,提升设备间通信效率。

总之,CDC ACM通过标准化和高效性,可成为现代串行通信的重要解决方案之一。

相关推荐
Lueeee.3 小时前
v4l2驱动开发
数据结构·驱动开发·b树
宴之敖者、3 小时前
Linux——权限
linux·运维·服务器
刘叨叨趣味运维3 小时前
Linux性能排查实战:从“系统慢”到精准定位
linux
欣然~4 小时前
法律案例 PDF 批量转 TXT 工具代码
linux·前端·python
阮松云5 小时前
a start job is running for Builds and install new kernel modules through DKMS
linux·centos
Maggie_ssss_supp5 小时前
Linux-MySQL权限管理
linux·运维·mysql
石像鬼₧魂石5 小时前
Kali Linux 内网渗透:深度工程实施手册
linux·运维·服务器
LXY_BUAA6 小时前
《source insight》添加对.s文件的支持
linux
fai厅的秃头姐!7 小时前
01-python基础-day02Linux基础
linux
好评1247 小时前
git常见操作及问题
linux·git