基于STM32的USB枚举过程学习笔记(四)

作者:qq236106303

转自:http://blog.csdn.net/qq236106303/article/details/8181336


    前几篇介绍中,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,之后的过程将使用这个新地址。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值