USB设备开发相关知识 USB(Universal Serial Bus)是通用串行总线,大家基本每天都要用到。与RS232串口相比具有如下优点: 1、应用简单灵活:支持热插拔,即插即用,可以总线供电,简化了仪器设备的构成。 2、更高的速度:USB2.0传输速度可达480Mb/s,USB3.0传输速度可达4.8Gb/s。 3、低的价格:支持USB接口的芯片价格已经低至一两元了。 在性能方面的优势是靠更复杂的协议支撑的,USB2.0的协议就有六百多页,读起来很是枯燥。但是要进行USB设备的开发必须掌握协议内容,可想而知,支持USB设备的开发比支持RS232设备的开发难度大多了。近期学习USB方面的开发知识,将主要知识点进行梳理、简化整理如下,希望对大家在这方面能有所帮助。 一、USB连接组件 USB系统由三类组件构成: 1、主控制器或根Hub:在每一个USB系统中必须有且只有一个主控制器,它负责初始化各项处理事务。 2、设备或功能:USB系统中的终端设备,完成用户要求的功能(比如:键盘、鼠标、麦克风、U盘等)。 3、Hub:是连接主控制器和设备通信的桥梁,具有上游端口和下游端口,上游端口直接(通过USB电缆)或间接(通过其他Hub)连接主控制器,下游端口直接或间接连接终端设备。如图一所示。 图一 二、USB连接拓扑结构 USB系统的物理连接是分层星型拓扑结构,如图二所示。每个星型结构都是以一个Hub为中心,其上游端口直接或间接连接主控制器,其下游端口直接或间接连接终端设备或其他Hub。每个USB系统中最多可以有127各终端设备或Hub,Hub最多可以级联5层,整个系统算上主控制器和终端设备最多可达7层。 图二 三、系统配置 USB系统具有随时监测设备接入和拔出的智能机制。当设备插入时,主控制器通过连续实时检测所有连接的Hub端口的特定位判断是否有设备接入,一旦检测到有设备接入,主控制器就使能该端口并给接入的设备分配一个地址,然后与新接入者建立通信并判断接入者是USB设备或Hub。当设备被拔出时,相应的端口被禁止,如果是Hub被断开,接在这个Hub的下游端口上的设备都被禁止。主控制器通过总线枚举来实时管理设备的接入和断开,总线枚举通过一系列的硬件和软件运行确保设备的成功接入和移除。 四、类 根据不同的USB设备的功能和应用要求,设备和主控制器具有不同的特征。USB标准化组织——USB开发者论坛定义了不同的类确保根据不同的功能进行分类划分。每个类定义了相应的数据和驱动软件:数据位于设备中,标记设备的特征,当主控制器请求时发送给主控制器;驱动软件存储于主控制器中,当主控制器与设备交互通信并取得设备的特征后加载相应的驱动软件。 五、数据传输类型 USB通信有四种主要的数据传输类型: 控制传输:主要用于传输新接入设备的配置数据。 批量传输:用于大量数据的收、发。 中断传输:用于具有最小延迟的有限数据传输。 同步传输:用于具有实时性要求的数据传输。 六、事务处理 每次传输都独立于其类型,基于一个或多个事务,以确保主控制器和设备之间的信息交换。每个事务本身最多由三个阶段或数据包组成: 令牌包:用于启动事务处理,由主控制器发往设备,提供类型、目标地址、数据方向等事务处理信息。 数据包:是可选项,由令牌包指定是否由数据包及数据包的方向和大小,如果有数据包由数据源方发送数据。 握手包:也是可选项,其是否存在和方向也由令牌包决定。与数据包的传输方向相反,由数据包的接收方发送握手包以显示接收状态。 七、请求 主控制器与设备间的通信都是由主控制器通过发送一个请求来发起的。所有的请求都有相同的域,设备和主控制器都知道每个域的大小、值和含义。由主控制器负责填写请求的域并发送给设备,设备接收请求、解码并按要求准备执行下一个通信步骤。 八、描述表 描述表是存储于设备存储器中的一系列数据块,主控制器和设备都知道这些数据块的组织方式。一些描述表项是所有设备都需要的,主控制器无法继续与缺少所需描述表项的设备进行通信。一些描述表项是可选的,根据设备的功能不同,可能会有所不同。每个描述表项都包括一组关于设备的定义信息,并将被发送到主控制器作为对相应请求的应答。 九、端点 端点是设备侧必须具备的源或目标数据缓存,从主控制器接收或发送到主控制器的每一组数据都将被放置到一个端点中。每个端点都由一个编号和方向唯一表征,这意味着存在一对相同类型和编号的端点,每个端点只处理一个方向的数据:输入端点是存储发送给主控制器的数据,输出端点存储主控制器发来的数据,以数据相对于主控制器的传输方向确定“输入”和“输出”。 十、设备地址 每个设备都被主控制器赋予一个唯一的地址,范围从1到127。地址0总是赋给新接入的还没有被主控制器正式赋予地址的设备。 十一、枚举 枚举是确保控制设备状态变化和实时管理任何设备连接和拆卸的过程。在该过程中,主控制器的硬件和软件协同解码设备特征状态。设备软件在此过程中确保正确接收和解码主控制器请求,然后相应地修改设备状态。 十二、设备状态 设备从断开到完全被主控制器识别及能实现其功能经历了以下状态: 接入:是设备物理连接到USB主控制器但尚未通电的状态。这一状态主要由硬件来保证。 供电:是第二状态,对应于连接到USB主控制器并刚刚通电的设备。这一状态主要由硬件来保证。 默认:当连接的设备通电后,由主控制器复位时,即达到此状态。每当设备被新连接,然后通电,然后复位,或者旧连接的设备接收到复位命令时,该状态由其软件控制。在这个状态,USB设备以方便的速度运行(在复位期间由硬件选择),并且具有默认地址,即地址为0。 赋址:在经历了之前的所有阶段后,USB设备通过从主控制器接收其唯一地址(不同于0)来达到此状态。该状态是在设备软件对主控制器请求进行正确处理之后达到的。 配置:设备在收到来自配置号为非零的主控制器的最近请求后到达此状态。该状态是在设备软件对主控制器请求进行正确处理之后达到的。 挂起:如果设备在一段已知的时间内没有流量数据,则必须进入此状态,这个时间与数据传输速度有关。事实上,主控制器根据设备的速度以电气方式迫使设备进入这种状态。当检测到该电气指示时,USB设备软件必须将其状态更改为已挂起。设备状态转换图如图三所示。 图三
|