本帖最后由 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
有高手碰到过类似问题吗 研究好几天了没个头绪快崩溃了
请多提意见 谢谢 |