基于STM32的USB枚举过程学习笔记(三)
2012-11-13 17:08
330 查看
上一篇介绍到了主机上电复位USB设备,在控制传输的建立过程,发送了8个字节的数据给设备,这8个字节为0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00,该请求为USB标准设备请求中的GET_DESCRIPTOR请求。0x80表示标准设备请求,数据方向是设备到主机。0x60表示请求类型GET_DESCRIPTOR。0x01表示描述符类型是设备描述符。0x40表示描述符长度。
设备在收到该请求以后,首先进行解析,根据请求中的0x40表示该控制传输有数据过程,因此进入到Data_Setup0()函数。该函数根据请求的不同描述符,执行不同的回调函数
CopyRoutine(),并在DataStageIn()函数中把要发送给主机的描述符填入USB缓冲区,等待USB主机发送IN令牌包。
主机在建立过程最后收到ACK以后,发送IN令牌包,从而进入到数据过程。在CTR_LP()函数中判断是IN0中断后,进入In0_Process()函数。在数据过程将之前填在USB缓冲器的设备描述符发给主机,并等待主机的应答。
主机在确认接收到的设备描述符没有出错后,就会返回一个0数据长度的确认包,即控制传输的状态过程。在CTR_LP()函数中判断是OUT0中断,进入Out0_Process()函数,由于在状态过程,所以调用回调函数Process_Status_OUT()。
下面和上篇一样,对照着USB分析仪捕捉的数据分析获取设备描述符这次控制传输的数据过程和状态过程。
下面通过串口打印信息查看获取设备描述符控制传输过程中的数据包的数据。打印信息如下
至此,USB主机成功获取到设备描述符。打印信息最后可以看到,主机再次复位USB,将进入到设置地址的阶段。
设备在收到该请求以后,首先进行解析,根据请求中的0x40表示该控制传输有数据过程,因此进入到Data_Setup0()函数。该函数根据请求的不同描述符,执行不同的回调函数
CopyRoutine(),并在DataStageIn()函数中把要发送给主机的描述符填入USB缓冲区,等待USB主机发送IN令牌包。
主机在建立过程最后收到ACK以后,发送IN令牌包,从而进入到数据过程。在CTR_LP()函数中判断是IN0中断后,进入In0_Process()函数。在数据过程将之前填在USB缓冲器的设备描述符发给主机,并等待主机的应答。
主机在确认接收到的设备描述符没有出错后,就会返回一个0数据长度的确认包,即控制传输的状态过程。在CTR_LP()函数中判断是OUT0中断,进入Out0_Process()函数,由于在状态过程,所以调用回调函数Process_Status_OUT()。
下面和上篇一样,对照着USB分析仪捕捉的数据分析获取设备描述符这次控制传输的数据过程和状态过程。
下面通过串口打印信息查看获取设备描述符控制传输过程中的数据包的数据。打印信息如下
至此,USB主机成功获取到设备描述符。打印信息最后可以看到,主机再次复位USB,将进入到设置地址的阶段。
相关文章推荐
- 基于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设备的枚举(上)
- CAN 学习笔记一_【基于STM32的CANopen通讯协议的实现】
- 关于stm32的USB学习笔记之USB_HW.c
- 关于stm32的USB学习笔记之usbcore.c
- STM32 USB学习笔记4
- STM32 USB学习笔记
- STM32 USB学习笔记7
- 【学习笔记】编译Linux内核(上)--编译基于x86平台的Linux内核的过程
- STM32-USB虚拟串口-学习笔记