微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > USB枚举流程分析

USB枚举流程分析

时间:12-12 来源:互联网 点击:
USB连接拓扑结构
对于每个usb系统来说,都有一个称为HOST控制器的设备,该Host控制器和一个根Hub作为一个整体。这个根HUb下可以接多级Hub,每个Hub又可以接子Hub。每个usb设备作为一个节点接在不同级别的Hub上。每条usb总线上最多可以接127个设备。

图1 USB总线拓扑结构
usb主控制器:
负责处理主机与设备之间的电气和协议层的互联。常见的usb主控制器规格有:
OHCI:只要是非pc系统上的usb芯片
UHCI:usb1.1规格
EHCI: 兼容上面种规格,遵循usb2.0规范

每个usb host控制器都会自带一个usb hub ,被称为根Hub。这个根hub可以接子hub,每个hub上挂载usb设备。通过外接usb hub,可以插更多的usb设备。当usb设备插入到usb Hub或从上面拔出时,都会发出电信号通知系统。

usb设备就是插在usb总线上工作的设备,广义的讲usb Hub也算是usb设备。有的usb设备功能单一,直接挂载在usb hub上。而有的usb设备功能复杂,会将多个usb功能结合在一起,称为一个复合设备。

usb设备逻辑结构

图2 USB总线逻辑结构
在usb设备的逻辑组织中,包含设备,配置,接口,端点4个层次。
设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个端点。
每个usb设备都可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合(在探测,连接期间需从其中选定一个),配置由多个接口组成。在usb协议中,接口由多个端点组成,代表一个基本的功能,是usb设备驱动程序控制的对象,一个功能复杂的usb设备可以具有多个接口,而接口是端点的汇集
例子
一个usb播放器带有音频,视频功能,还有旋钮和按钮
配置1 音频(接口)+旋钮(接口)
配置2 视频(接口)+音频(接口)+按钮(接口)
每个接口对应需要一个驱动程序

usb设备中的唯一可寻址部分是设备的端点。它是位于usb设备或主机上的一个数据缓冲区,用来存放和发送usb的各种数据。主机和设备的通信最终作用于设备上的各个端点,它是主机与设备间通信流的一个逻辑终端

每个usb设备有一个唯一的地址,这个地址是在设备连上主机时,由主机分配的,而设备中的每个端点在设备内部有唯一的端点号,这个端点号是在设计设备时给定的。每个端点都是一个简单的连接点,或者支持数据流进设备,或者支持其流出设备,两者不可兼得。

基于PnP机制,设备被枚举时,它必须向主机报告各个端点的特性,包括端点号,通信方向,端点支持的最大包大小,带宽要求等(其中端点支持的最大包大小叫做数据有效负载)。每个设备必须有端点0,它用于设备枚举和对设备进行一些基本的控制功能。除了端点0,其余的端点在设备配置之前不能与主机通信,只有向主机报告这些端点的特性并被确认后才能被激活。

LInux USB枚举过程

USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。USB总线拓扑结构见上图(最顶端为主机的Root Hub)

一旦获悉有新设备连接上来,主机就会发送一系列的请求(Resqusts)给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设 备(Device)之间的通信通道。然后主机以控制传输(ControlTransfer)的方式,通过端点0(Endpoint 0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。所有的USB设备必须支持标准请求 (StandardRequests),控制传输方式(ControlTransfer)和端点0(Endpoint 0)。

从用户角度来看,枚举过程是自动完成并不可见的。但很多初次使用的设备连接时,系统会弹出说新硬件检测到,设备安装成功,可以使用之类的消息提示框,而且有时还需要用户配合选择安装相关的驱动。

当枚举完成后,这个新添加的设备可在Windows的设备管理器里面看到,当用户删除这个设备/硬件时,系统把这个设备从设备管理器里删除。

对于一般的设备,固件(Firmware)内包含主机所要请求的信息,而有些设备则是完全由硬件来负责响应主机的请求。在主机方面则是由操作系统而非应用程序负责处理相关枚举操作。

枚举步骤
USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))。

下面步骤是Windows系统下典型的枚举过程,但是固件不能依此就认为所有的枚举操作都是按照这样一个流程行进。设备必须在任何时候都能正确处理所有的主机请求。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top