本工程将记录在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的
大佬你好,现在有裸机状态下实现 USB HOST 功能的例程吗?
这个暂时还没有 因为USB 设备很多需要打驱动,所以大部分适用场景都是在OS端