基于STM32的USB枚举过程学习笔记(四)
2012-11-14 10:21
399 查看
前几篇介绍中,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,之后的过程将使用这个新地址。
该阶段是一个无数据过程的控制传输。首先,在建立过程中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,之后的过程将使用这个新地址。
相关文章推荐
- 基于STM32的USB枚举过程学习笔记(三)
- 基于STM32的USB枚举过程学习笔记(二)
- 基于STM32的USB枚举过程学习笔记(二)
- 基于STM32的USB枚举过程学习笔记(一)
- 基于STM32的USB枚举过程学习笔记
- 基于STM32的USB枚举过程学习笔记(一)
- 基于STM32的USB枚举过程学习笔记(三)
- 基于STM32的USB枚举过程学习笔记
- 基于STM32的USB枚举过程学习笔记(五)
- 基于STM32的USB枚举过程学习笔记(五)
- 基于STM32的USB枚举过程学习笔记(四)
- 基于STM32的USB程序开发笔记(四)——USB设备的枚举(上)
- STM32 USB Host Library 学习笔记 (3) USBH_HandleControl()
- USB之学习2--USB枚举过程
- ARM-LINUX学习笔记-(虚拟机linux串口终端以及USB程序下载,基于TQ2440)
- 基于usb的数据采集系统设计 学习笔记一
- stm32USB设备的连接枚举过程
- 基于STM32的SD卡FATFS文件系统学习笔记
- 【stm32学习笔记之一】跑马灯实验(基于库函数)
- 关于stm32的USB学习笔记之USB_HW.c