ZYNQ linux上使用 USB CDC ACM

ZYNQ linux上使用 USB CDC ACM

    正在检查是否收录...
一言准备中...

一、USB CDC ACM介绍

USB CDC ACM 是 USB 通信设备类(CDC)中的一个子类,它提供了一种通过 USB 接口实现虚拟串行通信的标准方法。

1. 基本概念

CDC ACM 是 USB 规范中定义的一种设备类协议,它模拟传统的串行端口通信,提供双向数据传输通道,支持控制信号(如 RTS/CTS、DTR/DSR 等,是 USB 转串口设备的常用实现方式。

2. 主要特点

标准化:遵循 USB-IF 定义的 CDC 规范

兼容性:大多数操作系统内置驱动支持

灵活性:可以在不同硬件平台上实现

多功能:支持数据和控制通道分离

3. 技术架构

CDC ACM 包含两个主要接口:

3.1 通信接口(Communication Interface)

管理设备控制和状态

包含中断端点(Interrupt Endpoint)

处理线路编码、控制信号等

3.2 数据接口(Data Interface)

处理实际数据传输

包含批量输入和输出端点(Bulk In/Out Endpoints)

实现数据流传输

二、 Linux-USB Gadget驱动框架

在ZYNQ等ARM板卡上移植好linux内核后,就可以通过linux USB Gadget驱动框架实现USB CDC类。

USB Gadget 框架是 Linux 内核中实现 USB 设备功能的子系统,它允许嵌入式设备作为 USB 从设备(Peripheral)与主机通信。

在 ZYNQ 7000系列SOC上,存在两个USB2.0接口,支持USB HOST和USB OTG。

笔者板卡(正点原子 ZYNQ7035)上的 USB HOST 接口与 USB OTG 接口(也称 USB Slave 接口)共用了YNQ PS 端的 USB0 接口,所以在正常情况下,USB HOST 和 USB OTG 不能同时工作,所

以在 Z100 底板上有一组跳线帽端子 J15 用于控制 USB HOST 和 USB OTG 哪个接口工作。

对于USB OTG 接口工作:

需要通过两个跳线帽将 J15 端子的 DN 与 SN 相连、DP 与 SP 相连,注意先连接 DN 与SN。

三、vivado工程配置

在block design中,添加ZYNQ7 PS后使能USB0接口,并选择对应的MIO接口:
image
image
设置完成后,重新生成xsa文件。

四、设备树配置

在vivado中使能USB0配置后,在PCW.dtsi设备树文件中关于usb0的节点status 属性就被设置为"okay"了,

image

所以由此可以知道,其实 pcw.dtsi 文件中已经使能了 usb0,但是目前还是不能使用 usb0的,还需要为 usb0 节点添加一下属性内容,打开 arch/arm/boot/dts/system-user.dtsi 设备树文件,

添加相关内容。首先需要在 system-user.dtsi 设备树根节点下添加一个 usb_phy0 节点,用于描述 USB phy相关信息,如下所示:

image

其中,dr_mode可以是OTG,也可以为peripheral

system-user.dtsi 设备树文件修改完成之后,保存退出!然后在内核源码根文件目录下执行下面这条命令编译设备树文件:

make dtbs

将编译得到的 system-top.dtb 文件重命名为 system.dtb,将 system.dtb 文件拷贝到开发板SD 启动卡的第一个分区,替换掉就的设备树文件。

五、内核配置

USB 的HOST在linux内核中是默认配置的,但是CDC是没有默认开启的,因此需要配置内核相关配置。

在内核源码根文件夹下执行:

make menuconfig
配置路径为:
Device Drivers --->
[] USB support --->
<
> USB Gadget Support --->
<*> USB Gadget precomposed configurations --->
勾选以下配置:
20250807-145703

20250807-145717

配置好后, save 并退出,重新编译下内核:

make -j8
编译成功后会在arch/arm/boot下生成zImage内核镜像,将该文件拷贝至U盘的vfat分区(boot)。

同时会生成相关驱动,目录如下:
image
将以下驱动拷贝至vfat分区目录下:

g_serial.ko, libcomposite.ko, usb_f_acm.ko, usb_f_obex.ko, usb_f_serial.ko, u_serial.ko.

并启动Linux,按顺序加载前面生成的驱动模块:出现以下信息代表驱动挂载成功了:

image

此时打开设备文件发现多了/dev/ttyGS0设备,这个就是虚拟的串口设备。
image

六、读写测试

将板卡上的usb slave接口链接电脑,这时候在windows的设备管理器中发现这个USB设备:
image

6.1 终端写

在电脑上通过串口工具(如xcom)打开该设备,并在ZYNQ终端中输入发送测试命令:
echo hello,this is usb cdc acm device > /dev/ttyGS0`

在串口工具成功接收到该信息:
image

6.2 终端读

在ZYNQ终端通过cat监听该USB的接收信息,在串口工具,发送任意字符,并勾选发送新行(这里笔者猜测是终端的内核缓冲区机制,\n会让内核接收的信息刷新出来)。否则可能不会在终端打印出来
image

  • 本文作者:WAP站长网
  • 本文链接: https://wapzz.net/post-27329.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.7W+
9
1
2
WAP站长官方

软件性能测试工具的发展以及不同性能测试工具之间的使用对比总结

上一篇

ydswin

下一篇
评论区
内容为空

这一切,似未曾拥有

  • 复制图片
按住ctrl可打开默认菜单