芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 14220|回复: 4

小梅哥USB学习笔记【20190331更新】

[复制链接]
  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 428

    主题

    811

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16107
    QQ
    发表于 2019-3-30 22:05:54 | 显示全部楼层 |阅读模式
    20190330
    附件为基于AC6102的USB3.0 Slave FIFO StreamOUT模式传输的Verilog代码。
    AC6102_FX3_StreamOUT.qar (103.73 KB, 下载次数: 735)

    虽然之前也做过这个实验,但是之前使用的是Cypress官方提供的Verilog代码,使用的是三段式状态机,对于我个人来说并不是很好理解,而且那个代码仅仅做了数据读取,没有做其他任何功能,也没有支持写入FIFO或RAM的接口,因此这个例子中我加入了写入FIFO的local接口,可以把从USB接收到的数据写入FPGA的FIFO或者RAM中。而且,由于USB3.0传输非常快,FPGA中如果使用SDRAM、DDR等存储器实时接收存储数据,需要在FPGA中主动控制整个PC到USB芯片的数据传输速率,引出增加了一个local_en端口,只有FPGA中使能该端口时,才能读取USB芯片Slave FIFO数据,所以能够控制整个传输速度。
    另一方面,为了方便进行板级测试,将该信号接到了开发板的S3按键上,由于S3默认就是高电平,按下低电平,因此在程序中将该信号取反后使用,以实现按下按键S3使能传输的测试,实验还是按照AC6102 USB 3.0开发教程中的方法进行测试,使用signaltap ii进行数据抓取。

    说个自己调试过程中遇到的坑,在最开始调试时候,每次FPGA开始读取USB SLAVE FIFO中的数据后,总是无法读取完,就好像USB芯片中有无穷尽的数据,cs和rd一直为低,也无法读空数据,后来才发现是pktend信号搞的鬼,因为是从Salve FIFO读数据,用不到pktend信号,因此程序中没有管这个信号,没有对其赋值,结果导致该引脚在程序运行过程中一直为低电平(低电平代表了该信号有效),因为USB芯片的固件是同时支持IN 和OUT的,导致USB的固件程序一直在处理PKTEND有效的程序中,从而无暇去处理USB传输内容,才出现了这种现象。最后在程序里强制将该信号置一,就解决了。


    20190331
    附件为基于AC6102的USB3.0 Slave FIFO StreamOUT模式传输数据写入到DDR2中,然后由TFT控制器读出,显示在5寸800*480分辨率显示屏上的工程。
    USB30_IMG_DDR_TFT.rar (1.35 MB, 下载次数: 929)
    传输图片使用的是小梅哥自己开发的一个USB上位机,见下述附件
    XLH_USB_Console.rar (2.24 MB, 下载次数: 1042)
    传输的图片是使用LcdImage软件生成的16位的bin格式的文件,这里提供两个测试文件,如下述附件所示,使用时先解压得到bin文件哦:
    测试图像数据.rar (486.3 KB, 下载次数: 808)
    使用时,需要给AC6102开发板的USB芯片烧写SF_StreamOUT固件
    将小梅哥FPGA配套的5寸触摸显示屏插接到AC6102开发板上
    下载FPGA工程的sof文件到AC6102开发板中
    下载完成后应该能看到显示屏呈现雪花状态。
    使用XLH_USB_Console软件,选择下传数据,选择需要传输的图像文件,然后输入传输大小为752KB,点击开始传输就可以看到图像已经显示在开发板显示屏上了。如下图所示
    传输软件设置.png
    效果图.jpg

    说个调试过程中遇到的问题和处理方法
    最开始,一直使用cypress的control center软件传输bin文件,每次都能传输成功,但是图像就是最下面几行一直出不来,,传两次图像能够显示完。经过分析,确认是丢失了部分数据,这部分数据算不上丢失,而是因为没有满足一个传输包的大小,所以一直无法读取。
    经过简单计算:
    800*480*16bit的图像大小为768000字节
    768000字节除以Slave FIFO一次传输的长度16384字节,结果为46.875,为小数,既一副图像大小并不是刚好是Slave FIFO每次传输长度的整数倍。导致最后有16384*0.875 = 14336字节数据因为不满一包,没有成功被FPGA读走。
    既然这样,那就在传输的时候,传输47个包就行了,图像文件数据不够47*16384字节大小的的部分补0即可。
    47*16384 = 752KB,所以可以看到,在上述上位机软件中,传输的大小指定为752KB
    另外,为了避开传输多余的数据,导致DDR2中存储的数据每次位移,在指定写入DDR的长度时,也进行了修改,变为了47*16384 /2 = 800*480+1024。
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2019-6-3 13:31
  • 0

    主题

    1

    帖子

    28

    积分

    新手上路

    Rank: 2

    积分
    28
    发表于 2019-4-17 13:44:04 | 显示全部楼层
    写的非常汗,赞赞赞。支持支持紫河车
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    10

    积分

    新手入门

    Rank: 1

    积分
    10
    发表于 2023-8-11 14:33:19 | 显示全部楼层
    请问小梅哥这个源代码有吗?可以发一下让我们学习一下吗?




    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-6-1 21:27
  • 0

    主题

    5

    帖子

    59

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    59
    发表于 2023-8-17 23:42:41 | 显示全部楼层
    不错的帖子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-9-2 10:14
  • 0

    主题

    8

    帖子

    600

    积分

    高级会员

    Rank: 6Rank: 6

    积分
    600
    发表于 2023-12-26 15:38:03 | 显示全部楼层
    赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-11-21 21:44 , Processed in 0.131792 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表