打印

求救USB上传数据速率慢分析

[复制链接]
1937|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
haizheng4|  楼主 | 2012-8-13 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 haizheng4 于 2012-8-13 18:32 编辑

现在用STM32F107 做USB方面的程序现在发现USB上传数据的速率太慢了

我的程序是从虚拟串口上修改的
程序的大致思路是依靠USB的SOF中断 (1mS)
在中断中查询是否有数据上传,如果有则将数据装载到INEP中,同时置标志,防止写覆盖
然后在IN完成中断中清标志,可以开启下次传输

受限于INEP端点最大包限制,例程中每次上传只取64Byte
我研究了下这个函数
USB_SIL_Write(EP1_IN, &USB_TxBuffer[USB_Tx_ptr], USB_Tx_length);
发现可以写比较长的数据进去,函数会将数据分割成多个64Byte的包
保存在OTG_FS_DIEPTSIZx寄存器中,然后在一个Frame(1mS)中传输多个DATA包,提高总线利用率
我现在困惑的是我将一个256Byte的数组传进去,一直发,测试速率
这256被分成4个64发送,但好像不是在一个Frame中传输完成的
(我在SOF中断中将数组值自++,然后发送)
相隔的两个256Byte,数据值都相差4,看情况应该是每次SOF来我才发送64

有高手碰到过类似问题吗 研究好几天了没个头绪快崩溃了
请多提意见 谢谢
沙发
小兆home| | 2012-8-22 13:58 | 只看该作者
能把你这个改好的程序发给我一下么,我最近也在研究这个问题,用的也是107的板子,但是程序没改好,谢谢。。。

使用特权

评论回复
板凳
byeyear| | 2012-8-22 15:48 | 只看该作者
不用SOF中断
只要有数据待发且USB总线空闲就发

使用特权

评论回复
地板
cool_coder| | 2012-8-22 16:59 | 只看该作者
如果直接在STM32里消费这些数据,而不是转发的话,完全没必要用到SOF中断。**中虚拟串口的demo里面发送缓冲区管理有问题,看看你发出的数据是不是完整如初?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

16

帖子

0

粉丝