|
1.1 介绍 Zynq-7000 系列 USB控制器能够满足各种 USB 2.0 应用的需求,可用作主机或设备。Zynq-7000 器件内置两个同等功能的控制器,每个控制器均可独立配置和控制。USB 控制器 I/O 使用了 ULPI 协议,并通过 MIO 引脚连接外部 ULPI PHY。ULPI接口提供了 8 位并行 SDR数据路径,从控制器内部连接类似UTMI 的总线到 PHY。ULPI 接口大幅减少了器件的引脚数量,可由 PHY 的 60MHz 时钟输出控制。 1.2 硬件分析
1.2.1 Zynq-7000 USB 硬件/IP 特性 USB2.0 高速主机控制器(480 Mb/s 理论值) 兼容Intel® EHCI 软件编程模型 USB2.0 高速(HS)和全速(FS)设备控制器 支持最多 12 个端点:控制端点加 11 个可配置端点 向下兼容 USB 1.1 全速/低速(FS/LS) 内嵌事务转换器(Transaction Translator),支持主机模式下的 FS/LS 支持 On-the-Go,符合 OTG 1.3 补充规范(需硬件支持) 支持主机协商协议(HNP) 支持会话请求协议(SRP) 支持所有 USB 事务类型:控制、批量、中断、等时 本地 DMA 引擎 AHB总线主控 在系统内存与控制器 FIFO 之间传输数据 处理设备端点和主机调度的传输描述符 协议引擎 解析 USB 数据包 根据控制器状态实时响应 端口/收发器控制器 8位并行数据直通总线 ULPI链路封装器 在 ULPI I/O 接口与类 UTMI 接口之间转换接收(Rx)和发送(Tx)传输 作为协议引擎与 ULPI 接口之间的桥梁 支持 Rx 和 Tx 命令 ULPII/O 接口 8位 SDR 数据加时钟、方向、下一个、停止信号 通过 MIO 引脚提供12 个 ULPI PHY 信号 在时钟输出模式下由 PHY 提供时钟 可通过视口访问 ULPI PHY 寄存器 主机端口指示器、电源选择和电源故障指示信号 每个控制器通过 EMIO 提供 4 个信号 1.2.2 原理图分析 USB PHY 芯片,提供了usb2.0 信号线: usb 信号可以通过J17 跳线帽切换,若 1、2脚接则使能 HUB+USB A 口,若 2、3 接则使能 type-c 接口。 USB A 口默认用作Host 模式,type-c 接口默认用作 Peripheral 模式(device 模式)。二者只能选其一,选用 Peripheral 模式将无法使用 WIFI,4/5G 模块以及 USB A 接口。 具体接口如下所示: 1.3 系统搭建 在文档附带的 demo 文件夹中,soc_prj 为 vivado 工程,其中已经配置好了板卡对应硬件的信息,若无需额外功能无需修改。soc_hw 为 soc_prj 内工程导出的 xsa 文件,soc_sdk是通过vitis生成的fsbl和bit文件,soc_dts是设备树,soc_demo是应用程序,boot是已经编译好的镜像文件,都可以直接使用。 下面默认大家会从vitis移植ubuntu系统实现二次开发,不会的可以学习《3-4-01_米联客2026版ZYNQ-Linux课程(基础入门篇.pdf》第四章 。 首先在虚拟机中打开终端,cd到开发包文件夹所在的目录内,然后source配置一些环境变量: 使用 make_kernel_menuconfig.sh 打开内核配置界面,在原有配置上按照下图选中其它配置: 这里解释一下配置,这些是Linux内核中USB Gadget Support的配置选项,主要用于让Linux设备充当各种USB外设角色。如果是利用USB device模拟虚拟U盘,可以选中<M> Mass Storage Gadget;如果是模拟虚拟网卡,可以选中<M>Ethernet Gadget (with CDC Ethernet support)和<M>Network Control Model (NCM) support。也可以按照本教程对两种外设角色的配置都选中。 然后保存退出,按照教程编译系统,下面就不一一介绍了。 因为这里是将驱动编译成模块,编译结束后在路径~uisrc-lab-xlnx/sources/kernel/drivers/usb/gadget下可以找到驱动,将其替换demo中soc_demo下usb或者net路径下的驱动。(usb是模拟虚拟U盘的驱动,net是模拟虚拟网卡的驱动)。 1.4 otg device 模式测试 按照《3-4-01_米联客2026版ZYNQ-Linux课程(基础入门篇.pdf》第四课制作好系统,将资料自带的soc_demo文件夹拷贝到烧录好系统的rootfs 分区的/home/root/下,启动系统运行如下指令: cd soc_demo/usb/ sudo ./zynq_usb_gadget_script.sh(模拟虚拟U盘) 连接usb数据线,可以看到 widows 多了一个盘符: 断电重启后运行如下指令: cdsoc_demo/net/ sudo./zynq_usb_rndis_script.sh (模拟虚拟网卡) 电脑上设置好新出现的 RDIS网卡 ip 为 192.168.137.1: 注意:需要对以太网 设置禁用,如果之前按照叫对以太网设置过IP,需要取消,以免和以太网2设置IP发生冲突。 如果电脑上没有出现新的网卡,是因为没有安装驱动,打开我的电脑,找到设备管理器,找到其他设备,右击RNDIS更新驱动程序: 选择浏览我的电脑以查找驱动程序: 选择让我从计算机上的可用驱动程序列表中选取,点击下一步: 选择网络适配器: 厂商选择:Microsoft,型号选择基于远程NDIS的Internet共享设备: 最后点击下一步并安装,安装成功如下: 打开资料自带的 demo\soc_demo\socket文件夹,运行 server_boxed.exe: 开发板上进入 soc_demo\socket文件夹,运行 client 程序,然后观察链接速度: sudo./client/ 1.5 otg host 模式测试 将跳线帽 J18接入 host 模式,然后通过 usb A 口进行测试,测试方法见《开箱测试-自带 linux 系统测试.pdf》此处不再赘述。
|