第16章 USB接口与编程实例 主要内容: USB概述 USB设备 USB物理特性 USB通信协议 JB8的USB模块的编程方法
《嵌入式技术基础与实践》
16.1 USB概述
USB协议有两种:USB1.1和USB2.0。
USB2.0和USB1.1完全兼容。USB1.1支持的 数据传输率为12Mbps和1.5Mbps(用于慢 速外设),USB2.0支持的数据传速率可达 480Mbps。在普通用户看来,USB系统就是 外设通过一根USB电缆和PC机连接起来。 通常把外设称为USB设备,把其所连接的 PC机称为USB主机。将指向USB主机的数据 传输方向称为上行通信,把指向USB设备的 数据传输方向称为下行通信。《嵌入式技术基础与实践》
16.1 USB概述
USB网络采用阶梯式星形拓扑结构,如图
16-1。一个USB网络中只能有一个主机。 主机内设置了一个根集线器,提供了主机 上的初始附属点。PC主机 (根集线器) (根阶梯) 阶梯0
集线器 (复合设备)
游戏杆
USB设备阶梯1 USB设备
集线器
扫描仪
鼠标
阶梯2
图16-1 USB主机和USB设备的连接 《嵌入式技术基础与实践》
16.1 USB概述 主机定时对集线器的状态进行查询。当一个新设备接入集线器时,主机会检测到集线器状态改变, 主机发出一个命令使该端口有效并对其进行设置。 位于这个端口上的设备进行响应,主机收到关于 设备的信息,主机的操作系统确定对这个设备使 用那种驱动程序,接着设备被分配一个唯一标识 的地址,范围从0~127,其中0为所有的设备在 没有分配惟一地址时使用的默认地址。主机向它 发出内部设置请求。当一个设备从总线上移走时, 主机就从其可用资源列表中将这个设备删除。
《嵌入式技术基础与实践》
16.2 USB系统基本概念 16.2.1 USB主机USB的所有数据通信(不论是上行通信还是下行 通信)都由USB主机启动,所以USB主机在整 个数据传输过程中占据着主导地位。在USB系 统中只允许有一个主机。从开发人员的角度看, USB主机可分为三个不同的功能模块:客户软 件、USB系统软件和USB总线接口。 (1) 客户软件 (2) USB系统软件 (3) USB总线接口
《嵌入式技术基础与实践》
16.2.1 USB主机
16.2 USB系统基本概念– (1) 客户软件 客户软件负责和USB设备的功能单元进行通信,以实现其 特定功能。一般由开发人员自行开发。客户软件不能直接访 问USB设备,其与USB设备功能单元的通信必须经过USB系 统软件和USB总线接口模块才能实现。客户软件一般包括 USB设备驱动程序和界面应用程序两部分。 USB设备驱动程序负责和USB系统软件进行通信。通常, 它向USB总线驱动程序发出I/O请求包(IRP)以启动一次 USB数据传输。此外,根据数据传输的方向,它还
应提供一 个或空或满的数据缓冲区以存储这些数据。 界面应用程序负责和USB设备驱动程序进行通信,以控制 USB设备。它是最上层的软件,只能看到向USB设备发送的 原始数据和从USB设备接收的最终数据。《嵌入式技术基础与实践》
16.2 USB系统基本概念 16.2.1 USB主机 (2) USB系统软件
USB系统软件负责和USB逻辑设备进行配置通信, 并管理客户软件启动的数据传输。USB逻辑设备是 程序员与USB设备打交道的部分。USB系统软件一 般包括USB总线驱动程序和USB主控制器驱动程序 这两部分。这些软件通常由操作系统提供,开发人员 不必掌握。
《嵌入式技术基础与实践》
16.2 USB系统基本概念 16.2.1 USB主机 (3) USB总线接口USB总线接口包括主控制器和根集线器两部分。 根集线器为USB系统提供连接起点,用于给USB系 统提供一个或多个连接点(端口)。主控制器负责完 成主机和USB设备之间数据的实际传输,包括对传 输的数据进行串行编解码、差错控制等。该部分与 USB系统软件的接口依赖于主控制器的硬件实现, 开发人员不必掌握。
《嵌入式技术基础与实践》
16.2 USB系统基本概念 16.2.2 USB设备一个USB设备由三个功能模块组成:USB总线接口、USB逻辑 设备和功能单元。这里的USB总线接口指的是USB设备中的串行接口 引擎(SIE);USB逻辑设备被USB系统软件看作是一个端点的集合; 功能单元被客户软件看作是一个接口的集合。SIE、端点和接口都是 USB设备的组成单元。为了更好地描述USB设备的特征,USB提出了 设备架构的概念。从这个角度来看,可以认为USB设备是由一些配置、 接口和端点组成的,即一个USB设备可以含有一个或多个配置,在每 个配置中可含有一个或多个接口,在每个接口中可含有若干个端点。 其中,配置和接口是对USB设备功能的抽象,实际的数据传输由端点 来完成。在使用USB设备前,必须指明其采用的配置和接口。这个步 骤一般是在设备接入主机时设备进行自举时完成的,我们在后面会进 一步介绍。USB设备使用各种描述符来说明其设备架构,包括设备描 述符、配置描述符、接口描述符、端点描述符以及字符串描述符,它 们通常被保存在USB设备的固件程序中。 《嵌入式技术基础与实践》
16.2 USB系统基本概念 16.2.2 USB设备①设备 设备代表一个USB设备,它由一个或多个配置组成。设备描述 符用于说明设备的总体信息,并指明其所含的配置的个数。一个USB 设备只能有一个设备描述符。 ②配置 一个USB设备可以包含一个或多个配置,如USB设备的低功耗 模式和高功耗模式可分别对应一个配置。在使用USB设备前,必须为 其选择一
个合适的配置。配置描述符用于说明USB设备中各个配置的 特性,如配置所含接口的个数等。USB设备的每一个配置都必须有一 个配置描述符。 ③接口 一个配置可以包含一个或多个接口,如对一个光驱来说,当用 于文件传输时使用其大容量存储接口;而当用于播放CD时,使用其 音频接口。接口是端点的集合,可以包含一个或多个可替换设置,用 户能够在USB处于配置状态时,改变当前接口所含的个数和特性。接 口描述符用于说明USB设备中各个接口的特性,如接口所属的设备类 及其子类等。USB设备的每个接口都必须有一个接口描述符。 《嵌入式技术基础与实践》
16.2 USB系统基本概念 16.2.2 USB设备 ④端点端点是USB设备中的实际物理单元,USB数据传输就是在主机和 USB设备各个端点之间进行的。端点一般由USB接口芯片提供,例如 Freescale的MC68HC908JB8。USB设备中的每一个端点都有唯一 的端点号,每个端点所支持的数据传输方向一般而言也是确定的:或 是输入(IN)或是输出(OUT),也有些芯片提供的端点的数据方 向是可以配置的,例如MC68HC908JB8包含有两个用于数据收发的 端点:端点1和端点2。其中端点1只能用于数据发送,即支持输入 (IN),端点2既能用于数据发送也可用于数据接收,即支持输入 (IN)和输出(OUT)操作。需要注意的是,在这里数据的传输方 向是站在主机的立场上来看得。比如端点1只能发送数据,在主机看 来是端点1向主机输入数据,即IN操作;当端点2配置为接收数据时, 主机向端点2输出数据,即OUT操作。这一点是初学者比较容易产生 混淆的地方。 利用设备地址、端点号和传输方向就可以指定一个端点,并和它 进行通信。 0号端点比较特殊,它有数据输入IN和数据输出OUT两个物理 单元,且只能支持控制传输。 《嵌入式技术基础与实践》
16.2 USB系统基本概念 16.2.2 USB设备 ⑤字符串在USB设备中通常还含有字符串描述符,以说明一些专用信息, 如制造商的名称、设备的序列号等。它的内容以UNICODE的形式给 出,且可以被客户软件所读取。对USB设备来说,字符串描述符是可 选的。 ⑥管道 在USB系统结构中,可以认为数据传输是在主机软件(USB系 统软件或客户软件)和USB设备的各个端点之间直接进行的,它们之 间的连接称为管道。管道是在USB设备的配置过程中建立的。管道是 对主机和USB设备间通信流的抽象,它表示主机的数据缓冲区和USB 设备的端点之间存在着逻辑数据传输,而实际的数据传输是由USB总 线接口层来完成的。 管道和USB设备中的端点一一对应。一个USB设备含有多少个 端点,其和主机进行通信时
就可以使用多少条管道,且端点的类型决 定了管道中数据的传输类型,如中断端点对应中断管道,且该管道只 能进行中断传输。传输类型在后面会介绍。不论存在着多少条管道, 在各个管道中进行的数据传输都是相互独立的。 《嵌入式技术基础与实践》
16.3 USB物理特性 16.3.1 USB接口USB使用一根屏蔽的4线电缆与网络上的设备进行互 联。数据传输通过一个差分双绞线进行,这两根线分别标 为D+和D-,另外两根线是Vcc和Ground,其中Vcc向 USB设备供电。使用USB电源的设备称为总线供电设备, 而使用自己外部电源的设备叫做自供电设备。为了避免混 淆,USB电缆中的线都用不同的颜色标记,如表16-1所 示。 引脚编号 信号名称 缆线颜色1 2 3 4 Vcc Data-(D-) Data+(D+) Ground 红 白 绿 黑
表16-1 USB缆线的信号与颜色 《嵌入式技术基础与实践》
16.3 USB物理特性16.3.1 USB接口从一个设备连回到主机,称为上行连接;从主机到设备 的连接,称为下行连接。为了防止回环情况的发生,上行和 下行端口使用不同的连接器所以USB在电缆和设备的连接中 分别采用了两种类型的连接头,即图16-2所示的A型连接头 和B型连接头。每个连接头内的电线号与图16-2的引脚编号 是一致的。A型连接头,用于上行连接,即在主机或集线器 上有一个A型插座,而在连接到主机或集线器的电缆的一端 是A型插头。在USB设备上有B型插座,而B型插头在从主机 或集线器接出的下行电缆的一端。采用这种连接方式,可以 确保USB设备、主机/集线器和USB电缆始终以正确的方式 连接,而不出现电缆接入方式出错,或直接将两个USB设备 连接到一起的情况。4 3 2 11 4 2 3
A型连接头
B型连接头
《嵌入式技术基础与实践》 图16-2 USB连接头
16.3.2 USB信号
16.3 USB物理特性(1) 差分信号技术特点 传统的传输方式大多使用“正信号”或者“负信号” 二进制表达机制,这些信号利用单线传输。用不同的信号电 平范围来分别表示1和0,它们之间有一个临界值,如果在 数据传输过程中受到中低强度的干扰,高低电平不会突破临 界值,那么信号传输可以正常进行。但如果遇到强干扰,高 低电平突破临界值,由此造成数据传输出错。差分信号技术 最大的特点是:必须使用两条线路才能表达一个比特位,用 两条线路传输信号的压差作为判断1还是0的依据。这种做 法的优点是具有极强的抗干扰性。倘若遭受外界强烈干扰, 两条线路对应的电平同样会出现大幅度提升或降低的情况, 但二者的电平改变方向和幅度几乎相同,电压差值就可始终 保持相对稳定,因此数据的准确性并不会因干扰噪声而有所 降低。《嵌入式
技术基础与实践》
(2)USB通信的格式NRZI编码器 差分驱动器 电缆段 D+ D差分驱动器 NRZI解码器
图16-3 在USB电缆上使用双向不归零编码和差动信号的传输
USB的数据包使用反向不归零编码(NRZI)。图16-3描述了在 USB电缆段上传输信息的步骤。反向不归零编码由传送信息的 USB代理程序完成;然后,被编码的数据通过差分驱动器送到 USB电缆上;接着,接收器将输入的差分信号进行放大,将其送 给解码器。使用该编码和差动信号传输方式可以更好地保证数据 的完整性并减少噪声干扰。
《嵌入式技术基础与实践》
(2)USB通信的格式空闲 数据 01 1 0 1 0 0 0 1 1 1 0 1 0
反 向 不 归零码
图16-4 反向不归零编码
使用反向不归零编码方式可以保证数据传输的完整性,而且不 要求传输过程中有独立的时钟信号。反向不归零编码不是一个 新的编码方式。它在许多方面都有应用。图16-4给出了一个数 据流和编码之后的结果。在反向不归零编码时,遇到“0”转换, 遇到“1”保持。反向不归零码必须保持与输入数据的同步性, 以确保数据采样正确。反向不归零码数据流必须在一个数据窗 口被采样,无论前一个位时间是否发生过转换。解码器在每个 位时间采样数据以检查是否有转换。 《嵌入式技术基础与实践》
(2)USB通信的格式空闲 0 0 0 1 1 1 1 1 1 1 1 0 1 1
数据 填充位填充后数 据 双向不归零码 图16-5在USB电缆上使用双向不归零编码和差动信号的传输
若重复相同的“1”信号一直进入时,就会造成数据长时间无法转换,逐渐的积累, 而导致接收器最终丢失同步信号的状况,使得读取的时序会发生严重的错误。因此,在 NRZI编码之间,还需执行所谓的位填充的工作。位填充要求数据流中如果有连续的六个 “1”就要强行转换。这样接收器在反向不归零码数据流中最多每七个位就检测到一次跳 转。这样就保证了接收器与输入数据流保持同步。反向不归零码的发送器要把“0”(填 充位)插到数据流中。接收器必须被设计成能够在连续的六个“1”之后识别一个自动跳 转,并且立即扔掉这六个“1”之后的“0”位。 图16-5的第一行是送到接收器的原始数据。注意数据流包括连续的八个“1”。第二 行表示对原始数据进行了位填充,在原始的第六个和第七个“1”之间填入了一个“0”。 第七个“1”延时一个位时间让填充位插入。接收器知道连续六个“1”之后将是一个填充 位,所以该位就要被忽略。注意,如果原始数据的第七个位是“0”,填充位也同样插入, 在填充过的数据流中就会有两个连续的“0”。
《嵌入式技术基础与实践》
16.3 USB物理特性16.3.3
检测设备连接和速度
在USB设备连接时,USB系统能自动检测到这个连接,并识别出
其采用的数据传输速率。USB采用在D+或D-线上增加上拉电阻 的方法来识别低速和全速设备。USB支持三种类型的传输速率: 1.5Mb/s的低速传输、12Mb/s的全速传输和480Mb/s的高速 传输。如图16-6和图16-7所示。当主控制器或集线器的下行端 口上没有USB设备连接时,其D+和D-线上的下拉电阻使得这两 条数据线的电压都是近地的(0V);当全速/低速设备连接以后, 电流流过由集线器的下拉电阻和设备在D+/D-的上拉电阻构成 的分压器。由于下拉电阻的阻值是15KΩ,上拉电阻的阻值是 1.5KΩ,所以在D+/D-线上会出现大小为(Vcc*15/ (15+1.5))的直流高电平电压。当USB主机探测到D+/D-线 的电压已经接近高电平,而其它的线保持接地时,它就知道全速 /低速设备已经连接了。《嵌入式技术基础与实践》
16.3 USB物理特性16.3.3 检测设备连接和速度Vcc+5V USB 主机 D+ USB数据线 D地 15千欧 D15千欧 低速USB设备电缆和电阻的连接 Vcc 1.5千欧 D+ USB 低速 设备
+5V USB 主机D+ USB数据线 D地 15千欧 15千欧
1.5千欧 D+ DUSB 全速 设备
全速USB设备电缆和电阻的连接
《嵌入式技术基础与实践》
16.4 USB的通讯协议16.4.1 包包(Packet)是USB系统中信息传输的基本单元,所有数据都是 经过打包后在总线上传输的。USB包由五部分组成,即同步字段 (SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段 (CRC)和包结尾字段(EOP),包的基本格式如下图:同步字段(SYNC) PID字段 数据字段 CRC字段 包结尾字段(EOP)
1、SYNC字段:由8位组成,作为每个数据封包的前导,用来产 生同步作用,使USB设备与总线的包传输率同步,它的数值固定为 00000001。 2、PID字段:用来表示数据封包的类型。包标识符中的校验字段 是通过对类型字段的每个位求反码产生的, PID字段如下图所示:PID0 PID1 PID2 PID3 PID0 PID1 PID2 PID3
《嵌入式技术基础与实践》
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新资格考试认证初学入门版USB的通讯协议全文阅读和word下载服务。
相关推荐: