最近一直在学习USB,总算是稍微有点懂了。现在自己写的PC端USB驱动程序和应用程序终于可以成功实现STM32的BULK /INT传输和有数据/无数据传输控制请求等功能(STM32固件的程序我是用STM32 USB开发工具包中的UART范例进行的修改)。应用程序与STM32通讯测试基本没啥问题了,就是有关传输速度的问题一直比较困惑。 STM32的USB接口是USB1.1的全速接口,进行BULK传输的时候,端点最大的包大小按照USB规范是64个字节,并且按照USB1.1FULLSPEED的规范,USB数据的传输是基于令牌的,也就是说假如设备打算要向主机发送数据,必须先由主机发送一个IN的令牌,设备收到令牌后,紧接着在其第二阶段送出要发送的数据,如此完成一个数据的IN操作。 而规范上定义令牌发送的间隔是1毫秒,这样就意味着如果按照BULK传输最大64字节的规定,则最大传输速率是64字节*(1/1毫秒)=64K字节/秒。不过规范上也说到一个令牌后面可以跟多个USB传输事务,也就是个令牌(1帧)最大可以跟15个64字节的数据,1毫秒的间隔,这样可以达到64字节*15*1000 = 960K字节/秒的理论最大传输速度。 现在假如我有一个4KB的数据要传输,现在我是分成多个64字节的请求进行传输的,在BUS HOUND5上看到传输的速度大约只有40KB/S不到,显然这个速度很不理想。我的问题是怎样才能在传输的时候在一帧内连续传输15个事务使STM32传输速度最快?在STM32的USB开发包中具体如何实现?有没有这样的程序范例能供学习下,还请大家不吝赐教,谢谢! |