发 帖  
【四旋翼飞行器】76小时吃透四轴算法!史上最强软硬结合实战项目,👉戳此立抢👈

[经验] Zynq UltraScale + MPSoC USB 3.0 CDC器件类设计

2019-1-3 09:59:50  335 Zynq MPSoC USB FPGA
分享
0
Zynq®UltraScale+™MPSoC USB 3.0控制器由两个独立的双角设备(DRD)控制器组成。两者都可以单独配置为在任何给定时间用作主机或设备。USB 3.0 DRD控制器通过高级可扩展接口(AXI)从接口为系统软件提供可扩展主机控制器接口(xHCI)。控制器中存在内部DMA引擎,它利用AXI主接口传输数据。USB协议定义了四种主要的通信类型,基于此可以构建任何所需的应用程序,而无需更改不同应用程序的固件或底层硬件。这些传输类型包括控制传输,批量传输,同步传输和中断传输。Zynq®UltraScale+™MPSoC USB3。本技术提示解释了如何启用所有配置选项,一步一步地在设备模式下使用Zynq®UltraScale+™MPSoC USB 3.0控制器,并使用批量传输类型使用USB 3.0进行串行通信设备抽象。USB组件中的CDC(ACM)类用于数据通信。您通常可以在串行COM或UART通信等应用中使用它。此设计包括:
  • CDC设计示例框图和概述
  • 如何为CDC类参考配置所有Zynq®smatrascale+™MPSoC Linux内核和相关文件
  • 设置为使用Windows以及Linux主机测试CDC功能
履行

实施细节
设计类型
仅PS
SW类型
Zynq®UltraScale+™MPSoC Linux操作系统
CPU的
ARM Cortex A53 Core 0以1.1 GHz运行
PS功能
  • DDR3
  • 高速缓存
  • L1和L2缓存
  • OCM
  • 通用中断控制器
  • USB 3.0控制器
电路板/工具
ZCU102 Rev1.0板,
ZCU102 Rev B / C / D Prod硅板
Xilinx工具版
Xilinx SDK 2018.1,Petalinux 2018.1
其他详情
--


提供的文件
Zynqmp_CDC_design_files_2018_1.zip
有关文件的说明,请参阅附录A.

框图下图中说明的设计显示了如何将Zynq®UltraScale+™MPSoC USB 3.0控制器用作通信类设备。ZCU102板(运行Linux OS)与主机连接。Windows / Linux PC /笔记本电脑USB主控制器用于所有主机功能。
图1:Zynq ultrascale + MPSoC USB 3.0 CDC参考框图



Linux:创建 Zynq®UltraScale+™MPSoC USB 3.0控制器通信设备类功能的分步过程
本节介绍CDC抽象控制模型(ACM)Linux小工具驱动程序的详细信息,如何配置Linux源以支持Zynq®的串行小工具驱动程序UltraScale +™MPSoC USB 3.0。以及在Windows / Linux主机上测试Zynq®UltraScale+™MPSoC USB 3.0通信设备类功能的一步一步程序。
CDC ACM Linux小工具驱动程序:
小工具串行驱动程序是Linux USB小工具驱动程序,USB设备端驱动程序。它运行在具有USB设备端硬件的Linux系统上; 例如,PDA,嵌入式Linux系统或带有USB开发卡的PC。小工具串行驱动程序通过USB与CDC ACM驱动程序或在主机PC上运行的通用USB串行驱动程序进行通信。在设备端Linux系统上,小工具串行驱动程序看起来像一个串行设备。在主机端系统上,小工具串行设备看起来像CDC ACM兼容类设备或具有批量输入和批量输出端点的简单供应商特定设备,并且其处理方式与其他串行设备类似。主机端驱动程序可能是任何符合ACM的驱动程序或任何可以通过简单的批量输入/输出接口与设备通信的驱动程序。通过小工具串行驱动程序和主机端ACM或通用串行驱动程序运行,您应该能够在主机和小工具侧系统之间进行通信,就像它们通过串行电缆连接一样。为Zynq Ultrascale + MPSoC配置和构建Linux操作系统
  • 按照本文档中的PetaLinux SDK安装用户指南进行操作。执行PetaLinux工作环境设置部分的步骤,以便将PetaLinux SDK安装到Linux机器上。
注意:本技术提示是基于PetaLinux版本2018.1开发的。建议从Xilinx网站下载PetaLinux安装程序版本2018.1。此示例使用ZCU102 PetaLinux BSP创建PetaLinux项目。对于Rev1板下载ZCU102,ES2,Rev1.0 BSP和Rev B / C / D板,请从Xilinx网站下载ZCU102 BSP。
  • 安装PetaLinux SDK后,通过执行$ petalinux-create -t​​ project -n <project_name> -s <path-to-bsp>命令在PetaLinux安装目录中创建项目
  • 上面的命令将在PetaLinux安装目录下创建一个用户提供名称的项目。将目录更改为上面创建的项目目录。$ cd <project_name>
  • 通过执行PetaLinux命令$ petalinux-config -c kernel来配置Linux源以支持通信设备类驱动程序
  • 转到设备驱动程序 - >
    • USB支持 - >
      • USB小工具支持 - >
        启用所需的驱动程序,如下图所示

图2:Linux内核配置与USB 3.0设备模式CDC ACM支持

  • 转到文件系统 - >
    • 伪文件系统 - >启用用户空间驱动的配置文件系统,如下图所示。
图3:用户空间驱动的配置文件系统的Linux内核配置

  • 确保在内核源代码树中选择了下图所示的参数,并保存并退出配置文件。
  • 由于本技术提示打算在设备模式下配置Zynq®UltraScale+™MPSoC USB 3.0控制器。在“<project_name> / project-spec / meta-user / recipes-dt / device-tree / files ”中出现的system-user.dtsi文件末尾添加下面提到的节点
  • &dwc3_0 {
    dr_mode =“peripheral”;
    status =“好的”;
    };
  • 通过内核配置和设备树的上述更改,使用命令“ $ petalinux-build ”构建petalinux 。这构建了image.ub可执行文件和一些其他USB通信设备类小工具驱动程序支持模块。
  • 使用petalinux SDK工具创建BOOT.BIN,更改为images / linux(cd images / linux)目录并运行以下命令
  • $ petalinux-package --boot --fsbl zynqmp_fsbl.elf --FPGA design_1_wrapper.bit --u-boot u-boot.elf。这将在images / linux下创建BOOT.BIN
准备SD卡:
将以下文件复制到SD卡中
  • 在上一节中创建的BOOT.BIN。
  • configfs.ko文件来自以下路径“ <project_name> /build/tmp/work/zcu102_zynqmp-xilinx-linux/linux-xlnx/4.14-xilinx-v2018.1+gitAUTOINC+4ac76ffacb-r0/image/lib/modules/4.14。 0-xilinx-v2018.1 / kernel / fs / configfs / “
  • libcomposite.ko文件来自以下路径“ <project_name> /build/tmp/work/zcu102_zynqmp-xilinx-linux/linux-xlnx/4.14-xilinx-v2018.1+gitAUTOINC+4ac76ffacb-r0/image/lib/modules/4.14。 0-xilinx-v2018.1 / kernel / drivers / usb / gadget / “
  • u_serial.ko文件来自以下路径“<project_name> /build/tmp/work/zcu102_zynqmp-xilinx-linux/linux-xlnx/4.14-xilinx-v2018.1+gitAUTOINC+4ac76ffacb-r0/image/lib/modules/4.14。 0-xilinx-v2018.1 / kernel / drivers / usb / gadget / function “
  • usb_f_serial.ko来自以下路径“ <project_name> /build/tmp/work/zcu102_zynqmp-xilinx-linux/linux-xlnx/4.14-xilinx-v2018.1+gitAUTOINC+4ac76ffacb-r0/image/lib/modules/4.14.0 -xilinx-v2018.1 / kernel / drivers / usb / gadget /function“
  • usb_f_acm.ko来自以下路径“ <project_name> /build/tmp/work/zcu102_zynqmp-xilinx-linux/linux-xlnx/4.14-xilinx-v2018.1+gitAUTOINC+4ac76ffacb-r0/image/lib/modules/4.14.0 -xilinx-v2018.1 / kernel / drivers / usb / gadget /function“
  • g_serial.ko来自以下路径“ <project_name> /build/tmp/work/zcu102_zynqmp-xilinx-linux/linux-xlnx/4.14-xilinx-v2018.1+gitAUTOINC+4ac76ffacb-r0/image/lib/modules/4.14.0 -xilinx-v2018.1 / kernel / drivers / usb / gadget / / legacy“
  • 来自“<project_name> / images / linux”的 Image.ub
注意:为方便用户,SD卡图像与本技术提示一起提供。下载随此技术提示发布的设计文件存档,并在主机的方便位置提取它。在解压缩目录的Design_files /路径下找到SD卡映像。对于Rev1.0板,将文件从Design_files / Rev_1_0_prebuilt_images目录复制到SD卡和Rev B / C / D板,将文件从Design_files / Rev_BCD_prebuilt_images复制到SD卡上。有关设计文件的更多信息,请参阅附录A.
ZCU102主板设置:
  • 电源连接到ZCU102板(Rev1.0 / B / C / D)。不要打开电源。
  • 将Micro USB线连接到ZCU102板Micro USB端口J83,另一端连接到主机上的开放USB端口,如下图所示。
图4:通信设备类的ZCU102板设置

  • 确保开关设置如下图所示。允许ZCU102板从SD-MMC卡启动。
  • 图5显示了ZCU102 Rev-B / C / D板的SD启动模式设置
图5:ZCU102 Rev B / C / D板的SD启动模式开关设置

  • 图6显示了ZCU102 Rev1.0 baord的SD启动模式设置
图6:ZCU102 Rev1.0板的SD启动模式设置

  • 要在器件模式下操作电路板,请关闭J7跳线,如图4所示(器件模式下的ZCU102电路板设置)。
在Windows主机PC上测试LinuxZynq®UltraScale+™MPSoC USB 3.0通信设备类功能:
  • 将SD卡装入J100连接器中的ZCU102板
  • 打开电路板。
  • 在主机PC上启动已安装的UART终端程序(例如,Windows PC上的Tera Term)。
  • 使用以下UART配置:波特率= 115200,位= 8,奇偶校验=无,停止位= 1。对于UART-0,选择带接口-0的COM端口
  • Board将开始使用Linux启动,几秒钟后,Linux主机将在主机PC上运行的UART终端程序中出现。
  • Petalinux控制台登录详细信息。
    • 用户:root
    • 密码:root
  • 使用以下命令将SD卡安装到目标板上。
    • $ mount / dev / mmcblk0p1 / mnt /
    • cd / mnt /
  • 在Linux内核中插入以下模块,在Linux内核中启用通信类设备小工具支持,并将Zynq®UltraScale+™MPSoC USB 3.0配置为串行通信设备。
    • insmod configfs.ko
    • insmod libcomposite.ko
    • insmod u_serial.ko
    • insmod usb_f_serial.ko
    • insmod usb_f_acm.ko
    • insmod g_serial.ko
  • 现在,Zynq®UltraScale+™MPSoC USB 3.0小工具串行设备已准备就绪。
图7:成功安装后的Zynqmp linux控制台

  • 现在在主板和主机之间连接USB 3.0电缆。将A型公头侧端子连接到主机USB3.0端口,将Micro B公头侧端子连接到ZCU102板上的USB3.0连接器(J96),如图4所示.ZCU102板设置。
  • 主机PC尝试枚举Zynq®UltraScale+™MPSoC USB 3.0作为通信类设备,并尝试从网络安装适当的Windows驱动程序。
注意:如果自动驱动程序安装失败并且显示设备驱动程序软件的弹出窗口未成功安装。在这种情况下,请尝试按照以下步骤在主机上安装Zynq®UltraScale+™MPSoC USB 3.0设备的Windows驱动程序。
Windows CDC ACM驱动程序的安装步骤
  • 在Windows主机中,单击“开始”按钮并搜索“ 设备管理器”,然后单击它以进行选择。
  • 这将打开设备管理器向导窗口。检查其他设备。右键单击Gadget Serial v2.4并单击以更新驱动程序软件,如下图所示。确保主机通过网络连接。
  • 成功安装驱动程序软件后,Zynq®UltraScale+™MPSoCUSB 3.0设备将被检测为主机PC端和另一端(即目标端)的虚拟通信端口(PI USB至串行端口)。USB串行小工具驱动程序注册为/ dev / ttyGS0。

图8:成功安装后的小工具驱动程序>

  • 使用这个新检测到的虚拟COM端口在主机PC上启动已安装的UART终端程序(例如,Windows PC上的Tera Term)。
  • 使用UART配置为:波特率= 115200,位= 8 =,奇偶校验=无,停止位= 1。
  • 为了从目标设备发送数据,我们需要使用USB串行小工具驱动设备文件'/ dev / ttyGS0'。我们可以使用如下所示的echo命令将数据从设备发送到Windows PC。
    • $ echo Hello> / dev / ttyGS0
  • 之后,您应该在虚拟通信端口(例如:COM9)上看到Hello,如下图所示。
图9:串行终端显示数据从目标板到主机的成功传输

  • 以类似的方式,如果我们想要从主机向设备发送数据,请在主机上打开的虚拟终端(例如:COM9)上写一些字符串(例如:Hello)。通过使用“ cat / dev / ttyGS0 ”命令打开串行小工具驱动程序设备文件,在设备端读取数据,如下图所示
图10:串行终端显示数据从主机到目标板的成功传输

在Linux主机PC上测试LinuxZynq®UltraScale+™MPSoC USB 3.0通信设备类功能:Linux主机PC
支持Linux内核附带的CDC ACM驱动程序。
  • 连接设备后,通过在Linux(Red Hat / Ubuntu)计算机的终端窗口中输入以下命令,检查日志以获取主机上使用的设备文件名。
    • $ dmesg | 尾巴-n 20
图11:检查日志以确保设备安装成功

  • 串行通信端口被注册为' ttyACM0 ',这意味着它将显示为' / dev / ttyACM0 '。
  • 为了从目标设备发送数据,我们需要使用USB串行小工具驱动程序设备文件' / dev / ttyGS0 '。我们可以通过echo命令将数据从设备发送到Linux主机。
图12:通过USB 3.0 ttyGS0发送数据

  • 使用以下命令显示通过USB串行连接从Linux主机上的USB设备接收的数据
图13:读取ttyACM0上的数据

  • 以类似的方式,如果我们想要将数据从主机发送到设备,我们应该首先通过运行以下命令从主机发送数据
图14:通过ttyACM0发送数据

  • 使用“ $ cat / dev / ttyGS0 ”命令在设备上读取它。
图15:在ttyGS0读取目标数据

附录A:如果需要添加其他项目
Zynqmp_CDC_design_files_2018_1.zip
  • Design_files
    • Rev_1_0_prebuilt_images
      • BOOT.BIN
      • image.ub
      • configfs.ko
      • libcomposite.ko
      • u_serial.ko
      • usb_f_serial.ko
      • usb_f_acm.ko
      • g_serial.ko
    • Rev_BCD_prebuilt_images:Rev-B / Rev-C / Rev-D Prod硅板的图像
      • BOOT.BIN
      • image.ub
      • configfs.ko
      • libcomposite.ko
      • u_serial.ko
      • usb_f_serial.ko
      • usb_f_acm.ko
      • g_serial.ko
<p>

相关经验

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
课程
    关闭

    站长推荐 上一条 /7 下一条

    快速回复 返回顶部 返回列表