登录注册
论坛
版主
9716
24
最近准备采集一些数据,手里有一个tang primer 20k的板子,sipeed官方有usb2.0 full-speed的例程。因为全速满足不了要求,之前尝试过使用板子上的USB3317做high-speed通信没成功。这回又鼓捣了一下,使用官方的usb2.0 soft phy参考设计,把原来的usb2.0 soft phy替换成usb3317,可以成功通信。不过速率一直不高,使用串口助手无论波特率设置为多少,接收的速度大概都在30K byte/s,很低,好像全速都达不到。
现在不确定问题出在哪,是上位机的串口助手原因还是FPGA的原因,或者是USB CDC本身就有限制?
USB是处于高速状态的,USB时钟是60MHz,每个时钟发送一个字节的数据,然后数据加1。通过串口助手能看到会有多个连续的块数据,中间也会丢数据。
image.png (59.53 KB, 下载次数: 0) 下载附件 保存到相册 2024-7-21 18:14 上传
image.png (59.53 KB, 下载次数: 0)
下载附件 保存到相册
2024-7-21 18:14 上传
我抓了一下ulpi的信号,发现大多数时间总线都是空闲的。不清楚是什么原因会导致这种情况。
image.png (43.44 KB, 下载次数: 0) 下载附件 保存到相册 2024-7-21 18:16 上传
image.png (43.44 KB, 下载次数: 0)
2024-7-21 18:16 上传
扫一扫,分享给好友
发现ep_usb_txcork一直为0,0表示TXDAT不足?
image.png (12.47 KB, 下载次数: 0) 下载附件 保存到相册 2024-7-22 07:08 上传
image.png (12.47 KB, 下载次数: 0)
2024-7-22 07:08 上传
usb_fifo使用低速时钟,ep_usb_txcork对应fifo_empty,理论应该有空的时候才对。而且如果ep_usb_txcork为0时表是空,它就不应该由empty信号直接驱动,因为empty高电平表示空。
image.png (25.2 KB, 下载次数: 0) 下载附件 保存到相册 2024-7-22 07:08 上传
image.png (25.2 KB, 下载次数: 0)
image.png (16.24 KB, 下载次数: 0) 下载附件 保存到相册 2024-7-22 07:09 上传
image.png (16.24 KB, 下载次数: 0)
2024-7-22 07:09 上传
最后发现u_usb_device_controller_top.usb_txcork = usb_fifo.o_usb_txcork = sync_tx_pkt_fifo.empty,sync_tx_pkt_fifo.empty一直为0。
empty = ( wp == pkt_rp )
image.png (11.13 KB, 下载次数: 0) 下载附件 保存到相册 2024-7-22 07:11 上传
image.png (11.13 KB, 下载次数: 0)
2024-7-22 07:11 上传
测试时发现wp 有大于 pkt_rp的时候也有小于pkt_rp的时候,唯独没有它俩相等的时候。不确定是什么原因。
image.png (67.27 KB, 下载次数: 0) 下载附件 保存到相册 2024-7-22 07:07 上传 image.png (8.12 KB, 下载次数: 0) 下载附件 保存到相册 2024-7-22 07:14 上传
image.png (67.27 KB, 下载次数: 0)
2024-7-22 07:07 上传
image.png (8.12 KB, 下载次数: 0)
2024-7-22 07:14 上传
一粒金砂(高级)
80
0
“大多数时间总线都是空闲”,可能原因之一是USB3317的cache设定不够,以及RTL状态机跳转条件使用计数器。
基于FPGA的USB场景设计,主要应用场景之一是SDR系列产品;USB芯片需要固件,并且基于具体场景来考虑TX-FIFO或者RX-FIFO的大小。
至于其他场景,非必要建议不选用USB接口。基于网口的TCP/UDP传输都比USB接口开发难度要低。
发表回复 回帖后跳转到最后一页
EEWorld Datasheet 技术支持
查看 »