一,枚举是如何进行的
此处摘录一个,[12]中的关于windows下USB枚举的过程的总结:
1. The host or hub detects the connection of a new device via the device's pull
up resistors on the data pair. The host waits for at least 100ms allowing for
the plug to be inserted fully and for power to stabilise on the device.
2. Host issues a reset placing the device is the default state. The device may
now respond to the default address zero.
3. The MS Windows host asks for the first 64 bytes of the Device Descriptor.
4. After receiving the first 8 bytes of the Device Descriptor, it immediately issues
another bus reset.
5. The host now issues a Set Address command, placing the device in the
addressed state.
6. The host asks for the entire 18 bytes of the Device Descriptor.
7. It then asks for 9 bytes of the Configuration Descriptor to determine the
overall size.
8. The host asks for 255 bytes of the Configuration Descriptor.
9. Host asks for any String Descriptors if they were specified.
At the end of Step 9, Windows will ask for a driver for your device. It is
then common to see it request all the descriptors again before it issues a Set
Configuration request.
以上大概的含义如下
二,枚举的过程
1,获取设备描述符
主机向address 0发送USB协议规定的Get_Device_Descriptor命令,以取得却缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB设备的响应,该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。注意,主机一次只能列举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。
2,设置地址
主机通过发送一个Set_Address请求来分配一个唯一的地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址
3,获取设备描述符
主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。
4,获取配置描述符
主机向设备循环发送Get_Device_Configuration命令,要求USB设备回答,以读取全部配置信息。
5,获取配置描述符其它内容
6再次获取设备和配置描述符
7,主机发送Get_Device_String命令,获得字符集描述(unicode),比如产商、产品描述、型号等等。这是可选项,如果设备有这些信息,主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。本例中Device_Descriptor,Device_Configuration,Device_InterFace中有关字符串的字段都为0,因而没有字符串描述,所以此处无此命令.
8,设置配置
根据Device_Descriptor和Device_Configuration应答,主机判断是否能够提供USB的Driver,一般主机能提供几大类的设备,如键盘、鼠标、游戏操作杆、存储、打印机、扫描仪等,该操作就在后台运行。
如果主机不能提供驱动,此时将会弹出对话框,索要USB的Driver。
加载了USB设备驱动以后,主机发送Set_Configuration(x)命令请求为该设备选择一个合适的配置(x代表非0的配置值)。如果配置成功,USB设备进入“配置”状态,并可以和客户软件进行数据传输。
至此,常规的USB完成了其必须进行的配置和连接工作。查看注册表,能够发现相应的项目已经添加完毕,至此设备应当可以开始使用。不过,USB协议还提供了一些用户可选的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。
关键字:USB设备 枚举
引用地址:USB设备的枚举
此处摘录一个,[12]中的关于windows下USB枚举的过程的总结:
1. The host or hub detects the connection of a new device via the device's pull
up resistors on the data pair. The host waits for at least 100ms allowing for
the plug to be inserted fully and for power to stabilise on the device.
2. Host issues a reset placing the device is the default state. The device may
now respond to the default address zero.
3. The MS Windows host asks for the first 64 bytes of the Device Descriptor.
4. After receiving the first 8 bytes of the Device Descriptor, it immediately issues
another bus reset.
5. The host now issues a Set Address command, placing the device in the
addressed state.
6. The host asks for the entire 18 bytes of the Device Descriptor.
7. It then asks for 9 bytes of the Configuration Descriptor to determine the
overall size.
8. The host asks for 255 bytes of the Configuration Descriptor.
9. Host asks for any String Descriptors if they were specified.
At the end of Step 9, Windows will ask for a driver for your device. It is
then common to see it request all the descriptors again before it issues a Set
Configuration request.
以上大概的含义如下
二,枚举的过程
1,获取设备描述符
主机向address 0发送USB协议规定的Get_Device_Descriptor命令,以取得却缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB设备的响应,该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。注意,主机一次只能列举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。
2,设置地址
主机通过发送一个Set_Address请求来分配一个唯一的地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址
3,获取设备描述符
主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。
4,获取配置描述符
主机向设备循环发送Get_Device_Configuration命令,要求USB设备回答,以读取全部配置信息。
5,获取配置描述符其它内容
6再次获取设备和配置描述符
7,主机发送Get_Device_String命令,获得字符集描述(unicode),比如产商、产品描述、型号等等。这是可选项,如果设备有这些信息,主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。本例中Device_Descriptor,Device_Configuration,Device_InterFace中有关字符串的字段都为0,因而没有字符串描述,所以此处无此命令.
8,设置配置
根据Device_Descriptor和Device_Configuration应答,主机判断是否能够提供USB的Driver,一般主机能提供几大类的设备,如键盘、鼠标、游戏操作杆、存储、打印机、扫描仪等,该操作就在后台运行。
如果主机不能提供驱动,此时将会弹出对话框,索要USB的Driver。
加载了USB设备驱动以后,主机发送Set_Configuration(x)命令请求为该设备选择一个合适的配置(x代表非0的配置值)。如果配置成功,USB设备进入“配置”状态,并可以和客户软件进行数据传输。
至此,常规的USB完成了其必须进行的配置和连接工作。查看注册表,能够发现相应的项目已经添加完毕,至此设备应当可以开始使用。不过,USB协议还提供了一些用户可选的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。
推荐阅读最新更新时间:2024-05-02 23:59
不看不知道 USB口原来如此不简单
你是否想过为什么电脑上的USB 口可以接键盘、鼠标等等,而你的手机上面的USB 却不可以? 你是否想过电脑上的USB口可以接多少USB设备? 你是否想过为啥主板上面的USB口比起前面板的USB口要好用且稳定? 你是否想过为啥同样PCIE转USB的板卡,为啥有的很贵,有的很便宜。 如果都知道,你是否解释下一下,下面这张图是啥意思? 首先说 USB口除去物理尺寸,形状 ,颜色 ,款式的区别, 在他的内在也是有极大区别的。 一个USB口 可以是以下三种规格中的一种: 1)USB主控制器 又叫USB HOST。 可以有控制作用。 2)USB device(slave) , 就是被控制的 3)U
[嵌入式]
Maxim Integrated推出智能枚举电池充电器,可安全、快速地对移动设备进行充电
中国,北京,2013年4月8日。Maxim Integrated Products, Inc. (NASDAQ: MXIM)推出Li+电池充电器MAX77301,现已开始提供样片。该器件能够对主机器件进行智能枚举,自动识别适配器类型,并确定最快的电池充电速率。MAX77301具有高级温度监测功能,可自动调节充电电流和电池稳态电压,确保在各种温度环境下具有最高安全性。器件无需外部CPU或系统硬件即可实现上述功能。MAX77301理想用于照相机、Bluetooth®耳机、MP3播放器和便携式医疗设备等移动设备。 为提升电池安全性,电池制造商通常推荐在环境温度较低或较高时“温和”充电,这需要借助微控制器来监测和控制充电器。MAX773
[电源管理]
USB端口被占用了,怎样将其他USB设备添加到我的计
现在生产的所有外围设备几乎都配有USB端口。下面是目前可以购买的部分USB设备列表:
打印机 扫描仪 鼠标 操纵杆 模拟飞行操纵杆 数码相机 网络摄像机 科学数据采集设备 调制解调器 扬声器 电话 视频电话 存储设备,如Zip驱动器 网络连接 如今出售的大部分计算机都会提供一到两个USB插孔。目前市场上提供的USB设备很多,计算机上的插孔很快就会被用光了。例如,在我现在正在打字的计算机上,有一台USB打印机、一台USB扫描仪、一个USB网络摄像机和一个USB网络连接。但我的计算机上只有一个USB接口。很明显,现在的问题是“我该如何将这些设备都连接到计算机上?” 解决问题的简单办法就
[模拟电子]
基于Linux的USB主/从设备之间的三种通信方式
随着简单易用的USB接口日益流行,在嵌入式系统中添加对USB接口的支持已成为大势所趋。本文通过介绍Linux中支持USB的各种模块和库,分析了在Linux上利用USB实现高速串口和以太网连接等通信方式的具体方法。 通用串行总线(USB,Universal Serial Bus)是一种非常实用的通信接口,其应用日益广泛。有三种方法可以使运行Linux操作系统的嵌入式系统支持USB接口,本文将对这三种方法逐一进行介绍。
基于Linux的USB设备与USB主机一般有以下三种通信方式:1.一些功能最完备结构也最复杂的设备采用用户定制内核模块来实现在标准USB总线上运行复杂的高级协议,而由USB主机上相应的用户驱动程序和应用
[嵌入式]
嵌入式系统应用中的USB主设备功能分析
USB已经成为设备和PC之间通信的标准方式,从通用设备(如闪存设备和鼠标)到专用设备,该标准几乎完全替代了其他的串行通信协议。
USB外围设备彼此之间不能相互通信,它们只能与具有控制总线能力的USB主设备通信。直到最近,也只有PC具有主设备能力。但目前,许多微控制器也具有了嵌入式USB主设备的功能,这使得嵌入式应用可以连接更加广泛的USB外围设备。
USB闪存驱动器是一种使用非常广泛的USB外围设备,它已经成为传递或存储大量数据的廉价介质,许多数据记录设备正是得益于它才得以发展。对于远程的长期数据记录,可以先采集,并存储在闪存驱动器中,然后带回到方便分析处理的地方。
图1 具有嵌入式USB主设备功能的微
[嵌入式]
USB学习系列之二——USB设备的插入检测机制
1.USB的插入检测机制:USB端口的D+和D-均用一个15k的电阻接地,当无设备接入时,均处于低电平;在设备端在D+(表示高速设备或者全速设备)或者D-(表示低速设备)接了一个1.5k的上拉电阻到+3.3v,一旦将设备接入,USB端口的D+或者D-其中一个被拉高为3v,系统识别到外部设备接入。 注意:高速设备首先会被识别为全速设备,然后再通过集线器和设备二者的确认最后切换到高速模式下。
在高速模式下,采用的是电流传输模式,这个时候上拉电阻需要从D+上断开。
2.当设备没有枚举成功时(可以通过一个10K的电阻将USB的电源端和D+或者D-连接起来,电脑会发现一个无法识别的设备,这个设备的PID和VID都是0,根据每个特性可以
[嵌入式]
USB设备驱动程序开发
引言 USB总线是1995年微软、IBM等公司推出的一种新型通信标准总线,特点是速度快、价格低、独立供电、支持热插拔等,其版本从早期的1.0、1.1已经发展到目前的2.0版本,2.0版本的最高数据传输速度达到480Mbit/s,能满足包括视频在内的多种高速外部设备的数据传输要求,由于其众多的优点,USB总线越来越多的被应用到计算机与外设的接口中,芯片厂家也提供了多种USB接口芯片供设计者使用,为了开发出功能强大的USB设备,设计者往往需要自己开发USB设备驱动程序,驱动程序开发一直是Windows开发中较难的一个方面,但是通过使用专门的驱动程序开发包能减小开发的难度,提高工作效率,本文使用Compuware Numeg
[电源管理]
USB学习系列之三——USB设备的枚举
1.枚举就是从设备读取各种描述符信息,主机根据读取的描述符信息来决定加载什么驱动,确定是什么样的设备以及如何通信等。 2.在USB设备的枚举过程中使用了控制传输,这种传输保证数据传输的正确性。控制传输分为:建立过程(主机发起)、可选的数据过程和状态过程。
3.控制传输解析:
(1)主机发起建立过程,建立过程开始于一个SETUP令牌包,后面紧跟一个DATA0数据包,接着就是数据过程。
(2)如果是控制读传输,那么数据过程就是输入数据(相对于USB主机来说的);如果是控制写传输,那么数据过程就是输出数据。如果在建立过程中指定了数据长度为0,那么就没有数据过程。数据过程之后是状态过程。
(3)状态过程刚好与数据过程的数据传
[嵌入式]