前几篇介绍中,USB主机完成了获取设备的描述符,现在进入第二步,设置设备的地址阶段。
该阶段是一个无数据进程的操控传输。首要,在树立进程中USB主机往设备的端点0宣布一个设置地址的恳求,新地址在树立进程的数据包中。该业务的结构包含:SETUP0令牌包+SET_ADDRESS数据包+握手包。在树立进程之后直接进入到的状况进程,由于设置地址阶段是一个无数据进程的操控传输。在状况进程,设备等候主机恳求状况回来(即等候主机发送一个IN令牌包),收到IN令牌包后,设备就回来一个0长度的数据包,假如主机结语该数据包现已正确收到,就会发送应对包ACK给设备,设备收到ACK之后,就要发动新的设备地址,这样设备就分配到了一个仅有的设备地址。
接下来将这段设置地址的进程经过USB剖析仪捕捉剖析如下
接着剖析STM32 USB_HID比如中的枚举进程的设置地址阶段。同样在接收到主机的setup0令牌后,STM32 USB进入中止处理函数Setup0_Process(),由所以没有数据进程的操控传输,接着进入NoData_Setup0()函数,函数最终经过USB_StatusIn()等候主机的IN令牌,即状况阶段。主机发IN令牌进入到状况阶段,USB中止函数中碑文In0_Process()函数,该函数把在树立进程函数Setup0_Process()中保存在pInformation的地址信息,经过SetDeviceAddress()函数,装备新的设备地址。串口的调试信息如下
至此,设备新的地址设置成功,这儿设置成0x6,之后的进程将运用这个新地址。