1、 湖南大学毕业设计(论文) 第 1 页 目录 第一章 绪论 . 1 1.1 PC 接口简介 1 1.2 USB 接口分析 1 1.3 USB 器件的选择 1 1.4 MASS STORAGE 协议与 FAT16 文件系统 2 第二章 USB总线结构 . 3 2.1 总线拓扑结 3 2.2 USB 设备 3 2.2.1 USB HUB . 4 2.2.2 即插即用 . 5 2.2.3 设备电源 . 6 2.2.4 设备的挂起 . 6 2.3 USB 主机 6 2.4 USB 数据流 7 2.5 USB 的端点 9 第三章 协议 . 12 3.1 MASS STORAGE 协议 12 3.2 BU
2、LK ONLY传输协议 16 3.3 SCSI 指令集 18 3.4 FAT16 文件系统 21 3.4.1 FAT 文件系统结构 . 21 3.4.2 Flash 盘的 FAT 结构 . 26 第四章 程序实现与调试 . 29 4.1 固件程序的实现 29 4.1.1 主循环 MAINLOOP.C . 29 4.1.2 中断服务程序 D12ISR.C . 29 4.1.3 标准设备请求处理 D12SETUP.C . 33 4.1.4 NAND FLASH 操作程序 NFLASH32.C . 38 4.2 固件调试 42 湖南大学毕业设计(论文) 第 2 页 4.2.1 检查 USB 器件是
3、否正常工作 . 42 4.2.2 设备枚举 . 43 4.2.3 BULK_ONLY 传输协议命令处理 . 43 4.2.4 FLASH 的读写 . 45 结论 . 46 致谢 . 47 参考文献 . 48 附录 . 49 附录 A USB 接口芯片命令总汇 49 A1初始化命令 . 50 A2数据流命令 . 54 A3数据流命令 . 59 附录 B U 盘固件程序源码清单 60 湖南大学毕业设计(论文) 第 3 页 第一章 绪 论 1.1 PC接口简介 PC中的接口有两类:串行接口和并行接口。计算机内部总线,如 CPU与存储器之间匀采用并行接口,这样速度快;但外设却以串行接口比较占优势。传统
4、的打印机接口为并行接口。 SCSI标准的全名是小型设备通用接口标准,其传输速率为 10M,早期的扫描仪一般使用此接口,硬盘与主机的联接也使用这种接口。串行接口出现最早,使用最广的 RS232接口,但其速度太慢,现在 已经逐渐 被 淘汰。 USB接口和 IEEE1394接口是两种速度比较高的串行接口,还有局域网中的以太网接口,它们具有较广阔的发展前景和应用潜力。 USB适用于低档外设与主机之间的高速数据传输, USB1.1可以达到 1.5Mbps或 12Mbps的传输率,而 1394更是可达 100 200 400Mbps。 USB2.0将速度定位在 480Mbps,而 IEEE1394也推出了
5、 1394b 1.3.1 版草案,速度从 800Mbps起步,最高可达 3.2Gbps。 局局域中用得最多的是以太网接口,速度可达 100Mbps,当使用光纤传输时 ,速度可达 1000Mbps。 1.2 USB 接口分析 通用串行总线 (Universal Serial Bus USB),是一种快速、灵活的总线接口。与其它通信接口比较, USB接口的最大特点是易于使用,这也是 USB的主要设计目标。作为一种高速总线接口, USB适用于多种设备, 如数码相机、 MP3播放机、高速数据采集设备等。易于使用还表现在 USB接口支持热插拔,并且所有的配置过程都由系统自动完成,无需用户干预。USB接口
6、支持 1.5Mb/s(低速 )、 12Mb/s(全速 )和高达 480Mb/s(USB 2.0规范 )的数 据传输速率,扣除用于总线状态、控制和错误监测等的数据传输, USB的最大理论传输速率仍达 1.2Mb/s或 9.6Mb/s,远高于一般的串行总线接口。 USB接口芯片价格低廉,一个支持 USB 1.1 规范湖南大学毕业设计(论文) 第 4 页 的 USB接口芯片价格大多在人民币( 2004年) 15 30元之间,这也大大促进 USB设备的开发与应用。 1.3 USB 器件的选择 在进行一个 USB设备开发之前,首先要根据具体使用要求选择合适的 USB控制器。目前,市场上供应的 USB控制
7、器主要有两种:带 USB接口的单片机( MCU)或纯粹的 USB接口芯片。带 USB接口的 单片机从应用上又可以分成两类,一类是从底层设计专用于 USB控制的 单片机另一类是增加了 USB接口的普通单片机,如 Cypress公司的 EZ USB(基于 8051),选择这类USB控制器的最大好处在于开发者对系统结构和指令集非常熟悉,开发工具简单,但对于简单或低成本系统。但价格因素也是在实际选择过程中需要考虑的因素。纯粹的 USB 接口芯片仅处理 USB通信,必须有一个外部微处理器来进行协议处理和数据交换。典型产品有Philips公司的 PDIUSBD11( I2C接口)、 PDIUSBD12(并
8、行接口), NS公司的 USBN9603/9604(并行接口), NetChip公司的 NET2888 等。 USB接口芯片的主要特点是价格便宜、接口方便、可靠性高,尤其适合于产品的改型设计(硬件上仅需对并行总线和中断进行改动,软件则需要增加微处理器的 USB中断处理和数据交换程序、 PC机的 USB接口通信程序,无需对原有产品系统结构作很大的改动)。 1.4 Mass Storage协议与 FAT16文件系统 USB组织定义了海量存储设备类( Mass Storage Class)的规范,这个类规范包括四个独立的子类规范,即: 1. USB Mass Storage Class Contro
9、l/Bulk/Interrupt (CBI) Transport 2. USBMass Storage Class Bulk-Only Transport 3. USB Mass Storage Class ATA Command Block 4.USB Mass Storage Class UFI Command Specification。前两个子规范定义了数据 /命令 /状态在 USB上的传输方法。 Bulk- Only传输规范仅仅使用 Bulk端点传送数据 /命令 /状态, CBI传输规范则使 用 Control/Bulk/Interrupt三种类型的端点进行数据/命令 /状态传送。后
10、两个子规范则定义了存储介质的操作命令。 ATA命令规范用于硬盘, UFI命令规范是针对 USB移动存储。 Microsoft Windows中提供对 Mass Storage协议的支持,因此 USB移动设备只需要遵循 Mass Storage协议来组织数据和处理命令,即可实现与 PC机交换数据。而 Flash的存储单元组织形式采用 FAT16文件系统,这样,就可以直接在 Windows的浏览器中通过可移动磁盘来交换数据了, Windows负责对 FAT16文件系统的管理, USB设备不需湖南大学毕业设计(论文) 第 5 页 要干预 FAT16文件系统操作的具体细节。 第二章 USB总线结构 2
11、.1 总线拓扑结USB总线的物理连接是一种有层次性的星型结构,集线器( HUB)是每个星型结构的中心。 PC机就是主机和根 HUB,用户可以将外设或附加的 HUB与之相连,这些附加的 HUB可以连接另外的外设以及下层 HUB。 USB支持最多 5个 HUB层以及 127个外设。从 下 图 描述了 总线的 这种 物理拓扑结构。 图 2.1 USB 总线拓扑结构 2.2 USB设备 USB 设备 包括 HUB 和功能设备,而功能设备又可以细分为定位设备、字符设备等等。为了进一步叙述, 这里 给出端点( endpoint)和管道( pipe)的概念。 端点:每一个 USB 设备在主机看来就是一个端点
12、的集合,主机只能通过端点与设备进湖南大学毕业设计(论文) 第 6 页 行通讯,以使用设备的功能。每一个端点实际上就是一个一定大小的数据缓冲区,这些端点在设备出厂时就已经定义好了。在 USB 系统中,每一个端点都有唯一的地址,这是由设备地址和端点号给出的。每个端点都有一定的特性。其中包括:传输方式、总线访问频率、带宽、端点号、数据包的最大容量等等。除端点 0 外,其它端 点必须在设备配置后才能生效。 端点 0 通常为控制端点,用于设备初始化参数等,端点 1、 2 等一般用作数据端点,存放主机与设备间往来的数据。 管道:一个 USB 管道是驱动程序的一个数据缓冲区与一个外设端点的连接,它代表了一种
13、在两者之间移动数据的能力。一旦设备被配置,管道就存在了。管道由两种类型,数据流管道(其中的数据没有 USB 定义的结构)与消息管道(其中的数据必须由 USB 定义的结构)。管道只是一个逻辑上的概念。 所有的设备必须支持端点 0 以作为设备的控制管道。通过控制管道可以获取完全描述USB 设备的信息,包 括:设备类型、电源管理、配置、端点描述等等。只要设备连接到 USB上并上电,端点 0 就可以被访问,与之对应的控制管道就存在了。 一个 USB 设备可以分为三个层。最底层是总线接口,用来发送与接收包。中间层处理总线接口与不同的端点之间的数据流通。一个端点是数据最终的使用者或提供者,它可以看作 是
14、数据源或 是数据 接收端。最上层就是 USB 设备所提供的功能,比如鼠标或键盘等。 湖南大学毕业设计(论文) 第 7 页 图 2.2 USB 设备层次结构 2.2.1 USB HUB HUB 在 USB 结构中是一个关键,它提供了附加的 USB 节点,这些节点被称为端口。 HUB可以检 测出每一个下行端口的状态,并且可以给下端的设备提供电源。 从下图描述了 一个典型的 HUB 结构。 图 2.3 USB HUB 2.2.2 即插即用 USB 设备可以即插即用,但在可以使用之前,必须对设备进行配置。一旦设备连接到某个 USB 的节点上, USB 就会产生一系列的操作,来完成对设备的配置,这种操作
15、被 称为总线枚举过程: 1. 设备所连接的 HUB 检测出端口上由设备连接,通过状态变化管道向主机报告; 2. 主机通过询问 HUB 以获得确切的信息; 3. 主机这时知道设备连接到那个端口上,于是向这个端口发出复位命令; 4. HUB 发出的复位 信号结束后,端口被打开, HUB 向设备提供 100mA 的电源,这时设备上电,所有的寄存器复位,并且以缺省地址 0 以及端点 0 响应命令; 5. 主机通过缺省地址与端点 0 进行通讯,赋予设备一个唯一的地址,并且读取设备的配置信息; 6. 最后主机对设备进行配置,该设备就可以使用了。 湖南大学毕业设计(论文) 第 8 页 当该设备被移走时, H
16、UB 依然要报告主机,并且关闭端口。一旦主机接收到设备移走的报告,就会改写当前结构信息。 2.2.3 设备电源 USB 设备的电源可以由 USB 总线供给,也可以自备电源。一个 USB 设备可以具有这两种供电方式,但同一时刻只能由一种方式供 电。这两种供电方式是可以切换的。 2.2.4 设备的挂起 为了节电,当设备在指定的时间内没有总线传输, USB 设备自动进入挂起状态。如果设备所接的 HUB 的端口被禁止了,设备也将进入挂起状态(称之为选择挂起)。当然主机也可以进入挂起状态。 USB 设备当总线活动时,就会离开挂起状态。一个设备也可以通过电信号来远程唤醒进入挂起状态的主机。这个能力是可选的
17、,如果一个设备具有这个能力,主机有能力禁止或允许使用这种能力。 2.3 USB主机 USB 主机在 USB 系统中处于中心地位,并且对 USB 及其连接的设备有着特殊的责 任。主机控制着所有对 USB 的访问,一个外设只有主机允许才有访问总线的权利。主机同时也检测着 USB 的结构。 USB 主机包括三层:设备驱动程序, USB 系统软件, USB 主控制器(主机的总线接口)。另外,还有两个软件接口: USB 驱动( USBD)接口,主机控制驱动( HCD)接口。 湖南大学毕业设计(论文) 第 9 页 图 2.4 主机的层次结构 2.4 USB数据流 图 2.5 USB 数据流过程 湖南大学毕
18、业设计(论文) 第 10 页 从逻辑上讲, USB 数据的传输是通过管道进行的。 USB 系统软件通过缺省管道(与端点0 相对应)管道设备,设备驱动程序通过其它的管道来管理设备的功能接口。实际的数 据传输过程是这样的:设备驱动程序通过对 USBD 接口( USB driver interface)的调用发出输入输出请求( IRP, I/O Request Packet); USB 驱动程序接到请求后,调用 HCD 接口( host controller driver interface),将 IRP 转化为 USB 的传输( transfer),一个 IRP 可以包含一个或多个 USB 传输;
19、然后 HCD 将 USB 传输分解为总线操作( transaction),由主控制器以包( packet)的形式发出。需要注意的是:所有的数据传输都是由主机开 始的,任何外设都无权开始一个传输。 IRP 是由操作系统定义的,而 USB 传输与总线操作是 USB 规范定义的。为了进一步说明USB 传输, 这里 引出帧( frame)的概念。 帧: USB 总线将 1ms 定义为一帧,每帧以一个 SOF 包为开始,在这 1ms 里 USB 进行 一系列的总线操作。引入帧的概念主要是为了支持与时间有关的总线操作。 为了满足不同外设和用户的要求, USB 提供了四中传输方式:控制传输;同步传输;中断传
20、输;批传输。它们在数据格式、传输方向、数据包容量限制、总线访问限制等方面有着各自不同的特征: 控制传输( Control Transfer) 1. 通常用于配置、命令、状态等情形; 2. 其中的设置操作( setup)和状态操作( status)的数据包具有 USB 定义的结构,因此控制传输只能通过消息管道进行; 3. 支持双向传输; 4. 对与高速设备,允许数据包最大容量为 8, 16, 32 或 64 字节,对于低速设备只有8 字节一种选择; 5. 端点不能指定总线访问的频率和占用总线的时间, USB 系统软件会做出限制; 6. 具有数据传输保证,在必要时可以重试。 同步传输( Isochronous Transfer) 1. 是一种周期的、连续的传输方式,通常用于与时间有密切关系的信 息的传输; 2. 数据没有 USB 定义的结构(数据流管道);