请选择 进入手机版 | 继续访问电脑版
搜索
查看: 3104|回复: 2

[分享] USB的识别过程

[复制链接]

该用户从未签到

5

主题

21

帖子

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2013-8-20 09:07:58 | 显示全部楼层 |阅读模式
 现在很多的主控上都带有USB的功能,但是对于初学者来说,这方面应用还是比较棘手,因为USB的不但固件程序需要编写,PC端的驱动也要编写,而且驱动写好了还要写个上位机才能看出效果。这样调试起来十分困难,建议从USB的键盘,鼠标开始做,了解清楚了,再做自己的协议就比较简单了。 
USB的概念历史啥的这里就不说了。我们先不管具体的数据包格式,这一节先从整个包的层面上简单的说,过程是这样的, 
(1)设备插入,主机会轮回查询各个USB端口,主机检测到D+与D-之间有电压差,就认为有新的设置接入。主机等待100ms后发出复位请求。设备接到复位请求后将产生一个外部中断信号。 
(2)枚举过程,主机这时候只是知道有新的设备插入了,但是不知道插进来个什么东西,所以就开始询问它是什么设备,怎么用,负荷能力怎么样。这时候就进入了枚举过程。因为刚刚插入的设备没有分配地址,就用默认地址0,首先发送一个Get_descriptor(获取设备描述符)指令包,设备接到包后就开始解析包(其实就是你在固件程序里判断处理),然后按固定格式返回自己设备的设备描述符,这一步主要是主机知道你的USB设备的基础属性,比如支持的传输数据长度,电流负荷,支持的USB版本,以及以后方便电脑找驱动的PID和VID。
(3)这时候主机知道设备(你做的设备,简称设备吧)的数据长度还有电流大小后,下一步就是给设备分配一个属于设备的地址。 
(4)给设备一个地址后就开始询问设备的具体配置。首先发送一个试探性的设备配置请求Get_configuration(要求固定返回9个设备配置字),设备接到后就开始发送9字节的设备配置字,其中包括设备的配置字的总长度,这样主机就知道设备的配置到底有多长,然后再发一次设备配置请求,这时设备就开始上传所有的配置字。这时侯主机就已经很明白设备的工作方式就各种特性,然后就可以正常工作了。 
(5)如果设备在前面的某些配置(以后章节详细说明)要求要说明自己的名字什么的,这里还要上传字符串描述符。 
(6)如果是鼠标或者键盘还要上传报告描述符。  
(7)争创数据传输,这个时侯设备已经被主机正式接受并且注册了,你可以通过自己写的测驱动或通用驱动与电脑进行通讯了。
回复

使用道具 举报

该用户从未签到

3

主题

329

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-4-9
发表于 2020-5-12 16:57:44 | 显示全部楼层
如果从设备虚拟了多个串口,主机在哪个步骤完成识别的?
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

43

帖子

0

蝴蝶豆

中级会员

最后登录
2023-5-16
发表于 2021-3-3 00:20:30 | 显示全部楼层
谢谢分享,赞
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-19 06:38 , Processed in 0.147087 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表