清华大学毕业设计论文
第一章 前 言
当今的计算机外部设备 都在追求高速度和高通用性 为了满足用户的需求
以 Intel 为首的七家公司于 1994 年推出了 USB Universal Serial Bus 通用串行总
线 总线协议 专用于低 中速的计算机外设 目前 USB 端口已成为了微机主
板的标准端口 而在不久的将来 所有的微机外设 包括键盘 鼠标 显示器
打印机 数字相机 扫描仪和游戏柄等等 都将通过 USB 与主机相连 这种连接
较以往普通并口和串口的连接而言 主要的优点是速度高 功耗低 支持即插即
用 Plug & Play 和使用维护方便
作为一个硬件厂商或是开发者 最关心的便是如何去开发 USB 外设 一般的
USB 设备都使用一片微控制器作为其核心部件 通过微控制器强大的控制和运算
功能 开发者可以很容易地实现 USB 设备的智能化
MOTOROLA 公司是目前世界上最大的微控制器供应商 其 8 位微控制器的全
球市场份额达到了 30%左右 MOTOROLA 公司将其 8 位微控制器归类为用户定
制的集成电路 CSIC 为客户提供了 MPU RAM EPROM SPI SCI 定时器
和 USB 等多种模块 用量大的客户可以根据自己的需要选择不同的模块来构筑自
己的微控制器 MOTOROLA 公司从 1996 年开始 陆续推出了一系列含有 USB 模
块的 8 位微控制器 用于支持 USB 总线协议的设备 如最早的用于显示器的
68HC05BD9A 用 于 鼠 标 的 68HC05JB2 以 及 用 于 键 盘 的 68HC08KL8 和
68HC08KH12 等等 通过微控制器内含的 USB 模块 用户可以很方便地实现 USB
总线上的数据通讯 68HC05JB4 最初是用于开发 USB 游戏柄的 后来也常被用于
其他一些 USB 外设的开发
国外在近两年已出现了不少的 USB 外设 但目前在国内市场上我们仅发现了
台湾生产的摄像头等少数几类高速 USB 外设 低速 USB 设备还是一个空白 同时
国外开发的 USB 设备多集中在鼠标 键盘等少数几类设备上 诸如 USB 手写板等
设备就是在国外也很少见 国内近年来计算机非键盘输入技术发展很快 在汉字
英文和数字的手写识别方面已有相当基础 本项目之目的 就是吸收 USB 总线和
MOTOROLA 微控制器的先进技术 与中科院自动化所汉王公司的手写识别技术相
结合 在汉王笔的基础上 设计生产出自己的新一代 USB 手写输入系统
此 USB 手写系统 采用汉王公司的传感器获得笔画信息 传给 68HC05JB4
经过整理后通过 USB 总线发送到 PC 再由自行编写的驱动程序接收 最终转给汉
王公司的文字识别软件识别
第 1 页
清华大学毕业设计论文
第二章 USB 总线协议
USB Universal Serial Bus 总线协议是以Intel为主 并有Compaq Microsoft
IBM DEC Northern Telecom以及日本NEC等共七家公司共同制定的串行接口标
准 1994年11月制定了第一个草案 1996年2月公布了USB规范版本1.0 USB可把
多达127个外设同时联到你的系统上 所有的外设通过协议来共享USB的带宽 其
12Mbps的带宽对于键盘 鼠标等低中速外设是完全足够的 注 在1999年2月发
布的USB规范版本2.0草案中 已建议将12Mbps的带宽提升到120-240Mbps
USB
允许外设在主机和其它外设工作时进行连接 配置 使用及移除 即所谓的即插
即用 Plug & Play 同时USB总线的应用可以清除PC上过多的I/O端口 而以一个
串行通道取代 使PC与外设之间的连接更容易
以下简单介绍USB总线的结构 原理 以使读者对USB有大致的了解 如果需
要了解其协议细节 请查阅USB总线规范 这可以从www.usb.org下载
2.1 总线拓扑结构
USB总线的物理连接是一种分层的菊花链结构 集线器(hub)是每个星形结构
的中心 PC机就是主机和根Hub 用户可以将外设或附加的Hub与之相连 这些附
加的Hub可以连接另外的外设以及下层Hub USB支持最多5个Hub层以及127个外
设 图2.1描述了USB的物理拓扑结构 从中可以看出每一段的连接都是点对点的
Host
RootHub
Hub 1
Host (Root Tier)
Tier 1
Tier 2
Hub 2
Node
Node
Hub 3
Hub 4
Node
Node
Node
Node
Node
图2.1 USB总线拓扑
Tier 3
Tier 4
第 2 页
清华大学毕业设计论文
2.2 USB的物理层
USB的物理接口包括电气特性和机械特性
USB通过一个四线电缆来传输信号与电源 如图2.2所示
VBus
D+
D-
GND
5 meters max
...
...
VBus
D+
D-
GND
图2.2 USB电缆定义
其中D+和D-是一对差模的信号线 而VBus和GND则提供了 5V的电源 它可
以给一些设备(包括Hub)供电 当然要有一定的条件限制
USB提供了两种数据传输率 一种是12Mb的高速(full speed)模式 另一种是
1.5Mb的低速模式 这两种模式可以同时存在于一个USB系统中 而引入低速模式
主要是为了降低要求不高的设备的成本 比如鼠标 键盘等等
USB信号线在高速模式下必须使用带有屏蔽的双绞线 而且最长不能超过5m
而在低速模式时中可以使用不带屏蔽或不是双绞的线 但最长不能超过3m 这主
要是由于信号衰减的限制 为了提供信号电压保证 以及与终端负载相匹配 在
电缆的每一端都使用了不平衡的终端负载 这种终端负载也保证了能够检测外设
与端口的连接或分离 并且可以区分高速与低速设备
所有的设备都有上行的接口 上行和下行的接头是不能互换的 这保证了不会
有非法的连接出现 插头与插座有两个系列 分别为A和B 系列A用于基本固定
的外围设备 而系列B用于经常拔插的设备 这两个系列是不能互换的
2.3 USB 设备
USB设备包括Hub和功能设备 而功能设备又可以细分为定位设备 字符设备
等等 为了进一步叙述 我们给出端点(endpoint)和管道(pipe)的概念
第 3 页
清华大学毕业设计论文
端点 每一个USB设备在主机看来就是一个端点的集合 主机只能通过端点
与设备进行通讯 以使用设备的功能 每个端点实际上就是一个一定大小的数据
缓冲区 这些端点在设备出厂时就已定义好 在USB系统中 每一个端点都有唯
一的地址 这是由设备地址和端点号给出的 每个端点都有一定的特性 其中包
括 传输方式 总线访问频率 带宽 端点号 数据包的最大容量等等 端点必
须在设备配置后才能生效(端点0除外)
端点0通常为控制端点 用于设备初始化参数等 端点1
2等一般用作数据端
点 存放主机与设备间往来的数据
管道 一个USB管道是驱动程序的一个数据缓冲区与一个外设端点的连接
它代表了一种在两者之间移动数据的能力 一旦设备被配置 管道就存在了 管
道有两种类型 数据流管道 其中的数据没有USB定义的结构 与消息管道 其
中的数据必须有USB定义的结构 管道只是一个逻辑上的概念
所有的设备必须支持端点0以作为设备的控制管道 通过控制管道可以获取完
全描述USB设备的信息 包括 设备类型 电源管理 配置 端点描述等等 只
要设备连接到USB上并且上电 端点0就可以被访问 与之对应的控制管道就存在
了
一个USB设备可以分为三个层 图2.3 最底层是总线接口 用来发送与接收
包 中间层处理总线接口与不同的端点之间的数据流通 一个端点是数据最终的
使用者或提供者 它可以看作数据的源或接收端 最上层就是USB设备所提供的
功能 比如鼠标或键盘等
Physical Device
Function
USB Logical
Device
USB Bus
Interface
Actual communications flow
实际数据流
Logical communications flow
逻辑数据流
图2.3 USB设备结构层次
第 4 页
清华大学毕业设计论文
2.3.1 Hub
Hub在USB结构中是一个关键 它提供了附加的USB节点 这些节点被称为端
口 Hub可以检测出每一个下行端口的状态 并且可以给下端的设备提供电源 图
2.4是一个典型的Hub
Port
#1
Port
#2
Port
#3
Upstream
Port
HUB
Port
#4
Port
#7
Port
#6
Port
#5
图2.4 典型的USB集线器 Hub
2.3.2 即插即用
USB设备可以即插即用 但在可以使用之前 必须对设备进行配置 一旦设备
连接到某一个USB的节点上 USB就会产生一系列的操作 来完成对设备的配置
这种操作被称为总线枚举过程
1.设备所连接的Hub检测出端口上有设备连接 通过状态变化管道向主机报告
2.主机通过询问Hub以获取确切的信息
3.主机这时知道设备连接到哪个端口上 于是向这个端口发出复位命令
4.Hub发出的复位信号结束后 端口被打开 Hub向设备提供100mA的电源
这时设备上电 所有的寄存器复位 并且以缺省地址0以及端点0响应命令
5.主机通过缺省地址与端点0进行通讯 赋予设备一个独一的地址 并且读取
设备的配置信息
6.最后主机对设备进行配置,该设备就可以使用了
当该设备被移走时 Hub依然要报告主机 并且关闭端口 一旦主机接到设备
移走的报告 就会改写当前结构信息
第 5 页
清华大学毕业设计论文
2.3.3 设备的电源
USB设备的电源可以由USB总线供给 也可以自备电源 一个USB设备可以具
有这两种供电方式 但同一时刻只能由一种方式供电 这两种供电方式是可以切
换的
2.3.4 设备的挂起
为了节电 当设备在指定的时间内没有总线传输 USB设备自动进入挂起状态
如果设备所接的Hub的端口被禁止了 设备也将进入挂起状态(称之为选择挂起)
当然主机也可以进入挂起状态
USB设备当总线活动时 就会离开挂起状态 一个设备也可以通过电信号来远
程唤醒进入挂起状态的主机 这个能力是可选的 如果一个设备具有这个能力
主机有能力禁止或允许使用这种能力
2.4 USB主机
USB主机在USB系统中处于中心地位 并且对USB及其连接的设备有着特殊的
责任 主机控制着所有对USB的访问 一个外设只有主机允许才有权力访问总线
主机同时也监测着USB的结构
USB主机包括三层 如图2.5 设备驱动程序 USB系统软件 USB主控制器
(主机的总线接口) 另外 还有两个软件接口 USB驱动 USBD 接口 主机控
制驱动(HCD)接口
Host
Client SW
USB System SW
USB Host
Controller
Actual communications flow
实际数据流
Logical communications flow
图2.5 USB主机结构层次
逻辑数据流
第 6 页
清华大学毕业设计论文
2.5 USB 数据流
图2.6描述了USB数据传输的过程
Host
Interconnect
Physical Device
Client SW
manages an interface
Buffers
No USB
Format
USB System SW
manages devices
Interface x
Function
a collection of
interfaces
Interface
Specific
No USB
Format
Endpoint
Zero
USB Logical
Device
a collection of
endpoints
Pipe Bundle
to an interface
Default Pipe
to Endpoint Zero
Transfers
USB
Framed
Data
USB Host
USB Bus
Interface
Host
Controller
USB Framed
Data
SIE
Transactions
USB Wire
Pipe, represents connection abstraction
between two horizontal entities
Data transport mechanism(
USB-relevant format of transported data
Mechanical,
Electrical,
Protocol
USB
Framed
Data
Data Per
Endpoint
USB Bus
Interface
SIE
USB Device
图2.6 USB数据流
从逻辑上讲 USB数据的传输是通过管道进行的 USB系统软件通过缺省管道
(与端点0相对应)管理设备 设备驱动程序通过其它的管道来管理设备的功能接口
实际的数据传输过程是这样的 设备驱动程序通过对USBD接口(USB driver
interface)的调用发出输入输出请求(IRP I/O Request Packet) USB驱动程序接到请
求后 调用HCD接口(host controller driver interface) 将IRP转化为USB的传输
(transfer) 一个IRP可以包含一个或多个USB传输; 然后HCD将USB传输分解为总
线操作(transaction) 由主控制器以包(packet)的形式发出 需要注意的是 所有的
数据传输都是由主机开始的 任何外设都无权开始一个传输
第 7 页
清华大学毕业设计论文
IRP是由操作系统定义的 而USB传输与总线操作是USB规范定义的 为了进
一步说明USB传输 我们引出帧 frame 的概念
帧 USB总线将1ms定义为一帧 每帧以一个SOF包为起始 在这1ms里USB
进行一系列的总线操作 引入帧的概念主要是为了支持与时间有关的总线操作
为了满足不同外设和用户的要求 USB 提供了四种传输方式 控制传输 同
步传输 中断传输 批传输 它们在数据格式 传输方向 数据包容量限制 总
线访问限制等方面有着各自不同的特征:
控制传输(Control Transfer
1
2
通常用于配置/命令/状态等情形
其中的设置操作 setup 和状态操作 status 的数据包具有 USB
定义的结构 因此控制传输只能通过消息管道进行
3
4
支持双向传输
对于高速设备 允许数据包最大容量为 8 16 32 或 64 字节 对
于低速设备只有 8 字节一种选择
5
端点不能指定总线访问的频率和占用总线的时间 USB 系统软件
会做出限制
6
具有数据传输保证 在必要时可以重试
同步传输(Isochronous Transfer)
1
是一种周期的 连续的传输方式 通常用于与时间有密切关系的
信息的传输
数据没有 USB 定义的结构 数据流管道
2
3 单向传输 如果一个外设需要双向传输 则必须使用另一个端点
只能用于高速设备 数据包的最大容量可以从 0 到 1023 个字节
4
5
具有带宽保证 并且保持数据传输的速率恒定 每个同步管道每
帧传输一个数据包
6
7
没有数据重发机制 要求具有一定的容错性
与中断方式一起 占用总线的时间不得超过一帧的 90%
中断传输(Interrupt Transfer)
1
用于非周期的 自然发生的 数据量很小的信息的传输 如键盘
鼠标等
2
数据没有 USB 定义的结构 数据流管道
3 只有输入这一种传输方式 即外设到主机
4
对于高速设备 允许数据包最大容量为小于或等于 64 字节 对于
第 8 页