基于STM32的USB枚举过程学习笔记(四)
来源:互联网 发布:分辨率知乎 编辑:程序博客网 时间:2024/04/27 18:30
前几篇介绍中,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,之后的过程将使用这个新地址。
- 基于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枚举
- 基于USB枚举过程的详细分析
- STM32 USB学习笔记
- STM32 USB学习笔记
- 学习笔记----stm32的usb外设概述
- 学习笔记----stm32的usb外设概述
- C++学习随笔之(二)参数传递
- 程序员,值得被尊敬的职业
- 深度解析Java内存的原型
- 圆圈中最后剩下的数字[算法]
- c还是java(雨思版)
- 基于STM32的USB枚举过程学习笔记(四)
- 用start-stop-daemon启动Nginx
- Windows核心编程学习笔记(20)--同步设备I/O与异步设备I/O1
- 优化Java堆大小的5个技巧
- volume rendering 从opengl到cuda pbo实现 解析
- 搭建tiny6410驱动开发环境_NFS共享文件
- 函数式编程扫盲篇
- extjs的store默认加载数据时,增加本地一条数据
- 表空间 使用 oracle 查询 表级锁 锁表 SQL语句 数据库 等待最多 实际SQL 会话 连接数 死锁 进程