Microchip
直播中

陈桂平

7年用户 274经验值
私信 关注
[问答]

溢出队列缓冲区

我用和谐建立了CDC的USB堆栈。如果我慢慢地发送数据,效果会很好。我想尽可能快地发送数据。当这样做时,我溢出队列缓冲区。USB_DEVICE_CDC_Write函数返回以下错误,USB_DEVICE_CDC_RESULT_ERROR_TRANSFER_QUEUE_FULL。是否有指定或可接受的方法来监视当前队列级别并相应地节流数据,以便队列不会溢出?

回帖(3)

李亦然

2020-3-24 10:24:33
数据正在从芯片发送到PC。芯片被列举为高速USB。我期望得到大约1兆位每秒的连续传输速度。也许是1.2的开销。只要数据按顺序发送,我就不会烦恼。我的理解是,通过USB到FTDI等串行设备,串行部分会阻碍速度。如果数据由芯片通过USB链路直接发送,那么速度可能更高。我试着测试链路的实际最大速度是多少。
举报

李龙

2020-3-24 10:41:57
数据正在从芯片发送到PC。芯片被列举为高速USB。我期望得到大约1兆位每秒的连续传输速度。也许是1.2的开销。只要数据按顺序发送,我就不会烦恼。我的理解是,通过USB到FTDI等串行设备,串行部分会阻碍速度。如果数据直接由芯片通过USB链路发送,那么速度可能更高。我试图测试链路的实际最大速度。最大CDC速度约为1.5Mbytes/sec IIRC。在PIC24上,我增大了缓冲区大小,以便我可以用最大nu预加载它。适合单个USB传输的字节数(我不记得有多少64字节的数据包,但似乎记得大约是19,但我可能是错的)。然后,我有一个程序循环填充缓冲区的数据,前4或5个字符是“行号”,所以我可以看到是否有数据丢失。然后,使用带有双核处理器的笔记本电脑,它会接收数据(我使用终端程序在屏幕上显示数据),但是它总是有大约每分钟一次的错误。然后,我用我的4核处理器来接收带有终端程序的数据,并且接收时不会出错,直到屏幕保护程序启动为止,然后收到的数据会有中断。最大可能的持续速度。那么你的速度可能会受到PIC处理的速度的限制,并将其填充到缓冲区中。我用乒乓球缓冲区来获得速度,所以我正在填充一个而另一个发送。如果你不熟悉USB的内部工作以及有多少数据以及以什么速度,那么给自己找一份Jan Axelson的“USB完成”副本。她写了一本非常可读的书,全面论述了USB的内部工作。在亚马逊提供一个合理的价格。
举报

李涛

2020-3-24 10:57:53
非常肯定,在TE PIC32 MZ,我能够使用512字节的数据包(仅高速,不会在全速后退工作)。在那种情况下,我并不是在尝试速度,而是针对未分段的512字节块……我确实在Sitarra(Beaglebone Black派生函数)和PIC32MZ之间有一个应用程序,我需要比Mb/s更快的速度。奥克斯。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分