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通过标准化和高效性,可成为现代串行通信的重要解决方案之一。

相关推荐
没有啥的昵称2 小时前
linux下用QLibrary载入动态库
linux·qt
飞Link2 小时前
【CentOS】Linux(CentOS7)安装教程
linux·运维·服务器·centos
知识分享小能手2 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04中的过滤器知识点详解(13)
linux·学习·ubuntu
牛奔2 小时前
Linux 的日志分析命令
linux·运维·服务器·python·excel
飞Link2 小时前
【Linux】Linux(CentOS7)配置SSH免密登录
linux·运维·服务器
飞Link2 小时前
【Java】Linux(CentOS7)下安装JDK8(Java)教程
java·linux·运维·服务器
努力的小帅3 小时前
Linux_进程信号(Linux入门到精通)
linux·信号处理·信号捕捉·进程控制·linux入门
秋4273 小时前
ansible剧本
linux·服务器·ansible
oMcLin3 小时前
Linux系统的香港服务器性能调优指南:从 CPU、内存到 I/O
linux·运维·服务器