主机和从机认识
参考
主机
从机
从usb设备连接usb口整个过程概述
参考;参考1
枚举过程简单说就是usb设备插入电脑接口后建立最初的识别设备通信的过程
参考
参考下面的分析是从开始对默认地址第一次发送Get_Descriptors开始的
主机和设备断开或连接以及高速还是全速设备检测过程
参考
设备程序框架
参考
主要由几层条件判断:
第一层:USB产生中断后,进入中断,判断中断来源:数据传输完成、复位、还是挂起
第二层:主要考虑数据传输完成中断,通过状态寄存器判断数据对象是那种数据包(setup,in,out)和那个端点,setup对应的是0端点。需要注意的是数据的真正传输还是通过IN/OUT包,在判断setup中的处理只是设置,并没有上传主机。
参考
以上面枚举过程来说,usb中断里主要处理的事情就是对Get_Descriptor命令的各种条件判断,进而知道返回的数据应该是什么。
前面的GET_PORT_STATUS为了得到设备,端口或接口信息,从机返回值是两个字节
注意第一次的Get_Descriptor命令只是读取前8个字节就足够了,只是为了得到传输的全部字节数量,
然后设备被复位,主机发送set_address命令,设备返回ack后,主机和从机就会以新地址进行通信。
第三层:接下来是多个Get_Descriptor,通过命令中的第三个字节知道是想要得到那种描述符。同时各种标准请求命令(set_address,set_configuration等)的处理
下面是HID类设备描述符类型,可判断是否是要把HID报表描述符上传
最后就是在主函数中设置中断和初始化,枚举完成后,数据正常通信的一般都是IN端点的数据上传。只有主机发送请求命令,设备才能上传数据。主机会在每个时间周期(ms)内发送请求命令