1.枚举就是从设备读取各种描述符信息,主机根据读取的描述符信息来决定加载什么驱动,确定是什么样的设备以及如何通信等。
2.在USB设备的枚举过程中使用了控制传输,这种传输保证数据传输的正确性。控制传输分为:建立过程(主机发起)、可选的数据过程和状态过程。
3.控制传输解析:
(1)主机发起建立过程,建立过程开始于一个SETUP令牌包,后面紧跟一个DATA0数据包,接着就是数据过程。
(2)如果是控制读传输,那么数据过程就是输入数据(相对于USB主机来说的);如果是控制写传输,那么数据过程就是输出数据。如果在建立过程中指定了数据长度为0,那么就没有数据过程。数据过程之后是状态过程。
(3)状态过程刚好与数据过程的数据传输方向相反:如果是控制读传输,则状态过程是一个输出数据包(相对于USB主机来说的);如果是控制写传输,则状态过程是一个输入数据包。状态过程是用来确认所有的数据是否都已经正确传输完成。
4.枚举过程的解析:
(1)复位并读取端点0最大包长度:
主机监测到设备插入后,首先对设备进行复位(也就是将差分数据线同时拉低一段时间,因为差分数据线正常状态是一高一低)。USB设备复位之后地址为0,USB主机往地址为0的设备的端点0发送获取设备描述符的标准请求(这是一个控制传输的建立过程)。设备收到请求后,在数据过程将设备描述符返回给主机。主机在成功获取到一个数据包的设备描述符并且确认没有错误后,就会返回一个0长度的确认数据包(状态过程)。然后就会进入到设置地址的阶段。
注意:标准的设备描述符有18个字节,但是有些USB设备端点0大小不足18字节,理论上说USB主机只有通过多次读取才能读取到18字节的数据,但是在此阶段USB主机仍然只读取一次,这一次读取的数据大小最小为8字节(USB协议规定端点0至少为8字节),在这8字节的数据中已经包含了USB主机在这个阶段需要知道的信息,也就是端点0的最大包长度。端点0的最大包长度存放于设备描述符的第8字节处。
(2)地址设置
USB主机往地址为0的设备的端点0发送一个设置地址的请求(建立过程),新的设备地址包含在建立过程的数据包中。具体的地址由USB主机负责管理,主机会分配一个唯一的地址给刚接入的设备。USB设备在收到这个建立过程之后就直接进入到状态过程,因为这里数据过程是不需要的。设备等待主机请求状态返回(一个输入令牌包),收到输入令牌包后,设备就返回0长度的状态数据包。如果主机成功接收到该状态包,就会发送应答包ACK(确认字符)给设备,设备收到ACK之后,就要启用新的地址,以后主机就通过这个地址来访问该设备。
注意:D12USB接口芯片会自动等待ACK之后才启用新的地址,所以要在返回0长度的状态包之前,将地址写到D12芯片的地址寄存器中。
(3)获取设备描述符
使用新的地址,获取完整的18字节的设备描述符。如果端点0的最大包长小于18字节,那么就会有多多次请求数据输入。
(4)主机获取配置描述符和配置集合
配置描述符总共为9字节。主机在获取到配置描述符之后就获取配置集合。
(5)获取字符串描述符等其他的描述符。
注意:设备返回的数据长度可以小于主机请求的长度。
关键字:USB学习 USB设备 枚举
引用地址:
USB学习系列之三——USB设备的枚举
推荐阅读最新更新时间:2024-05-03 00:04
STM32开发笔记33:解决USB CDC “该设备无法启动”问题
单片机型号:STM32F401 调试STM32的USB CDC设备已经有好多次了,可以看一下前面写的日志,针对不同的STM32 MCU都进行了调试。原本以为STM32F4会很简单,可处处是坑,已经调到半夜才解决问题,把问题重新梳理。 我现在使用的芯片时STM32F401,在STM32CubeMX中,按照以下步骤设置。 1、设置为全速从设备,不做USB电源检测。 2、使能CDC,其它采用默认设置。 按照上述设置生成的程序,下载到芯片后,接入计算机,默认是这样的 仔细查看细节问题是这样的 找了好久不能解决问题,网上有一种说法是,是更改usbd_conf.h
[单片机]
Maxim面向USB Type-C™设备推出灵活的Buck转换器
电子网消息,Maxim推出MAX77756 24V、500mA、低静态电流(Iq) buck转换器,为多单元、USB Type-C产品的开发者提供灵活的选项,满足其更高电流、双路输入及I2C支持等需求。 USB Type-C产品必须产生一路3.3V的常开电源,以检测USB插入事件。利用MAX77756降压转换器可以从Type-C供电 (PD)电压(5V至20V)产生一路常开输出电压(1.8V/3.3V/5.0V),用作端口控制器的数字电源。MAX77756的静态电流低至20μA,大幅降低空闲模式下的功耗,进而延长电池寿命。为简化系统设计,MAX77756采用双输入理想二极管构成的“或”电路,允许芯片由外部USB电源供电(
[半导体设计/制造]
USB设备控制器端点缓冲区的优化技术设计
这里首先简要介绍USB中端点的概念,并给出一款异步FIFO的设计方案。然后根据USB四种传输类型的特点,提出基于该FIFO结构的不同类型的端点缓冲区的设计方案。特别是对于控制端点提出了一种新型的双向异步FIFO结构,在保证控制传输的前提下,减小了将近1/2的电路面积。最后给出在Synopsys平台下电路的VLSL实现结果。 USB 2.0规范将USB接口的传输速度提高了40倍。传输速度的提升使得USB设备控制器的设计指标也随之提高,虽然协议中对于缓冲区的设计要求并没有本质上的改变,但是由于总线带宽与传输速度的提高,各个芯片供应商均推出了自己的缓冲区设计方案。为了提高USB接口的数据存取速度,通常使用异步FIFO来设计端点缓冲
[嵌入式]
基于USB2.0的高速无线数传接收设备的数据接收存储方法
摘要:介绍了一种利用USB2.0接口芯片ISP1581并配合FPGA芯片EP1K30T144和DSP芯片TMS320F206实现无线数传接收设备中数据接收存储的方法。这种方法具有接口简单、使用方便等特点。
关键词:位同步 帧同步 USB2.0 差错控制
数据接收存储技术革新是信号采集处理领域内的一个重要课题。利用这种技术,可以把信号的实时采集和精确处理在时间上分为两个阶段,有利于获得令人更满意的处理结果。在无线数传接收设备中应用数据接收存储方法时,除了要满足数据传输速率和差错控制方面的要求外,还需要考虑如何使设备易于携带、接口简单、使用方便。
传统外设接口技术不但数据传输速率较低,独占中断、I/O地址、DMA通道等计算机系
[应用]
STM32 USB学习笔记2
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library STM32Cube库中提供了一些有关USB的例程,在其工程目录下的Applications目录中,这里打开STM3210E_EVAL目录,可以看到如下例程: 这里选取一个简单的例子CDC_Standalone,为一个USB通信例程,具体实现是一个USB转串口的功能,相当于USB串口线。把示例里面的inc和src目录下的文件拷贝到新建工程中,这里是把跟usb通信相关的文件放到了vcp目录下。文件目录结构如下: 其中BSP目录很简单,由于所购
[单片机]
STM32F4 开发笔记10:USB FS的枚举方法
FS是Full Speed的意思,指全速USB设备,在电路设计时,通过在DP接1.5K上拉电阻到电源的方法告知主机为全速USB设备,但是在具体使用时,还有问题存在,就是当单片机复位后,主机端虽然还能辨认当前USB设备,但是不能够直接使用,其原因在于USB设备重新启动后,需要完成一个枚举过程,以通知主机。 枚举的具体电路如下图所示,其原理很简单,系统上电后将DE引脚拉高,待USB初始化完毕后,将DE引脚拉低即可。 具体的头文件程序代码如下,建立DE引脚类,并在CUSB类中具体声明。 #ifndef USB_H_ #define USB_H_ #ifdef __cplusplus extern C { cla
[单片机]
USB音频设备类的音频信号同步解决方案
本文针对使用USB_Audio_Class进行语音设备设计时需要解决的音频 信号同步 问题进行了介绍,并给出了相应的解决方法和部分源代码。 引 言 USB总线协议经历了从USB1.1到USB2.0再到目前的USB OTG(USB On-The-Go)的发展过程,在USB不断发展完善的同时,越来越多的USB产品大量上市。现在的PC机通过USB Hub设备和多个USB控制器,能同时支持扩展的USB设备已经达到数百个。 在USB总线传输中,任何一次USB的数据传输都必须由主机来发起和控制,所有的USB外设都只能和主机建立连接,任何两个外设之间或者两个主机之间无法直接通信。目前,扮演主机角色的大多是个人电脑(PC)
[模拟电子]
用于Android设备的USB接口
最近业界的发展显示,智能手机/便携系统与自动化系统或机械系统之间存在巨大的市场潜力。2011年春季谷歌引入的Android开放访问架构,开启了基于Android操作系统的设备的巨大可能--允许智能手机和平板电脑控制外部硬件。这种开放的附件框架为便携设备能够推动商务,消费和工业环境的自动化进程提供了平台,利用已经广泛采用并为用户所熟悉的操作系统,连接从厨房电器到重型机械的一切设备。 目前获取微处理器和移动设备之间点对点通信电线的最流行的一种方式是使用通用串行总线(USB)接口。由于广泛普及而受到工程师们的青睐(特别是在消费电子和计算机领域)。下面的章节就如何在基于Android的平板和具备USB控制功能的微处理器之间建立这样
[嵌入式]