1.枚举便是从设备读取各种描述符信息,主机依据读取的描述符信息来决议加载什么驱动,承认是什么样的设备以及怎么通讯等。
2.在USB设备的枚举进程中运用了操控传输,这种传输确保数据传输的正确性。操控传输分为:树立进程(主机建议)、可选的数据进程和状况进程。
3.操控传输解析:
(1)主机建议树立进程,树立进程开始于一个SETUP令牌包,后边紧跟一个DATA0数据包,接着便是数据进程。
(2)假如是操控读传输,那么数据进程便是输入数据(相对于USB主机来说的);假如是操控写传输,那么数据进程便是输出数据。假如在树立进程中指定了数据长度为0,那么就没有数据进程。数据进程之后是状况进程。
(3)状况进程刚好与数据进程的数据传输方向相反:假如是操控读传输,则状况进程是一个输出数据包(相对于USB主机来说的);假如是操控写传输,则状况进程是一个输入数据包。状况进程是用来承认一切的数据是否都现已正确传输完结。
4.枚举进程的解析:
(1)复位并读取端点0最大包长度:
主机监测到设备刺进后,首要对设备进行复位(也便是将差分数据线一起拉低一段时间,由于差分数据线正常状况是一高一低)。USB设备复位之后地址为0,USB主机往地址为0的设备的端点0发送获取设备描述符的规范恳求(这是一个操控传输的树立进程)。设备收到恳求后,在数据进程将设备描述符回来给主机。主机在成功获取到一个数据包的设备描述符而且承认没有过错后,就会回来一个0长度的承认数据包(状况进程)。然后就会进入到设置地址的阶段。
留意:规范的设备描述符有18个字节,可是有些USB设备端点0巨细缺乏18字节,理论上说USB主机只要经过屡次读取才干读取到18字节的数据,可是在此阶段USB主机依然只读取一次,这一次读取的数据巨细最小为8字节(USB协议规则端点0至少为8字节),在这8字节的数据中现已包括了USB主机在这个阶段需求知道的信息,也便是端点0的最大包长度。端点0的最大包长度存放于设备描述符的第8字节处。
(2)地址设置
USB主机往地址为0的设备的端点0发送一个设置地址的恳求(树立进程),新的设备地址包括在树立进程的数据包中。详细的地址由USB主机担任办理,主机会分配一个仅有的地址给刚接入的设备。USB设备在收到这个树立进程之后就直接进入到状况进程,由于这儿数据进程是不需求的。设备等候主机恳求状况回来(一个输入令牌包),收到输入令牌包后,设备就回来0长度的状况数据包。假如主机成功接收到该状况包,就会发送应对包ACK(承认字符)给设备,设备收到ACK之后,就要启用新的地址,今后主机就经过这个地址来访问该设备。
留意:D12USB接口芯片会主动等候ACK之后才启用新的地址,所以要在回来0长度的状况包之前,将地址写到D12芯片的地址寄存器中。
(3)获取设备描述符
运用新的地址,获取完好的18字节的设备描述符。假如端点0的最大包长小于18字节,那么就会有多屡次恳求数据输入。
(4)主机获取装备描述符和装备调集
装备描述符总共为9字节。主机在获取到装备描述符之后就获取装备调集。
(5)获取字符串描述符等其他的描述符。
留意:设备回来的数据长度能够小于主机恳求的长度。