本工程将记录在SDK环境下调用官方demo来实现USB的slave(device)功能测试
ZYNQ的USB可以同时充当USB HOST,和USB DEVICE(SLAVE)的角色功能非常强大,板子上同时保留了USB HOST的接口,和USB DEVICE的接口,USB功能大多数情况都是在linux下使用的,在arm裸机下使用的资料非常的少,好在官方为我们保留了一个USB DEVICE的SDK Demo,我们可以通过这个demo去熟悉整个usb项目的创建流程,具体操作如下。
工程创建
完整的工程创建图文教程前面已经详细图文描写了,可以参考前面的工程,这里仅仅增加关键步骤。 详细过程可以参考Smart ZYNQ板 工程七 用ZYNQ的PS点亮连接到PL端的LED灯EMIO 方式
器件名称选择 xc7z010clg400-1 或 xc7z020clg400-1(xa7z020) 以实际板子上的芯片为准
在BLOCK DESIGN 中搜索并添加一个ZYNQ模块
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image.png)
在右侧的窗口里 ,点击加号,在选择框里搜索ZYNQ,并找到ZYNQ7 PROCESSING SYSTEM ,双击并打开
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-2.png)
软件自动生成了一个 zynq的block 如下图所示,接下来要做一些相应的设置,双击下图中的ZYNQ核
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-3.png)
在ZYNQ 设置界面,设置 DDR MT41K256M16RE-125的型号 和位宽16bit
![](http://www.hellofpga.com/wp-content/uploads/2023/01/image-92.png)
使能zynq的USB0功能
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-1.png)
另外 由于我们的USB PHY的信号是接在mio的46脚上 所以这里同样需要使能 MIO的USB RST信号(系统同时会默认勾选I2C复位 ,可以关闭)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-2.png)
点击“Run Block Automation”如下图所示。在弹出的选项中保持默认,点击“OK”,即可完成对ZYNQ7 Processing System的配置
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-3.png)
对GPIO make external,并且连接AXI的时钟(AXI默认开启的,这里用不到AXI,也可以去设置里关闭AXI功能,就不需要连接了)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-4.png)
之后 点选Create HDL Wrapper
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-22.png)
在弹出的对话框里保持默认
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-5.png)
软件自动为我们生成HDL文件
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-14.png)
这个工程用到的资源都是PS端的原生资源,所以这里不需要额外做管脚约束
接下来生成bit文件
按下绿色箭头对工程进行编译
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-19.png)
按下Generate Bitstream 完成综合以及生成bit文件
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-18.png)
SDK程序编写
1)File→Export→Export hardware…,在弹出的对话框中勾选“include bitstream”,点击“OK”确认,如下图所示。
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-20.png)
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-24.png)
2)File→Lauch SDK,在弹出的对话框中,保存默认,点击“OK”,如下图所示。
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-21.png)
系统将自动打开SDK开发环境
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-22.png)
3)新建一个工程 file→new→Application Project,来新建一个“Application Project”,如下图所示。
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-23.png)
4)在新建工程名中输入自己的工程名称,点击NEXT
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-6.png)
选择空工程,点击完成FINISH
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-26.png)
之后SDK会为我们创建一个空的工程,这里我们只需要用到bsp就够,如下图所示,展开BSP目录,点击system.mss文件,在右侧选择导入usbps的 demo并导入
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-8-1024x583.png)
勾选工程,然后点击ok
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-9.png)
之后系统会自动导入usb的demo,,如下图所示
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-10.png)
下载到板子上进行验证
先用USB线将板子的JTAG口和电脑连接
选中我们的硬件工程 ,并点击右键→Program FPGA,在弹出的对话框中选择默认,点击“program”,完成FPGA PL部分的Program工作
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-12.png)
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-42.png)
2)选中我们生成的USB工程 展开绿色箭头(RUN)右边的图标,选择Run As→1 Launch on Hardware(System Debugger)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-11.png)
用另一根TYPE C数据线连将我们板子上的USB SLAVE口和电脑连接,此时我们可以看到电脑出现了一个1MB的U盘,并提示是否格式化这个U盘(这里选择格式化)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-14.png)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-15.png)
之后电脑就出现了一个由DDR RAM虚拟出来的1MB大小的U盘了(可以像正常U盘一样复制粘贴文件),注意这个U盘断电数据会丢失请不要放重要文件。
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-16.png)
通过修改 storage.h可以调整这个U盘的大小(请不要接近或者超过板子上DDR容量的大小)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-13-1024x563.png)
比如说我们将值改成0xFF00000 就可以得到一个255MB的虚拟U盘
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-17.png)
备注 我们也可以用下面方法让每次下载程序的时候都自动加载配置FPGA和自动初始化系统,省去了单独下载bit文件的操作
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-18.png)
![](http://www.hellofpga.com/wp-content/uploads/2022/10/image-39.png)
之后点 APPLY 然后 再选择Run As→1 Launch on Hardware(System Debugger就可
ZYNQ的 USB 功能远不止这些, 官方SDK 只是提供了一个演示demo,如果要做slave方面的裸机相关应用可以深入研究这个demo , Host功能将在后续petalinux的章节做演示
完整工程如下
大佬有裸机状态下实现 USB OTG 的功能吗?
硬件上决定 只能作为 HOST 或者SLAVE 去工作,不能设置成OTG方式
现在程序上只有裸机的SLAVE程序, 后面会试着增加裸机的HOST程序
对了 linux 下的host工程是有的 也可以看一下