痛下决心一定要把USB的程序搞懂,也许表述有很多错误的地方,欢迎指正。
USB需要一个主机host和设备device。
USB设备和主机的通信需要先建立virtual pipeline,然后设备传回描述符给主机。joystick属于HID设备,工作在中断方式。但并非通常单片机所谓的中断,而实际上是查询的方式。
USB采用NRZI编码,而且需要位填塞,但是这些工作通过硬件SIE serial interface engine完成,编程不用关心。
USB数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。什么封包格式等好像程序没有涉及。
而描述符就需要程序来提供了。
usb_desc.c 提供了设备、端点、接口、字符串、群组、制造商描述符
usb_prop.c 提供了Device_Property, Device_Table & USER_STANDARD_REQUEST 结构描述,这3个东东定义于usb_core.c。
hw_config.c 提供了实际硬件需要的操作函数,Joystick_Send()通过函数UserToPMABufferCopy 和 SetEPTxValid 将坐标值发给了USB端口。
stm32f10x_it.c 里面有
void USB_LP_CAN_RX0_IRQHandler(void)
{
USB_Istr(); //定义于usb_istr.c
}
文章评论(0条评论)
登录后参与讨论