本工程将记录在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模块
在右侧的窗口里 ,点击加号,在选择框里搜索ZYNQ,并找到ZYNQ7 PROCESSING SYSTEM ,双击并打开
软件自动生成了一个 zynq的block 如下图所示,接下来要做一些相应的设置,双击下图中的ZYNQ核
在ZYNQ 设置界面,设置 DDR MT41K256M16RE-125的型号 和位宽16bit
使能zynq的USB0功能
另外 由于我们的USB PHY的信号是接在mio的46脚上 所以这里同样需要使能 MIO的USB RST信号(系统同时会默认勾选I2C复位 ,可以关闭)
点击“Run Block Automation”如下图所示。在弹出的选项中保持默认,点击“OK”,即可完成对ZYNQ7 Processing System的配置
对GPIO make external,并且连接AXI的时钟(AXI默认开启的,这里用不到AXI,也可以去设置里关闭AXI功能,就不需要连接了)
之后 点选Create HDL Wrapper
在弹出的对话框里保持默认
软件自动为我们生成HDL文件
这个工程用到的资源都是PS端的原生资源,所以这里不需要额外做管脚约束
接下来生成bit文件
按下绿色箭头对工程进行编译
按下Generate Bitstream 完成综合以及生成bit文件
SDK程序编写
1)File→Export→Export hardware…,在弹出的对话框中勾选“include bitstream”,点击“OK”确认,如下图所示。
2)File→Lauch SDK,在弹出的对话框中,保存默认,点击“OK”,如下图所示。
系统将自动打开SDK开发环境
3)新建一个工程 file→new→Application Project,来新建一个“Application Project”,如下图所示。
4)在新建工程名中输入自己的工程名称,点击NEXT
选择空工程,点击完成FINISH
之后SDK会为我们创建一个空的工程,这里我们只需要用到bsp就够,如下图所示,展开BSP目录,点击system.mss文件,在右侧选择导入usbps的 demo并导入
勾选工程,然后点击ok
之后系统会自动导入usb的demo,,如下图所示
下载到板子上进行验证
先用USB线将板子的JTAG口和电脑连接
选中我们的硬件工程 ,并点击右键→Program FPGA,在弹出的对话框中选择默认,点击“program”,完成FPGA PL部分的Program工作
2)选中我们生成的USB工程 展开绿色箭头(RUN)右边的图标,选择Run As→1 Launch on Hardware(System Debugger)
用另一根TYPE C数据线连将我们板子上的USB SLAVE口和电脑连接,此时我们可以看到电脑出现了一个1MB的U盘,并提示是否格式化这个U盘(这里选择格式化)
之后电脑就出现了一个由DDR RAM虚拟出来的1MB大小的U盘了(可以像正常U盘一样复制粘贴文件),注意这个U盘断电数据会丢失请不要放重要文件。
通过修改 storage.h可以调整这个U盘的大小(请不要接近或者超过板子上DDR容量的大小)
比如说我们将值改成0xFF00000 就可以得到一个255MB的虚拟U盘
备注 我们也可以用下面方法让每次下载程序的时候都自动加载配置FPGA和自动初始化系统,省去了单独下载bit文件的操作
之后点 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工程是有的 也可以看一下
linux下的host工程还是petalinux配置的那个吗?还是有其他的?
对的 ,petalinux 这个, xillinux 系统下也是可以跑USB HOST的