STM32|USB固件库心得

本文详细介绍了STM32 USB固件库在设备枚举和控制传输中的工作原理,包括USB中断配置、端点选择、描述符报告以及控制传输的三个阶段。在正常通信阶段,中断函数根据参数调用不同程序段,如接收数据和发送数据的处理。重点解析了Bulk传输中断函数及其与SOF中断的关系,强调每5ms检查发送数据的机制。
摘要由CSDN通过智能技术生成
--------------------------------------设备插入---------------------------------------------------------
1)  主机会轮回查询各个USB端口,主机检测到D+与D-之间有电压差,就认为有新的设置接入。主机等待100ms后发出复位请求。设备接到复位请求后将产生一个外部中断信号。

---------------------------------------枚举过程---------------------------------------------------------
2)  主机这时候只是知道有新的设备插入了,但是不知道插进来个什么东西,所以就开始询问它是什么设备,怎么用,负荷能力怎么样。这个时侯就进入了枚举过程。因为刚刚插入的设备没有分配地址,就用默认地址0,首先发送一个Get_deor(获取设备描述符)指令包,设备接到包后就开始解析包(其实就是你在固件程序里判断处理) ,然后按固定格式返回自己设备的设备描述符,这一步主要是主机知道你的USB设备的基础属性,比如支持的传输数据长度,电流负荷多少,支持那个USB版本,以及以后方便电脑找驱动的PID,VID。
3)  这时候主机知道你(你做的设备,简称你吧)的数据长度还有电流大小后,下一步就是给你分配一个属于你的地址。
4)  给你一个地址后就开始询问你的具体配置。首先发送一个试探性的设备配置请求Get_configuration(要求固定返回9个设备配置字),你接到后就开始发送9字节的设备配置字,其中包括你的配置字的总长度,这样主机就知道你的配置到底有多长,然后再发一次设备配置请求,这时你就开始上传所有的配置字。这个时侯主机就已经很明白你的工作方式就各种特性,然后就可以正常工作了
5)  如果你在前面的某些配置(以后章节详细说明)要求要说明自己的名字什么的,这里还要上传字符串描述符。
6)  如果是鼠标或者键盘还要上传报告描述符

---------------------------------------正常数据阶段---------------------------------------------------

7)  这个时侯你已经被主机正式接受并且注册了,你可以通过自己写测驱动或通用驱动与电脑进行通讯了。

Tips:

(一)  设备插入和枚举过程已经集成在USB的固件库中,以回调函数形式被调用。由于USB在初始化时,将所有的初始化配置都赋           给pdev指针,如果想从枚举函数逆向追溯到何时调用的,基本找不到,因为调用的时候都是调用的该指针。

       所有应对主机request的函数都在usbd_req.c中,主要包括USBD_GetDescriptor (pdev, req) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值