微控制器USB的技术及应用入门(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-19 15:05:30

点击下载

作者:工业和信息化部人才交流中心

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

微控制器USB的技术及应用入门

微控制器USB的技术及应用入门试读:

前言

在个人计算机中,USB接口已经取代了串口和并口。目前,USB接口作为一种简易、高速、可靠的计算机通信总线技术已经相当普及,相应的外设周边极其丰富。配备USB接口的游戏手柄、U盘、移动硬盘、手机等设备依靠USB的特性广泛应用于我们日常工作和生活之中。

随着人工智能和物联网(IoT)的兴起,工程师使用各种USB扩展棒(Dongle)在现有设备上扩展出ZigBee、BLE等无线连接的功能,支持实现无线连接的快速原型搭建,或者为原来没有无线连接能力的设备提供简易、高效的无线连接功能。由于USB接口具有数据吞吐量高及连接简单等优点,各种神经网络计算棒也是通过USB接口与计算机或高性能处理器连接来验证功能或应用于现有产品中的。通过USB接口,处理器与神经网络计算棒可以很容易地实现采集原始数据和模板数据的互传。

嵌入式微控制器(MCU)应用到我们工作和生活的方方面面,在片上集成USB控制器已是大势所趋。新的应用需求(如物联网和深度学习)也要求工程师掌握USB接口。2

对于USART,SPI和IC等经典的串行接口来说,USB在硬件设计及软件开发方面都增加了难度,对工程师和开发者使用USB提出了更高的要求。本书是一线工程师项目开发经验的总结,从USB项目应用角度出发,系统地介绍嵌入式USB接口的硬件、软件和认证方面的技术。本书内容涵盖USB的基础概念、软件协议栈的分析、应用类的分析举例及总结USB的认证经验。希望本书能够供入门的初学者阅读,又能帮助应用工程师解决日常USB开发中遇到的痛点和难点。

本书总共10章,第1章由牛晓东执笔,第2章和第10章由王鹏执笔,第3章和第9章由王以昌执笔,第4章由郭嘉执笔,第5章、第6章和第8章由杨熙执笔,第7章由贾丁执笔。本书的撰写工作得到了蒋文卫先生的支持,在此表示衷心的感谢。本书还参考了一些文献,在此也一并向有关文献的作者表示感谢。

特别感谢本系列丛书指导委员会及专家委员会的各位专家对本书大纲结构给予的宝贵建议。

由于作者水平所限,书中不足之处,希望各位专家和广大读者批评指正。物联网与人工智能应用开发丛书《微控制器USB的技术与应用入门》作者团队2018年2月缩略词

ACK:确认信号

EOF:结束帧

EOP:结束包

HID:Human Interface Device,人机接口设备

Hub:集线器

MSC:Mass Storage Class,大容量存储类

SOF:起始帧

SOP:起始包

USB:Universal Serial Bus,通用串行总线第1章USB基础及协议概述本章介绍USB的基本概念及其系统结构、特点,让使用恩智浦微控制器的用户了解基本的USB外设概念和如何使用恩智浦微控制器的USB外设。1.1简介1.1.1 背景

USB是通用串行总线(Universal Serial Bus)的缩写,其官方主页为www.usb.org。USB是一种简易、双向、快速、同步、即插即用(Plug and Play,PnP)且支持热插拔功能的串行接口。USB设备现在已经非常普及,如U盘、鼠标、键盘等。USB协议曾经出现过多种版本,如USB1.0、USB1.1、USB2.0、USB3.0等。在协议迭代的过程中,USB组织又提出了OTG(On The Go)规范,解决了USB设备和设备之间、主机和主机之间不能互联的问题。2016年发布的USB TMType-C接口,不仅解决了正反插入的问题,同时还提升了供电能力和音视频输出能力。

目前,恩智浦微USB控制器产品均为支持USB2.0规范的产品,尚没有支持USB3.0或更高版本USB规范的产品,所以本书以介绍USB2.0相关知识为主线。1.1.2 USB的特点

USB接口体积小巧,支持热插拔、即插即用,兼容性好,可节省系统资源及降低成本。USB接口即插即用的优点,使其可以在不重启计算机系统的情况下,直接把外部设备连接到计算机的USB接口,并在驱动程序正常的情况下立刻开始工作。

相较于微控制器集成的串行外设,USB具有以下特点。

· 接口物理连接器体积小巧。与以太网接口相比,USB的接口小巧,PHY易于集成在片上且发热量小。

· USB2.0支持3种传输速度:低速模式(1.5Mb/s)、全速模式(12Mb/s)和高速模式(480Mb/s)。由于USB协议自身的开销(如同步、令牌、校验、填充位等),实际有效的传输速度会略低,但比经典的RS232串口的传输速率要高。

· USB为共享式接口技术,采用“菊花链”式的扩展方式支持多个外设的链接。多个USB设备可以通过USB集线器连接到同一个计算机USB端口。USB2.0规范中规定一个USB主控制器可以连接最多126个外部设备。

· USB采用即插即用技术,不需要复位芯片或者USB的控制器。USB支持热插拔,客户可以随时断开USB设备与微控制器的连接,此时微控制器的USB外设可以检测到用户的插拔动作。

· USB接口支持4种传输模式,即控制传输、中断传输、批量传输和同步传输,以满足不同的应用场合需求。

· USB接口性价比高。目前越来越多的微控制器集成了USB控制器,有的只支持从机模式,有的支持主机和从机模式,有的还支持OTG。这方面LPC和Kinetis系列都有丰富的产品线支持。

· USB接口具有外部供电能力和功耗管理规范。按照USB的标准,一般的USB主机均具有500mA/5V的供电能力。USB协议规范中还规定了完善的电源管理方式,支持低功耗模式,可以大大节省计算机和外部设备的功耗。

· USB接口具有良好的兼容性。USB协议组织制定了USB1.0、USB1.1、USB2.0、USB3.0规范,以及无线USB和USB OTG的版本,由于USB组织的规范,这些协议具有良好的向下兼容性,使得高低版本的USB设备均能相互兼容工作。

· USB可以与目前的计算机进行数据交互。在计算机逐步把并行接口、串口和以太网口砍掉之后,USB已经作为统一的对外接口。集成有USB的微控制器可以与PC进行无缝交互。

表1-1对USB接口和其他嵌入式微处理外设接口的性能进行了比较。表1-1 常用嵌入式微处理器串行接口性能比较1.2系统架构1.2.1 USB总线架构

典型的USB应用系统由USB主机、USB设备和USB线缆组成。在USB总线体系中,外部设备一般统一为USB设备,主要完成特定的功能,如常用的U盘、移动硬盘、鼠标、键盘、游戏手柄等。USB主机是系统的主人,负责USB通信过程中数据的控制和处理,最典型的USB主机就是常用的PC计算机。在USB传输过程中,USB主机发送给USB设备的数据传输称为下行(Down Stream)通信,由USB设备发送给USB主机的数据传输称为上行(Up Stream)通信。图1-1展示了一个USB最小的系统构成。图1-1 USB最小的系统构成1.2.2 USB主机和设备

USB主机包含USB主控制,并且能够完成USB主机和设备之间的数据管理和传输。在整个USB的通信过程中,USB主机处于主导地位,由USB主机发起数据和命令的传输,USB设备被动响应USB主机发来的请求命令。在USB的规范中,仅允许一个USB主机存在于系统中,并且USB主机最多只能分配127个地址(1~127)。

USB设备根据自身的功能分为USB集线器(Hub)和USB功能设备。USB集线器(Hub)主要为USB主机提供额外的连接点,从而扩展出更多的USB主机端口。在USB协议规定中,USB集线器最多可以实现级联5级,第5级集线器只能接USB设备,不能再接集线器,如图1-2所示。

USB设备(Device)用于实现特定的功能。USB设备通常用于扩展USB主机的功能,实现控制、数据传输等功能。每个USB设备包含描述其功能和资源的需求配置信息,如USB设备的类型、带宽、接口种类等。当USB设备连接到USB主机时,USB主机会获取USB设备的配置信息,并根据该配置信息调整端口的设置、建立通信。

USB主机和USB设备间的通信是通过管道(Pipe)进行的,如图1-3所示。在USB协议中,管道是指在USB主机端的一组缓冲区,用于管道中数据的收发;在USB设备端,有一个特定端点(Endpoint,ENDP)与管道对接,每个端点都是一个<索引,方向>二元组。USB设备地址、端点索引和端点方向的组合可以唯一确定USB主机和USB设备间的通信。图1-2 USB总线架构图1-3 USB管道和端点1.2.3 USB分层结构

类似以太网的分层结构设计,USB总线系统也有明确的分层结构。完整的USB应用系统可以分为功能层、设备层和总线接口层,如图1-4所示。图1-4 USB分层结构(1)功能层。功能层在USB应用系统中主要负责USB主机和设备之间的数据传输,由USB设备的功能单元和相应的USB主机程序构成。功能层规定了数据传输的类型,分为以下4种:控制传输(Control Transfer)、批量传输(Bulk Transfer)、中断传输(Interrupt Transfer)、同步传输(Isochronous Transfer)。(2)设备层。设备层在USB系统中负责管理USB设备、分配USB设备的地址、获取设备描述符等。设备层的工作需要驱动程序、USB设备和USB主机的支持。在设备层中,USB驱动程序可以获得该USB设备的能力。(3)总线接口层。总线接口层在USB系统之中实现USB数据传输的时序。USB总线数据传输使用NRZI编码,既反向非归零编码。在USB总线接口层中,USB控制器自动进行NRZI编码或者解码,完成数据传输过程。总线接口层一般由USB接口硬件自动完成。1.2.4 USB物理连接

1.USB 电缆

USB2.0通常通过一根四线的电缆传送信号和电源(见图1-5),BUS其中,D+、D-两根线用于传输差分信号,V为电源线,GND为地线。图1-5 USB的电缆

为了保证信号传输的质量和抑制干扰,USB采用差分信号进行传输。低电平时,差分信号可以有效地抑制干扰。当信号以较低电平进行传输时,比较容易受到其他信号的干扰,而差分信号则采用大小相等、极性相反的信号,所以能使信号的电平加倍,减少干扰信号对USB信号的影响。更重要的是,如果两种信号都存在噪声干扰,差分信号的相减可以抵消噪声,因此差分信号对信号干扰有着天然的免疫力,这也是USB传输可靠性的一个保证。

2.USB连接器

USB协议规定了USB连接器的具体类型,分为A型和B型,如表1-2所示。USB连接器的A型插座(Female,母头)和A型插头(Male,公头)互相匹配,B型插座和B型插头互相匹配。通常,USB主机或者USB集线器的下行端口多使用A型插座;USB设备或USB集线器的上行端口采用B型插座,因此B型插头总是指下行USB设备或者集线器。图1-6所示是USB连接器的内部结构图。第2章中,我们会详细介绍USB连接器。图1-6 USB连接器内部结构表1-2 USB连接器BUS

无论是A型接头还是B型USB接头,均具有V,GND,D+,D-4根物理引线,对于MiniUSB接口和MicroUSB接口,通常包含5五根物理引BUS线,即V,GND,ID,D+,D-。ID信号线在OTG功能上有使用到。其BUS中,V通常为红线(+5V电源),GND通常为黑色(地线),USB主机可以通过这两根线对设备进行供电。D+(绿色)和D-(白色)是数据通信用的差分信号线,用于实现USB主机和设备之间的数据传输。1.2.5 USB2.0电气特性

USB使用的是NRZI编码,当数据为0时,电平翻转;当数据为1时,电平保持(不翻转)。编码出来的序列,高电平为J状态,低电平为K状态,如图1-7所示。为了防止出现长时间电平不变化的情况,在发送数据前要经过位填充(Bit Stuffing)处理。未经过位填充处理的数据,由串行接口引擎(SIE)将数据串行化和NRZI编码后,发送到USB的差分数据线上。相对于发送端,接收端接收数据是一个相反的过程,接收端采样数据线,由SIE引擎将数据并行化(反串行化),然后去掉填充位,恢复原来的数据。在实际使用微控制器片上的USB外设时,芯片内的硬件已经处理好了。图1-7 NRZI编码1.2.6 USB2.0设备速度的识别

USB2.0采用在D+和D-信号线上增加上拉电阻的方法来识别低速和全速设备,如图1-8所示。

· 低速USB设备的D-信号线上连有1.5kΩ的上拉电阻接至3.0~3.6V电压。

· 全速USB设备的D+信号线上连有1.5kΩ的上拉电阻接至3.0~3.6V电压。

· 主机或者集线器的下行端口的D+和D-信号线上都连有15kΩ的下拉电阻到地。图1-8 USB全速与高速设备识别

当控制器或集线器的下行端口没有与USB设备连接时,其D+和D-信号线上的下拉电阻使得这两条数据线的电压都是低电平;当低速/全速设备连接USB设备以后,在D-或者D+信号线上会出现大小为cc15/(15+1.5)×V的电压,而D+/D-信号线上仍然保持低电平。如果这种状态持续2.5µs以上,USB主机就会认为一个低速/全速设备已经连接成功。

USB2.0高速设备识别:高速设备在连接起始时以全速速率与主机进行通信,以完成其配置操作,这时候需要在D+信号线上把1.5kΩ的上拉电阻接至3.0~3.6V电压。当高速设备正常工作时,如果采用高速传输,D+信号线不需要上拉;如果采用全速传输,则D+信号线必须使用上拉电阻。

所以,为识别出USB设备的速度属性,需要在上拉电阻和D+信号线之间连接一个由软件控制的开关(也称为软连接功能),目前大部分的恩智浦微控制器的USB外设内部已经集成了这个功能。用户只需要控制寄存器即可,无须增加额外的外部控制电路。1.2.7 USB2.0电源

在USB系统中,主机和集线器端口都可以为其连接的USB设备提供电源,一般每个端口输出的最大电流为100mA或者500mA。其中,500mA电流的USB端口为高功率集线器端口,100mA电流的USB端口被称为低功率端口。

USB2.0的电压标称值为+5V,实际上这个电压会有一定的偏差。对于高功率集线器端口来说,该电压范围为4.75~5.25V;而对于低功率集线器端口而言,该电压范围为4.4~5.25V。USB2.0主机包含一个独立的电源管理系统,它和USB系统软件一起管理设备的挂起、恢复等USB电源事件。USB设备具有一定的电源管理能力,以相应USB系统软件发出电源操作。

当USB处于挂起状态时,工作在低功率模式下的USB设备仅从总线上获取500µA的电流;如果是高功率模式的USB设备且已经使用远端唤醒功能,则需要获取2.5µA的挂起电流。对于总线供电的USB集线器来说,如果在配置后挂起,可从总线上获取2.5mA工作电流,并为每个下行端口分配500µA电流,剩余的电流则留给集线器本身使用;如果它未被配置而挂起,则它将作为低功率设备,最多从总线上获取500µA的挂起电流。

USB设备可以采用总线供电的方式,也可以采用自供电的方式。如果USB设备采用总线供电的方式则需要考虑上行端口的供电能力,如果上行端口只能提供100mA的电流,那么USB设备最大也只能获得100mA的电流。

对于USB设备的电流要求可以在其配置描述符中表述,在USB设备上电时,首先为低功率消耗的设备进行上电配置,在USB设备配置完成后,USB主机或者集线器便可以按照设备配置描述符中的规定提供相应的电流值,USB设备就可以从总线上获取相应的电流了。

图1-9所示为USB设备配置描述符,方框中的代码为设置电流大小的地方。图1-9 USB设备配置描述符1.3USB2.0事务处理及数据传输

包(Packet)是USB事务处理过程中主机和设备之间数据传输的基本单位,包括令牌(Token)包、数据包和握手包,各类型包通过包标识符(PID)作进一步区分,为简化起见,将PID分别为Setup,IN,OUT等的令牌(Token)包称为Setup包、IN包、OUT包等。相应地,数据包和握手包也按此命名。例如,数据包包括DATA0包、DATA1包等,握手包包括ACK包、NAK包、STALL包等。

USB协议层进一步定义了如何使用不同的包的组合来完成一个事务,根据事务中令牌(Token)包的类型,将事务分为Setup事务、IN事务、OUT事务、Ping事务等。1.3.1 包

令牌包全部由USB主机发出,其他类型包的方向根据实际情况而定。所有包都以同步域(SYNC)开始、以包结束符(EOP)信号结束。不同类型包包含的域不同,主要包括包标识符(PID)、包目标地址(ADDR)、包目标端点(ENDP)、数据、帧号和循环冗余校验码(CRC)。

1.同步字段(SYNC)

在USB系统中,USB主机和设备不是共享一个时钟的,这使得接收方没有办法准确知道发送方何时发送数据,尽管能检测到总线从空闲状态到K状态的一个跳变(SOP),但这个跳变不足以确保发送方和接收方在传输数据包的过程中保持同步;若需要保持同步,则所有的数据包都必须以一个同步字段开始。

2.包标识符(PID)

包的类型通过长度为8位的标识符指定,其中包括4位的包类型字段和与其对应的4位校验位字段,校验位字段是包类型字段的补码。表1-3给出了USB协议中定义的各个包。按PID字段的功能,可以分为4种类型,即令牌包(10b)、数据包(11b)、握手包(01b)和专用包(00b),由字段值的前两位(PIDG<1:0>)来指明。表1-3 USB2.0中定义的各种PID续表

3.包目标设备地址(ADDR)

每个USB设备都有一个由USB主机管理分配的地址,USB设备在被USB主机分配一个地址前将会使用默认的地址0。在收到USB主机分配的地址后,USB设备将会使用这个新的非0地址,直到USB设备被拔出、掉电或者复位。

包目标设备的地址长度只有7位,即一个USB主机最多只能管理127个USB设备。所以USB设备的地址由地址字段ADDR和端点字段ENDP构成,如果令牌包的地址和端点号与USB设备的地址不匹配,USB设备会忽略该令牌包。

4.包目标端点(ENDP)

对主机而言,USB设备和主机间的通信建立在一个个单独的管道(Pipe)上,每个管道在USB设备上都对应一个端点,因此在总线上传输的每个包都需要指定其目标端点号。同时端点也是区分方向的,USB主机与USB设备端点1的IN方向建立的通信管道和与端点1的OUT方向建立的通信管道是两个不同的通信管道。端点号在包中由4位表示,即USB设备最大可以支持16个双向端点,其中,端点0为专用的控制端点。

5.数据

不同传输类型在不同速度模式下的数据字段的长度各不相同。

6.帧索引

帧索引仅在每帧/小帧开始的SOF令牌包中被发送,长度是11位,该字段的初始值为0,由USB主机对其进行递增,当达到最大值2047时则重新从0开始计数。

7.循环冗余校验码(CRC)

USB协议规定只有令牌包(Token)和数据包具有循环冗余校验码,其他的包没有循环冗余校验码。另外,令牌包使用5位循环冗余校验码,数据包使用16位循环冗余校验码。CRC校验失败意味着数据包中有字段出现错误,接收方会丢弃该字段或者整个信息数据包。1.3.2 事务

事务是USB可靠传输(具有反馈机制)的最小单位。单独的包并没有错误检测机制,传输过程中可能出现各种情况导致接收方出现错误,而事务就是利用令牌包、数据包和握手包实现一个带有错误反馈机制的通信,使USB传输更加安全可靠。

在USB2.0的协议中,按照令牌阶段的不同,规定了7种令牌包,因此USB事务处理可以按照令牌包的类型分为以下7种,即Setup事务、IN事务、OUT事务、Ping事务、SOF事务、SPLIT事务及PRE事务。

限于篇幅,事务部分可以参阅本系列丛书的《微控制器USB的信号及协议实现》中2.1.3节。1.4USB2.0数据传输类型

基于事务,USB协议定义了传输(Transfer)用于完成一组具有特定目的的事务,若任意一个事务失败,则整个传输都会失败。

USB协议中定义了4种传输类型,包括控制传输、中断传输、批量传输和同步传输,表1-4列出各种传输(Transfer)类型支持的数据长度,USB设备在所有的速度模式下都支持控制传输,而低速模式不支持同步传输和批量传输。表1-4 各种传输(Transfer)类型支持的最大包长度1.4.1 控制传输

控制传输(Control Transfer)类型主要用于少量数据传输,对传输时间和传输速率均无要求,但必须保证传输数据的正确性。USB控制传输主要用于USB主机和设备之间的配置信息互通,配置信息包括设备的地址、设备描述符和接口描述符等。用户也可以自定义操作来传输自定义用途的数据。

USB协议中为控制传输保留了一定的总线带宽,并且USB主机的系统软件可以为其动态地调整所需要的帧或者微帧时间,以确保尽快进行控制传输。另外,USB协议中还使用差错控制和重传机制保证控制传输数据的正确性和可靠性。

USB协议中规定所有的USB设备都支持控制传输的方式,任何USB设备都必须在端点0的默认管道中支持控制传输。USB系统软件将通过该管道访问USB设备的状态,并对USB设备进行配置。除了端点0以外,其他的端点可以支持控制传输。但是嵌入式微控制器对标准做了裁剪,基本都以端点0为唯一的控制传输端点。

对于默认的控制端点0,其最大传输数据包长度的信息包含在设备描述符wMaxPacketSize字段中。USB设备上电时,USB主机的系统软件将首先读取设备描述符的前8个字节,并得到默认控制端点所支持的最大数据包长度的信息。在以后的控制事务通信过程中,就以这个描述符中的数据为最大长度。

1.数据包长度

在USB协议中,不同速率的端点对控制传输的最大数据包长度的要求不同。在USB设备的描述符中有针对控制端点的描述部分,其中wMaxPacketSize字段定义了控制传输支持的最大数据包的长度:

· 对于低速端点,该最大值为8字节。

· 对于全速端点,可以选择8字节、16字节、32字节或者64字节。

· 对于高速端点,只能为64字节。

· 对于默认的控制端点0,其最大传输数据包长度的信息包含在设备描述符wMaxPacketSize字段中。当USB设备上电时,USB主机的系统软件将首先读取设备描述符的前8个字节,并得到默认控制端点所支持的最大数据包长度的信息。在以后的控制事务通信过程中,就以这个描述符中的数据为最大长度。

2.事务处理

USB控制传输的事务处理过程包含建立、数据和状态3个阶段,每个阶段都由特定的事务组成。USB控制传输的实例如图1-10所示。图1-10 控制传输实例

在控制事务处理的建立阶段,USB主机采用Setup事务向USB设备发送控制请求,建立阶段的数据包处理如图1-11所示。图1-11 Setup事务处理

Setup事务的数据字段长度为8字节,如表1-5所示。表1-5 Steup事务中数据字段的格式

在USB控制传输事务中,数据阶段是可以选择的。数据阶段负责传输具有USB定义格式或者设备类、供应商自定义格式的数据。数据阶段可以发出一个或者多个IN/OUT事务,数据阶段传输的方向和长度均在建立阶段由描述符指定。

控制事务处理的最后一个阶段是状态阶段,由一个IN事务和一个OUT事务组成。在状态阶段中,USB设备向主机报告控制事务建立阶段和数据阶段的传输结果。USB控制传输的报告方向是从USB设备到主机的,表1-6列出了控制传输的状态阶段和响应。表1-6 控制传输状态阶段的响应1.4.2 批量传输

USB批量传输(又称块传输)只能用于高速或者全速USB设备,适合传输大量的数据,但对传输时间和速率均无特别的要求。

打印机和扫描仪等设备适用批量传输类型,这类设备对数据的正确性有着很高的要求,但是对数据的通信速率要求不高。

批量传输可以动态地改变传输速率。当USB总线带宽不足时,硬件会自动为其他传输类型让出批量传输所占用的帧/最小时间,本身的数据传输将被延迟;当USB总线空闲时,批量传输会占用很高的传输速率,占用的传输时间变短。

批量传输采用差错控制和重传机制来确保数据传输的正确性和可靠性。

1.数据包长度

在USB协议中,批量传输端点描述符中的wMaxPacketSize字段表示该批量传输事务支持的最大数据包长度。

· 对于全速端点:可以为8字节、16字节、32字节或者64字节。

· 对于高速端点:可以为8字节、16字节、32字节、64字节或者512字节。

在数据传输过程中,如果批量传输的数据大小大于端点所支持的最大数据包长度,则USB主控制器会把该数据包分成多个批量传输事务来处理。传输的每个批量数据的长度为最大数据包长度,最后一个批量传输事务负责传输剩余的数据,其长度可以小于或者等于最大的数据包长度。

2.事务处理

USB批量传输过程包括令牌、数据和握手3个阶段,如图1-12所示。图1-12 批量事务传输格式

USB2.0协议使用特有的数据触发机制保证数据包发送和接收的同步。数据触发机制是通过USB数据触发位和DATA0/DATA1数据包的匹配实现的。如图1-13所示,在USB设备上电配置的时候,所有的批量传输数据触发位都被初始化为0。批量传输事务中,第一个数据包使用DATA0,第二个数据包则使用DATA1,此后的数据传输交替使用数据包DATA0和DATA1,也就是所谓的双缓冲机制,以提高大数据量的吞吐效率。在图1-13中,括号内的数据代表USB设备数据触发位的值。图1-13 数据触发机制

根据数据传输的方向,批量传输有不同的事务处理格式。

· 当USB主机需要接收数据时,它向USB设备发送一个IN令牌包。

· 当USB主机准备发送数据时,它将向USB设备发出一个OUT令牌包和一个DATAx数据包。

USB2.0批量传输事务端点是单向的,即IN或OUT。如果USB设备需要双向批量传输,则需要使用两个批量传输端点,一个批量传输端点用于IN传输,另一个用于OUT传输。1.4.3 中断传输

USB中断传输适用于低速、全速,适用于较少或者中等数据量及对事务处理周期有要求的数据传输。例如,鼠标、键盘等USB设备适用于中断传输,这类设备传输的数据量比较少但响应时间要快。

USB2.0协议中为中断传输保留了总线带宽,以保证数据能够在规定的时间内完成传输。USB中断传输的传输速率不一定是固定的,使用差错控制和重传机制来确保中断传输的正确性和可靠性。

1.数据包长度

在USB协议中,不同速率的端点对中断传输的最大数据包长度要求不同。中断传输端点描述符中的wMaxPacketSize字段表示该中断传输所支持的最大数据包长度。

· 对于低速端点:最大值必须小于等于8字节。

· 对于全速端点:最大值必须小于等于64字节。

· 对于高速端点:最大值必须小于等于1024字节。

如果待传输的数据量大于协议所支持的最大数据包长度,则USB主机会将数据传输分成多个中断事务传输处理。除了最后一个中断传输事务外,之前的每个中断传输事务的数据包的长度都等于规定的最大长度。最后一个中断事务处理将负责传输剩余的数据,包长可能小于也可能等于最大包长度。

2.事务处理

USB中断事务处理,包括IN传输和OUT传输,具有令牌、数据和握手3个阶段,如图1-14所示。图1-14 中断传输事务

根据数据传输的方向,中断传输有不同的事务处理格式。

· 当主机准备接收设备的中断传输时,主机会发出IN令牌包,USB设备将向其返回DATAx数据包、NAK或STALL握手包。

· 当主机准备向设备发送中断数据时,主机会发出OUT令牌包和DATAx数据包,而USB设备将向主机返回ACK、NAK和STALL握手包。

在USB2.0协议中,USB的中断传输事务处理是单向的。USB设备的描述符中关于中断端点的描述部分会指出其对应管道要支持的传输方向,即IN或OUT。管道是针对主机来讲的,实质是一条传输数据流的通道。当USB总线实际传输数据时,必须使用数据触发机制来保证数据包发送和接收同步,以便发送方能够确认其数据已经被成功接收。1.4.4 同步传输

USB同步传输只能用于全速或者高速USB设备,适用于传输大量、速率恒定且对数据服务周期有要求的数据。类似音频设备和视频设备适用于同步传输。

在USB协议中,为同步传输保留了总线带宽,保证其在每一帧或者每一微帧中都能得到服务。同步传输将一直使用固定的传输速率,因此其传输时间是确定的、可以预测的。此外,为了确保数据传输的及时性,同步传输没有采用差错控制和重传机制,即同步传输不能保证每次传输的数据是没有错误的。

1.数据包长度

在USB协议中,不同速率的端点对同步传输最大数据包长度的要求不同。在USB同步传输中,USB设备会对使用同步传输的端点进行配置,其中,wMaxPacketSize字段设定了同步传输事务所支持的最大数据包长度。

· 对于全速端点,该字段最大值必须小于或者等于1023字节。

· 对于高速端点,该字段最大值必须小于或者等于1024字节,且高带宽端点可在每一微帧中进行2个或3个高速同步事务。

在USB同步传输系统中,USB主控制器必须能够支持最大数据包长度0~1023字节(全速同步传输)和最大长度为1~1024字节(高速同步传输)。

2.事务处理

一个完整的USB同步传输包括IN传输和OUT传输。同步传输具有令牌和数据两个阶段,没有握手阶段,如图1-15所示。同步传输根据数据的传输方向有不同的事务处理格式。

· 当USB主机接收同步数据时,主机将发出IN令牌包,USB设备返回DATAx令牌包。

· 当USB主机发送同步数据时,主机将发出OUT令牌包和DATAx数据包。图1-15 同步传输事务

USB的同步传输事务处理是单向的,在USB的程序中,USB设备的同步端点描述符会指出其管道所支持的传输方向,即IN或OUT。如果需要双向数据传输,则需要采用两个端点分别实行IN和OUT数据传输。1.5USB2.0设备

USB设备分成底层、中间层、顶层等三层。

· 底层为总线接口,负责数据的发送和接收,和物理传输相关。

· 中间层负责处理USB总线接口和各功能设备端点之间的数据传输。

· 顶层实现USB设备特定的功能,如鼠标或者CDC这样的接口。

本节的内容与USB2.0白皮书中的第9章相关,有意深究的读者可以翻阅USB白皮书。1.5.1 USB设备状态

USB设备具有多种状态,一些USB设备的状态对主机是可见的,当然也有USB主机不可感知的设备状态。USB设备的状态如表1-7所示,该表总结了USB设备对主机可见的状态,包括连接、上电、默认、地址、配置和挂起状态。图1-16分析了这些状态之间的状态关系。表1-7 USB设备可见状态续表图1-16 USB设备状态转换

下面针对各个USB设备可见状态做详细的描述。(1)连接状态。USB设备可能连接到USB总线上,也可能已经移除。USB设备需要先与主机建立物理上的连接。如果USB设备连接到主机,就处于连接状态。BUS(2)上电状态。USB设备可以从USB的V上获取电源,或者通过外部电源获取电源。通过外部电源供电的设备称为自供电(Self-BUSpowered)设备,通过V供电的设备称为总线供电(Bus-powered)设备。对于自供电设备,在连接到主机之前,设备已经通电,但此时BUS设备并不是USB协议定义的供电状态,只有V有电后,才进入供电状态。

当USB设备不直接与USB主机相连,而通过集线器间接连接到USB主机时,只有对应的集线器端口被主机配置使能之后,集线器端BUS口才会向USB设备的V线供电。当集线器端口复位时,端口在被重BUS新配置之前都不会向V线供电,相应的USB设备的状态也将变为连接状态。(3)默认状态。USB设备进入供电状态后,在被复位之前,不能响应总线上的任何事务(Transaction)。只有当USB设备复位且处于默认状态后,才会响应主机发送过来的请求。(4)地址状态。在USB设备被复位后,且在USB主机给USB设备设置一个新的地址之前,所有的USB设备使用默认的0地址与主机通信。USB设备收到主机发送的设置地址SetAddress()请求后,USB设备就会得到一个唯一的地址。USB设备会保存并使用该地址与主机通信,直到设备被复位或者断开。即使USB设备在获取唯一的地址之后进入挂起状态,设备依然会保留这个地址,并在总线恢复后继续使用该地址。在设备挂起期间,主机也不能把该地址分配给其他的USB设备。

指定了新的地址的USB设备在收到USB主机发出的复位信号后会进入默认状态,之前指定的地址也将无效,USB设备需要USB主机重新分配地址。(5)配置状态。在USB设备的功能能够使用之前,USB设备和USB主机必须协商确定与功能相关的配置项,所有的配置项均以描述符的形式提供。USB主机通过获取描述符GetDescriptor()请求获得USB设备相关的描述符,通过设置接口SetInterface()和设置配置SetConfiguration()来设置设备的相关配置项。一旦相关功能参数被配置后,USB设备就能正常工作了。

正常工作的USB设备在收到USB主机发出的复位信号后会进入默认状态,之前所指定的地址、所配置的接口(Interface)和配置项(Configuration)都将无效,需要由USB主机重新指定设备地址,获取描述符并配置相关配置项才能使设备再次工作。(6)挂起状态。挂起/恢复是USB协议实现低功耗的一种机制。除了设备的连接状态,在其他状态下,当USB总线持续3ms没有活动时,设备就会自动进入挂起状态。进入挂起状态后,USB设备要维持所有的内部状态,如软件的状态机,以及设备的地址、配置项等。1.5.2 USB总线枚举

USB总线枚举(Enumeration)实际就是主机获取从机设备参数并配置的过程。USB使用总线枚举操作来管理USB设备的连接和断开。当USB设备接入主机后会确定设备的速度类型,以便确保通信双方在相同的速度模式下工作,待主从双方步调(速度模式)统一后,USB枚举才会开始。USB主机会获得USB设备提供的描述符并根据描述符为设备分配并配置好通信用的管道。

当枚举结束时,USB设备将会使用在枚举过程中USB主机所配置的参数进行工作,从而确保通信双方使用相同的参数。可配置的参数可以在后续的通信过程中根据需要进行修改。1.5.3 描述符

描述符(Descriptor)相当于USB设备的名片,包含设备所有的属性和可配置信息,如设备所属于的类(Class)、接口(Interface)信息、端点(Endpoint)信息等。USB主机获得了设备的描述符,就知道了该设备的类型和用途、通信的参数等,主机就可以根据这些USB设备的信息对自己进行配置,使得通信双方使用相同的参数工作。

标准的USB设备有6种常用的USB描述符:设备描述符、配置描述符、字符串描述符、接口描述符、端点描述符、设备限定描述符。另外还有一种特殊的描述符叫作接口关联描述符,用于将一组有关的描述符关联起来共同描述一个特定的功能。图1-17所示是设备描述符、配置描述符、接口描述符、端点描述符、接口关联描述符之间的关系。图1-17 USB描述符结构框架

在图1-17中,接口0和接口1通过接口关联描述符1关联在一起共同描述一个功能;接口2和接口3通过接口关联描述符2关联在一起共同描述另一个功能;而接口4单独描述其他的一个功能。设备描述符指明了该设备有几个配置描述符,每个配置描述符都分别指明了该配置描述符中的接口描述符,而接口描述符指明了该接口有几个端点描述符。当主机需要获取配置描述符时,该配置描述符拥有的接口描述符和端点描述符的所有信息都一并返回。在同一个配置描述符中的多个功能(由一个或多个接口描述符描述)能够同时工作,但是如果USB设备存在多个配置描述符,USB主机会通过SetConfiguration()使用其中一个,其他的配置描述符中所描述的功能则不能工作。

1.设备描述符(Device Descriptor)

一个设备有且只有一个设备描述符。设备描述符描述了设备的基本属性,设备描述符的字段如表1-8所示。表1-8 USB设备描述符

在设备描述符中只会给出这个设备所支持的配置描述符(Configuration Descriptor)的数量,设备的配置描述符的索引从1开始,当设备的配置描述符有2个时,这2个配置描述符的索引分别是1和2。USB主机就是使用这个索引作为GetDescriptor(Configuration)的参数来分别获取对应的设备的配置描述符。

2.配置描述符(Configuration Descriptor)

配置描述符定义了设备的一种配置信息,一个设备可以有一个或者多个配置描述符。配置描述符的字段如表1-9所示。表1-9 USB配置描述符

配置描述符包括了USB设备配置的基本信息,如设备的接口描述符的个数、配置描述符的长度、供电属性等。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载