USB通信的优化原理很简单,USB FullSpeed可以在一个ms内,最多发送或者接受1023Bytes的数据,如果分成2次发送的话,需要使用的时间就是2ms(因为USB是1ms同步的)。所以,为了优化USB数据的传输,应该尽可能的在一个USB包里包含尽可能多的数据,这样就可以减少USB通信的次数,从而大大提高通信的效率。
为了实现快速的USB到其他接口的转换,USB_TO_XXX使用比较大的USB命令缓存来实现在一次USB传输中,发送和接受尽可能多的数据。比如:USB_TO_SPI,系统可以一次性的发送1000次SPI操作对应的命令数据,操作完后,再接受这1000次的结果(当然,只有设置需要返回结果的命令中才会返回结果)。这种方式下,USB通信的效率是最高的。
USB_TO_XXX的USB命令:
#define USB_TO_USART 0x20
#define USB_TO_SPI 0x21
#define USB_TO_I2C 0x22
#define USB_TO_GPIO 0x23
#define USB_TO_CAN 0x24
#define USB_TO_PWM 0x25
#define USB_TO_ADC 0x26
#define USB_TO_DAC 0x27
#define USB_TO_POWER 0x28
#define USB_TO_DELAY 0x2E
#define USB_TO_ALL 0x2F
其中,USB_TO_ALL命令用来把以前的USB_TO_XXX命令放在一个USB数据包中,以获得更快的速度。
已经实现了USB_TO_SPI和USB_TO_GPIO,测试OK,这2个接口主要用于S51/S52的支持。固件程序,上位机驱动和上位机应用程序都已经测试OK。添加其他接口也已经变得非常简单了,等到以后需要了再一个个添加。
有人需要的话,发布固件源代码和上位机驱动源代码,USB_TO_XXX的应用可以参考S51/S52 + Versaloon。
文章评论(0条评论)
登录后参与讨论