问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 87 人浏览分享

开启左侧

ZYNQ USB2.0主从模式配置与应用方案

[复制链接]
87 0
经验分享
经验分享: 01-AMD(XILINX) » ZYNQ|MPSOC
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 信号线:
image.jpg
usb 信号可以通过J17 跳线帽切换,若 1、2脚接则使能 HUB+USB A 口,若 2、3 接则使能 type-c 接口。
image.jpg
USB A 口默认用作Host 模式,type-c 接口默认用作 Peripheral 模式(device 模式)。二者只能选其一,选用 Peripheral 模式将无法使用 WIFI,4/5G 模块以及 USB A 接口。
具体接口如下所示:
image.jpg
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配置一些环境变量:
image
使用 make_kernel_menuconfig.sh 打开内核配置界面,在原有配置上按照下图选中其它配置:
image.jpg
这里解释一下配置,这些是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盘)
image
连接usb数据线,可以看到 widows 多了一个盘符:
image
断电重启后运行如下指令:
cdsoc_demo/net/
sudo./zynq_usb_rndis_script.sh (模拟虚拟网卡)
image
电脑上设置好新出现的 RDIS网卡 ip 为 192.168.137.1:
image
注意:需要对以太网 设置禁用,如果之前按照叫对以太网设置过IP,需要取消,以免和以太网2设置IP发生冲突。
如果电脑上没有出现新的网卡,是因为没有安装驱动,打开我的电脑,找到设备管理器,找到其他设备,右击RNDIS更新驱动程序:
image.jpg
选择浏览我的电脑以查找驱动程序:
image
选择让我从计算机上的可用驱动程序列表中选取,点击下一步:
image
选择网络适配器:
image
厂商选择:Microsoft,型号选择基于远程NDIS的Internet共享设备:
image
最后点击下一步并安装,安装成功如下:
image
打开资料自带的 demo\soc_demo\socket文件夹,运行 server_boxed.exe:
image
开发板上进入 soc_demo\socket文件夹,运行 client 程序,然后观察链接速度:
sudo./client/
image   
image
1.5 otg host 模式测试
将跳线帽 J18接入 host 模式,然后通过 usb A 口进行测试,测试方法见《开箱测试-自带 linux 系统测试.pdf》此处不再赘述。





soc_demo.zip

596.47 KB, 下载次数: 3

soc_dts.zip

2.77 KB, 下载次数: 3

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

10

粉丝

151

主题
精彩推荐
热门资讯
    网友晒图
      图文推荐
        
        • 微信公众平台

        • 扫描访问手机版