碎碎思 · 2022年06月15日

FPGA和USB3.0通信-硬件的测试

b9089c2ce1a19eda48d2625db7d3bb61.png

本次演示用的是USB3.0芯片-CYPRESS CYUSB3014(下称 FX3),该芯片是标准的USB3.0 PHY,可以大大简化使用USB通信时FPGA的设计,主需要使用状态机进行FIFO的读写控制即可,同时该芯片还具有ARM核+I2S、I2C、SPI、UART等接口,大大增加了该芯片的使用范围。

69952c407774478d05cc97c8045d3108.png
073798e5d6024ffe10f61fbac877368c.jpg

蹭一张母校的美图

硬件测试

经过前面几期的介绍,我们基本了解及准备好所需要的环境,接下来我们就需要在应用之前先测试一下我们的硬件,主要包括:loopback传输测试、数据吞吐量测试、Streamer功能测试。

1、识别USB3.0接口(驱动安装)

将FX3 USB口插上电脑后,可以在设备管理器中看到一个未识别到的设备:

ee86f7402473a6aa5d7cc03a0e1d6d20.png

右击,更新驱动程序:

053dad5a3cfe381961566ca21339df12.png

驱动所在位置和自己安装路径有关,我使用的是默认安装位置,所以驱动位置在:

C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\driver\bin\win8\x64.

上面路径和自己安装路径和所使用的平台有关,具体需要自己去选择(Win7选择win7文件夹下,win8和win10选择win8文件夹下)。

安装完驱动后,惊叹号消失,出现如下列表中设备,可以记住他的VID/ID。

aa31599775f0304943806eb40c1bb9da.png

6ada94c6bb14f0fbbea6355a593d5053.png

设备管理器的VID/PID

2、基于内部DMA的loopback传输测试

何为LoopBack,通俗点就是FX3接收到什么数据就发送什么数据(类似串口回环)。

在上诉过程中,FX3内部ARM核(ARM9)是不参与数据本身传输的,固件配置好后,内部通过DMA进行数据的搬运。
c636bc88699717a1aa56fb6d71432047.png

在上一节基础上测试FX3的硬件。

参考(《官方AN70983》)就可以完成本节实验,完全没必要看下面的内容(是不是说多了!)。

测试的历程都是由SDK提供的历程。

编译固件

本节测试固件代码来源:

C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\basic\_examples\cyfxbulklpautoenum

PS:还是根据自己安装 目录选择。

COPY到一个不含中文路劲及空格的文件夹下。

在开始菜单内选择Cypress-->Eclipse-->EZ USB Suite:

0f0719d827b775701f0b5da02cc4831e.png
打开后如下图所示:

af0352b2e5878043fa7660bb54350381.png

空白处右击:

cf11dac69bda296ae8f5f61dc69cca5f.png

点击:

General > Existing Projects into Workspace and click Next

c477049e9e4bf5223f71207d570b2caa.png

然后,点击Browse

b911e8731d8eab6740e5a5a4af90e5ea.png
选择刚刚COPY的文件夹:

8464d08bdaea48ec997543e9f94131cc.png

会识别到工程,然后Finish。

a799e918df568dbb83f5a3ab95a6f01b.png

在Project Explore下会出现新导入的工程,选中该工程并右击,弹出的菜单中选择Build Project对工程进行编译。

ae4f65ad1703287bbb96fd51e2974765.png

编译完会在Console下输出打印信息:Build Finish,证明编译完成。

5e006e6c7a5cb3f8707bbcee9cca0709.png

此时在工程目录下会生成一个Debug的文件夹,文件夹下面就生成了我们需要的固件,如下:

dd76b9e5509da9fceb816c453ff38063.png

接下来,根据自己的硬件选择从USB引导。

2ae3295ee21c1fdda569594877a96213.png

插上USB,就可以在设备管理器上看到FX3设备。

7426ea2561a9dc7518f83a2c6a895bff.png

加载固件

接下来启动Control Center

开始 > 程序 >Cypress > Cypress USBSuite > Control Center

a69d9051b4fa446cb60a1831152db27c.png

在左侧USB Control Center中单击Cypress USB BootLoader(表示对该设备进行操作)。

选择Program > FX3 > RAM。

其中RAM类似FPGA中JTAG调试,烧写到其他两种芯片需要看FX3芯片外围接口芯片是什么,根据需求选择,我们目前还是在调试,所以选择烧写到RAM中。

06037eea980d8e78983ec1e39a413e00.png
选择在上一节基础上生成的固件(Debug文件夹下):

f1025e34039a3412e9f20633430db021.png

在上面操作没问题的情况 下:工作窗口中原先的Cypress USB BootLoader就编程了我们下载固件的名字(Cypress USB BulkLoopExample)。

eb4679d772f83857fccc487090a5041a.png

LoopBack硬件测试

在上一节基础上,单击打开Cypress USB BulkLoopExample。选中Bulk out endpoint(0x01)选项,在Data Transfers-->Data to send(Hex)中输入要发送给FX3的数据。单击Transfer Data-OUT发送数据。

73b2d63bbcca21cc73e4ced5a23fa73a.png

在下图中的信息串口就会出现刚刚发送的内容及Bulk out Transfers completed的提示,证明传输已经完成。

a629fcc49fabef5c91c249da7bd0f6fd.png

接下来,单击Bulk in endpoint(0x81)选项,然后单击Data Transfers-->Data-IN按钮。

acfc828928e09b4fb67a77a9abc4c287.png

在下图中的信息串口就会出现刚刚发送的内容及Bulk IN Transfers completed的提示,证明传输已经完成。

接下来进行批量LoopBack测试。

在上一节基础上,打开Bulk Loop。

7caedd7908c641f5b27a0e8eb3c030cc.png

点击Start 按钮运行一段时间后,可以对比Bytes transferred OUT好Bytes transferred IN后面的统计,看下LoopBack测试下有没有丢包。

fab5ef7a17f6709c9d58b83ecf287a2b.png

3、FX3数据吞吐量测试

编译固件

本次使用的是SDK目录下:

C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\basic\_examples\cyfxbulksrcsink

编译固件过程同上一节基本不变:

a922cab3f21a7920effd655ad41c8a7c.png

6b59d659addb00cba09dcfd9a7b30ff0.png

35dc512a0ea2bd1963c9e3649c663d96.png

下载固件

下载固件也基本不变,选择的文件是刚刚编译出来的固件:

455069420b5fd532f72f0976da7dc808.png

工作窗口中原先的Cypress USB BootLoader就编程了我们下载固件的名字(Cypress USB StreamerExample)。

e77e0757e3bf883525f73b40977c760a.png

Streamer硬件测试

开始菜单中打开Streamer。

2dccf4e5d5d24ffeaa443541105e7ae5.png

进入软件后,会自动识别到FX3设备,按照下图中设置后,单击Start按钮后既可以进行Streamer测试。

bd34233ecf42bf898c5b65cc9ca944f1.png

6c85895aee2a1d05205ab983de675a26.png

实际的结果差异主要和一下几个部分有关:PC、USB3.0线缆、PCB走线。

3、固件固化

上面下载的固件是下载到RAM中的,一断电后固件就会丢失,这种在实际应用中是不可取的。

06037eea980d8e78983ec1e39a413e00.png

FX3为了方便用户使用,提供两种固件固化方式:SPI FLASH和EEPROM。启动方式可以通过下面方式进行选择。

2ae3295ee21c1fdda569594877a96213.png

实际使用过程中SPI FLASH是比较常用的方式,设计的FLASH电路如下所示:

3f873e6007bd35a0ed6bc68735f6444a.png

固化方式同上面RAM下载方式相同,下图中选择自己配置的外围器件后,等待下载完成即可。

06037eea980d8e78983ec1e39a413e00.png

PS:下载到外围器件后需要选择对应的启动方式后断电重启。

Image

原文:OpenFPGA
作者:碎碎思

相关文章推荐

更多FPGA技术干货请关注FPGA 的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
10508
内容数
512
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息