USB通信程序开发.doc_第1页
USB通信程序开发.doc_第2页
USB通信程序开发.doc_第3页
USB通信程序开发.doc_第4页
USB通信程序开发.doc_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南大学毕业设计 论文 第 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 BULK 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 器件是否正常工作 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与存储器之间匀 采用并行接口 这样速度快 但外设却以串行接口比较占优势 传统的打印机接口为并行 接口 SCSI标准的全名是小型设备通用接口标准 其传输速率为10M 早期的扫描仪一般 使用此接口 硬盘与主机的联接也使用这种接口 串行接口出现最早 使用最广的RS232 接口 但其速度太慢 现在已经逐渐被淘汰 USB接口和IEEE1394接口是两种速度比较高 的串行接口 还有局域网中的以太网接口 它们具有较广阔的发展前景和应用潜力 USB 适用于低档外设与主机之间的高速数据传输 USB1 1可以达到1 5Mbps或12Mbps的传输率 而1394更是可达100 200 400Mbps USB2 0将速度定位在480Mbps 而IEEE1394也推出了 1394b 1 3 1 版草案 速度从800Mbps起步 最高可达3 2Gbps 局局域中用得最多的是以 太网接口 速度可达100Mbps 当使用光纤传输时 速度可达1000Mbps 1 2 USB 接口分析 通用串行总线 Universal Serial Bus USB 是一种快速 灵活的总线接口 与其 它通信接口比较 USB接口的最大特点是易于使用 这也是USB的主要设计目标 作为一种 高速总线接口 USB适用于多种设备 如数码相机 MP3播放机 高速数据采集设备等 易 于使用还表现在USB接口支持热插拔 并且所有的配置过程都由系统自动完成 无需用户 干预 USB接口支持1 5Mb s 低速 12Mb s 全速 和高达480Mb s USB 2 0规范 的数据传 输速率 扣除用于总线状态 控制和错误监测等的数据传输 USB的最大理论传输速率仍 达1 2Mb s或9 6Mb s 远高于一般的串行总线接口 USB接口芯片价格低廉 一个支持USB 湖南大学毕业设计 论文 第 4 页 1 1 规范的USB接口芯片价格大多在人民币 2004年 15 30元之间 这也大大促进USB设 备的开发与应用 1 3 USB 器件的选择 在进行一个USB设备开发之前 首先要根据具体使用要求选择合适的USB控制器 目前 市场上供应的USB控制器主要有两种 带USB接口的单片机 MCU 或纯粹的USB接口芯片 带USB接口的单片机从应用上又可以分成两类 一类是从底层设计专用于USB控制的单片机 另一类是增加了USB接口的普通单片机 如Cypress公司的EZ USB 基于8051 选择这类 USB控制器的最大好处在于开发者对系统结构和指令集非常熟悉 开发工具简单 但对于 简单或低成本系统 但价格因素也是在实际选择过程中需要考虑的因素 纯粹的USB 接口 芯片仅处理USB通信 必须有一个外部微处理器来进行协议处理和数据交换 典型产品有 Philips公司的PDIUSBD11 I2C接口 PDIUSBD12 并行接口 NS公司的 USBN9603 9604 并行接口 NetChip公司的NET2888 等 USB接口芯片的主要特点是价格 便宜 接口方便 可靠性高 尤其适合于产品的改型设计 硬件上仅需对并行总线和中断 进行改动 软件则需要增加微处理器的USB中断处理和数据交换程序 PC机的USB接口通信 程序 无需对原有产品系统结构作很大的改动 1 4 Mass Storage协议与FAT16文件系统 USB组织定义了海量存储设备类 Mass Storage Class 的规范 这个类规范包括四 个独立的子类规范 即 1 USB Mass Storage Class Control 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三种类型的 端点进行数据 命令 状态传送 后两个子规范则定义了存储介质的操作命令 ATA命令规 范用于硬盘 UFI命令规范是针对USB移动存储 Microsoft Windows中提供对Mass Storage协议的支持 因此USB移动设备只需要遵循Mass Storage协议来组织数据和处理命 令 即可实现与PC机交换数据 而Flash的存储单元组织形式采用FAT16文件系统 这样 就可以直接在Windows的浏览器中通过可移动磁盘来交换数据了 Windows负责对FAT16文 湖南大学毕业设计 论文 第 5 页 件系统的管理 USB设备不需要干预FAT16文件系统操作的具体细节 第二章 USB总线结构 2 1 总线拓扑结 USB总线的物理连接是一种有层次性的星型结构 集线器 HUB 是每个星型结构的中 心 PC机就是主机和根HUB 用户可以将外设或附加的HUB与之相连 这些附加的HUB可以 连接另外的外设以及下层HUB USB支持最多5个HUB层以及127个外设 从下图描述了总线 的这种物理拓扑结构 图 2 1 USB 总线拓扑结构 2 2 USB设备 USB 设备包括 HUB 和功能设备 而功能设备又可以细分为定位设备 字符设备等等 为了进一步叙述 这里给出端点 endpoint 和管道 pipe 的概念 端点 每一个 USB 设备在主机看来就是一个端点的集合 主机只能通过端点与设备进 湖南大学毕业设计 论文 第 6 页 行通讯 以使用设备的功能 每一个端点实际上就是一个一定大小的数据缓冲区 这些端 点在设备出厂时就已经定义好了 在 USB 系统中 每一个端点都有唯一的地址 这是由设 备地址和端点号给出的 每个端点都有一定的特性 其中包括 传输方式 总线访问频率 带宽 端点号 数据包的最大容量等等 除端点 0 外 其它端点必须在设备配置后才能生 效 端点 0 通常为控制端点 用于设备初始化参数等 端点 1 2 等一般用作数据端点 存放主机与设备间往来的数据 管道 一个 USB 管道是驱动程序的一个数据缓冲区与一个外设端点的连接 它代表 了一种在两者之间移动数据的能力 一旦设备被配置 管道就存在了 管道由两种类型 数据流管道 其中的数据没有 USB 定义的结构 与消息管道 其中的数据必须由 USB 定义 的结构 管道只是一个逻辑上的概念 所有的设备必须支持端点 0 以作为设备的控制管道 通过控制管道可以获取完全描 述 USB 设备的信息 包括 设备类型 电源管理 配置 端点描述等等 只要设备连接到 USB 上并上电 端点 0 就可以被访问 与之对应的控制管道就存在了 一个 USB 设备可以分为三个层 最底层是总线接口 用来发送与接收包 中间层处理 总线接口与不同的端点之间的数据流通 一个端点是数据最终的使用者或提供者 它可以 看作是数据源或是数据接收端 最上层就是 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 就会产生一系列的操作 来完成对设备的配置 这种操作被称为 总线枚举过程 1 设备所连接的 HUB 检测出端口上由设备连接 通过状态变化管道向主机报告 2 主机通过询问 HUB 以获得确切的信息 3 主机这时知道设备连接到那个端口上 于是向这个端口发出复位命令 4 HUB 发出的复位信号结束后 端口被打开 HUB 向设备提供 100mA 的电源 这时 设备上电 所有的寄存器复位 并且以缺省地址 0 以及端点 0 响应命令 5 主机通过缺省地址与端点 0 进行通讯 赋予设备一个唯一的地址 并且读取设备 的配置信息 6 最后主机对设备进行配置 该设备就可以使用了 湖南大学毕业设计 论文 第 8 页 当该设备被移走时 HUB 依然要报告主机 并且关闭端口 一旦主机接收到设备移走 的报告 就会改写当前结构信息 2 2 3 设备电源 USB 设备的电源可以由 USB 总线供给 也可以自备电源 一个 USB 设备可以具有这两 种供电方式 但同一时刻只能由一种方式供电 这两种供电方式是可以切换的 2 2 4 设备的挂起 为了节电 当设备在指定的时间内没有总线传输 USB 设备自动进入挂起状态 如果 设备所接的 HUB 的端口被禁止了 设备也将进入挂起状态 称之为选择挂起 当然主机 也可以进入挂起状态 USB 设备当总线活动时 就会离开挂起状态 一个设备也可以通过电信号来远程唤醒 进入挂起状态的主机 这个能力是可选的 如果一个设备具有这个能力 主机有能力禁止 或允许使用这种能力 2 3 USB主机 USB 主机在 USB 系统中处于中心地位 并且对 USB 及其连接的设备有着特殊的责任 主机控制着所有对 USB 的访问 一个外设只有主机允许才有访问总线的权利 主机同时也 检测着 USB 的结构 USB 主机包括三层 设备驱动程序 USB 系统软件 USB 主控制器 主机的总线接口 另外 还有两个软件接口 USB 驱动 USBD 接口 主机控制驱动 HCD 接口 湖南大学毕业设计 论文 第 9 页 图 2 4 主机的层次结构 2 4 USB数据流 图 2 5 USB 数据流过程 湖南大学毕业设计 论文 第 10 页 从逻辑上讲 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 的形式发出 需要注意的是 所有的数据传输都是由主机开始 的 任何外设都无权开始一个传输 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 是一种周期的 连续的传输方式 通常用于与时间有密切关系的信息的传输 2 数据没有 USB 定义的结构 数据流管道 湖南大学毕业设计 论文 第 11 页 3 单向传输 如果一个外设需要双向传输 则必须使用另一个端点 4 只能用于高速设备 数据包的最大容量可以从 0 到 1023 个字节 5 具有带宽保证 并且保持数据传输的速率恒定 每个同步管道每帧传输一个数据 包 6 没有数据重发机制 要求具有一定的容错性 7 与中断方式一起 占用总线的时间不得超过一帧的 90 中断传输 Interrupt Transfer 1 用于非周期的 自然发生的 数据量很小的信息的传输 如键盘 鼠标等 2 数据没有 USB 定义的结构 数据流管道 3 只有输入这一种传输方式 即外设到主机 4 对于高速设备 允许数据包最大容量为小于或等于 64 字节 对于低速设备只能 小于或等于 8 字节 5 具有最大服务周期保证 即在规定时间内保证有一次数据传输 6 与同步方式一起 占用总线的时间不得超过一帧的 90 7 具有数据传输保证 在不要时可以重试 批传输 Bulk Transfer 1 用于大量的 对时间没有要求的数据传输 2 数据没有 USB 定义的结构 数据流管道 3 单向传输 如果一个外设需要双向传输 则必须使用另一个端点 4 只能用于高速设备 允许数据包最大容量为 8 16 32 或 64 字节 5 没有带宽的保证 只要有总线空闲 就允许传输数据 优先级小于控制传输 6 具有数据传输保证 在必要时可以重试 以保证数据的准确性 湖南大学毕业设计 论文 第 12 页 图 2 6 USB 数据传输 2 5 USB的端点 端点是USB中一个独特的概念 它是一个可以与USB Host交换数据的硬件单元 USB Host与USB设备之间都是通过端点来传输数据的 端点是桥梁和纽带 不同的端点其传输 数据的能力不同 适于不同的应用场合 PDIUSBD12的端点适用于不同类型的设备 例如图像打印机 海量存储器和通信设备 端点可通过Set Mode命令配置为4种不同的模式 分别为 1 模式0 Non ISO 模式 非同步传输 2 模式1 ISO OUT 模式 同步输出传输 3 模式2 ISO IN 模式 同步输入传输 4 模式3 ISO IO 模式 同步输入输出传输 这几种模式下可得到的端点情况如下表2 1 表2 1 端点模式 湖南大学毕业设计 论文 第 13 页 端点 2 主端点 是进行吞吐大量数据的主要端点 主端点执行主机的特性以减轻传 输大数据的任务 包括 1 双缓冲 允许 USB 与本地 CPU 之间的并行读写操作 增加了数据的吞吐量 缓冲 区切换是自动处理的 导致了透明的缓冲区操作 2 支持 DMA 直接存储器访问 操作 可以和对其他端点的正常 I O 操作交进行 3 DMA 操作中的自动指针处理 在跨过缓冲区边界时不需要本地 CPU 的干预 4 可配置为同步传输或非同步 批量和中断 传输 湖南大学毕业设计 论文 第 14 页 第三章 协议 3 1 Mass Storage 协议 USB协议能够在启动或是当设备插入系统时对设备进行备置 这就是USB设备为什么可 以执插拨的原因 USB设备被分成以下几类 显示器 Monitors 通讯设备 Communication devices 音频设备 Audio 人机输入 Human input 海量存 储 Mass storage 特定类 class 的设备又可划分成子类 subclass 划分子类 的后软件就可以搜索总线并选择所有它可以支持的设备 每个设备可以有一个或多个配置 湖南大学毕业设计 论文 第 15 页 Configuration 配置用于定义设备的功能 如果某个设备有几种不同的功能 则每 个功能都需要一个配置 配置 configuration 是接口 interface 的集合 接口指定 设备中的哪些硬件与USB交换数据 每一个与USB交换数据的硬件就叫做一个端点 endpoint 因此 接口是端点的集合 USB的设备类别定义 USB Device Class Definitions 定义特定类或子类中的设备需要提供的缺省配置 接口和端点 描述符 descriptor 描述设备 配置 接口或端点的一般信息 下图为USB 描述符的层次结构 图 3 1 USB 描述符层次结构 USB Host 唯一通过描述符了解设备的有关信息 根据这些信息建立起通信 在这 些描述符中 规定了设备所使用的协议 端点情况等 因此 正确地提供描述符 是USB 设备正常工作的先决条件 USB海量存储设备 USB Mass Storage Class 包括General Mass Storage Subclass CD ROM Tape Solid State Mass Storage Class只需要支 持一个接口 即数据 Data 接口 选择缺省配置时此接口即被激活 数据接口允许与设 备之间进行数据传输 它提供三个端点 Bulk Input 端点 Bulk Output 端点和中断端 点 通用海量存储设备 General Mass Storage Device 是随机存取 基于块 扇区存 湖南大学毕业设计 论文 第 16 页 储的设备 它只能存储和取回来自CPU 的数据 这种设备的接口遵循SCSI 2标准的直接 存取存储设备 Direct Access Storage Device 协议 USB设置上的介质使用与SCSI 2 设备相同的逻辑块 logical blocks 方式寻址 下面介绍基于Bulk Only 批量传输 模式的Mass Storage 设备的描述符 每个USB设备都必须有一个设备描述符 图3 2 设备 Device 描述符 Mass Stroage设备的设备类型和子类代码均在接口描述符中设置 这里置0 其中 iSerialNumber可为零 即不指定Serial Number 配置描述符如下图 湖南大学毕业设计 论文 第 17 页 图3 3 配置 Configuration 描述符 这里配置所支持的接口数应为1 即设置至少支持一个接口 这里为Bulk Only Data 接口 此接口使用三个端点 控制端点 默认 Bulk In和Bulk Out 其中 bInterfaceSubClass指定所使用的工业标准命令块 bInterfaceProtocol为所使用的传输 协议 图3 4 bInterfaceSubClass 处的工业标准命令块代码 湖南大学毕业设计 论文 第 18 页 图3 5 Mass Storage 传输协议 接口描述符如下图 图3 6 接口 Interface 描述符 由于控制端点为每个设备都使用的缺省端点 因此不需要定义 只需定义Bulk In和 Bulk Out两个端点 其端点描述符如下 图3 7 Bulk In端点描述符 湖南大学毕业设计 论文 第 19 页 图3 8 Bulk Out端点描述符 3 2 Bulk Only传输协议 设备插入到USB后 USB即对设备进行搜索 并要求设备提供相应的描述符 在USB Host 得到上述描述符后 即完成了设备的配置 识别出为Bulk Only的Mass Storage设 备 然后即进入Bulk Only传输方式 在此方式下 USB与设备间的所有数据均通过 Bulk In和Bulk Out来进行传输 不再通过控制端点传输任何数据 在这种传输方式下 有三种类型的数据在USB和设备之间传送 CBW CSW 和普通数据 CBW Command Block Wrapper 即命令块包 是从USB Host发送到设备的命令 命令格式遵从接口中的 bInterfaceSubClass 所指定的命令块 这里为SCSI传输命令集 USB设备需要将SCSI命令 从CBW中提取出来 执行相应的命令 完成以后 向Host发出反映当前命令执行状态的 CSW Command Status Wrapper 即命令状态包 Host根据CSW来决定是否继续发送下一 个CBW或是数据 Host要求USB设备执行的命令可能为发送数据 则此时需要将特定数据传 送出去 完毕后发出CSW 以使Host进行下一步的操作 USB设备所执行的操作可用下图描 述 湖南大学毕业设计 论文 第 20 页 图3 9 USB 设备所执行的操作 USB Host 按照下面的格式向设备端发送CBW 图3 10 CBW 其中dCBWSignature的值为43425355h LSB 表示当前发送的是一个CBW dCBWTag 的内容需要原样作为dCSWTag再发送给Host dCBWDataTransferLength为本次CBW需要传输 的数据长度 bmCBWFlags反映数据传输的方向 0表示来自Host 1表示发至 Host bCBWLUN一般为零 但当设备有多个逻辑单元时 用此位指定本次命令是发给谁的 湖南大学毕业设计 论文 第 21 页 bCBWCBLength为本次命令字的长度 CBWCB即为真正的传输命令集的命令 设备得到一个 CBW后 解析出CBWCD中所代表的命令 然后按照SCSI命令集中的定义来执行相应的操作 或是需要接收下一个Bulk Out发来的数据 或是需要向Host传送数据 完成以后需要向 USB Host发送CSW 反映命令执行的状态 USB也是通过此来了解设备的工作情况的 USB 设备按照下面的格式向主机端发送CBW 图3 11 CSW 其中dCSWSignature的值为53425355h LSB 表示当前发送的是一个CSW dCSWTag 的内容为dCBWTag的内容 dCSWDataResidue为还需要传送的数据 此数据根据 dCBWDataTransferLength减去本次已经传送的数据得到 Host端根据此值决定下一次CBW 的内容 如果没有完成则继续 如果命令正确执行 则bCSWStatus返回0 设备按这个规 则组装好CSW后 通过Bulk In端点将其发送给主机 3 3 SCSI指令集 Bulk Only的CBW中的CBWCB中的内容即为如下格式的命令块描述符 Command Block Descriptor SCSI 2有三种字长的命令 6位 10位和12位 Microsoft Windows环境下 支持12 位字长的命令 湖南大学毕业设计 论文 第 22 页 图3 12 命令块描述符 Command Block Descriptor Operation Code是操作代码 表示特定的命令 高3位为Group Code 共有8 种组合 即8个组 低5五位为Command Code 可以有32种命令 Logicol unit Number是为了兼容 SCSI 1而设的 Logical block address为高位在前 低位在后的逻辑块地址 即扇区地 址 Transfer length为需要从逻辑块地址处开始传输的扇区数 比如在Read 和Write 命 令中 Parameter list length为需要传输的数据长度 比如在Mode Sense 命令中 Allocation length为初始程序为返回数据所分配的最大字节数 此值可以为零 表示不 需要传送数据 SCSI指令集的Direct Accesss类型存储介质的传输命令有许多 所幸运的 是Mass Storage协议只用到了其中的一些 下面黑体部分即为需要USB设备作出响应的请 求 一般是要求向Host发送一些有关设备的数据 湖南大学毕业设计 论文 第 23 页 表3 1 SCSI指令集 对于不同的命令 其命令块描述符略有不同 其要求的返回内容也有所不同 根据相 应的文档 可以对每种请求作出适当的回应 下面以INQUIRY请求为例 给出该命令块的 命令块描述符和其返回内容的数据格式 其它命令块格式和返回内容请参考Information technology SCSI Primary Commands 2 SPC 2 湖南大学毕业设计 论文 第 24 页 图3 13 INQUIRY命令块描述符 图3 14 INQUIRY命令返回数据格式 Host会依次发出INQUIRY READ CAPACITY UFI MODE SENSE请求 如果上述请求的返 回结果都正确 则Host会发出READ命令 读取文件系统0簇0扇区的MBR数据 进入文件系 统识别阶段 对于PREVENT ALLOW MEDIUM REMOVAL 和TEST UNIT READY命令 只需直接返 回CSW即可 对于后者 由于Flash盘总是处于READY状态 故可直接返回CSW 3 4 FAT16 文件系统 3 4 1 FAT 文件系统结构 一个FAT FAT12 FAT16 FAT32 文件系统卷 卷可以理解为是一张软盘 一个硬盘 或是一个Flas电子盘 由四个部分组成 3 4 1 1 保留区 Reserved Region 分区的保留区 Reserved Region 中的第一个扇区必须是BPB BIOS Parameter 湖南大学毕业设计 论文 第 25 页 Block 此扇区有时也称作 引导扇区 保留扇区 或是 零扇区 因为它含有对 文件系统进行识别的关键信息 因此十分重要 下表是此扇区的结构 表3 2 引导扇区结构 一 湖南大学毕业设计 论文 第 26 页 表3 3 引导扇区结构 二 湖南大学毕业设计 论文 第 27 页 表3 4 引导扇区结构 三 3 4 1 2 FAT 区 FAT即File Allocation Table 文件分配表 操作系统分配磁盘空间按簇来分配的 因此 文件占用磁盘空间时 基本单位不是字节而是簇 即使某个文件只有一个字节 操 作系统也会给他分配一个最小单元 即一个簇 为了可以将磁盘空间有序地分配给相应 的文件 而读取文件的时候又可以从相应的地址读出文件 我们把整个磁盘空间分成32K 字节长的簇来管理 每个簇在FAT表中占据着一个16位的位置 称为一个表项 对于大文 件 需要分配多个簇 同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内 而往往会分成若干段 像一条链子一样存放 这种存储方式称为文件的链式存储 为了实 现文件的链式存储 硬盘上必须准确地记录哪些簇已经被文件占用 还必须为每个已经占 用的簇指明存储后继内容的下一个簇的簇号 对一个文件的最后一簇 则要指明本簇无后 湖南大学毕业设计 论文 第 28 页 继簇 这些都是由FAT表来保存的 FAT表的对应表项中记录着它所代表的簇的有关信息 诸如是否空 是否是坏簇 是否已经是某个文件的尾簇等 FAT区的结构如下 表3 5 FAT区结构 FAT的项数与硬盘上的总簇数相关 因为每一个项要代表一个簇 簇越多当然需要的 FAT表项越多 每一项占用的字节数也与总簇数有关 因为其中需要存放簇号 簇号越 大当然每项占用的字节数就大 FAT的格式有多种 最为常见是FAT16和FAT32 其中 FAT16是指文件分配表使用16位 由于16位分配表最多能管理65536 即2的16次方 个簇 又由于每个簇的存储空间最大只有32KB 所以在使用FAT16管理硬盘时 每个分区的最大 存储容量只有 65536 32 KB 即2048MB 也就是我们常说的2G 现在的硬盘容量是越来 越大 由于FAT16对硬盘分区的容量限制 所以当硬盘容量超过2G之后 用户只能将硬盘 划分成多个2G的分区后才能正常使用 由于FAT对于文件管理的重要性 所以FAT有一个备 份 即在原FAT的后面再建一个同样的FAT 3 4 1 3 根目录区 Root Directory Region 紧接着第二个FAT表的后面一个扇区 就是根目录区了 根目录区中存放目录项 每 个目录项为32个字节 记录一个文件或目录的信息 长文件名例外 以下是目录项的结构 表3 6 目录项结构 湖南大学毕业设计 论文 第 29 页 目录项所占的扇区数与有多少个目录项有关 它将占用 目录项 32 512 个扇区 3 4 1 4 文件和目录数据区 目录项的所占的最后一个扇区之后 便是真正存放文件数据或是目录的位置了 3 4 2 Flash盘的FAT结构 Flash硬盘与普通的磁头 柱面式介质不一样 在开发U盘的过程中 使用Flash作为 存储介质 它有其特定的结构特点 以32M的三星K9F5608U0A YCB0 Flash为例 它有2048 个Block 每个Block 有32个Page 每个Page有512 16 528个字节 湖南大学毕业设计 论文 第 30 页 图3 15 Flash 的结构 Flash的读写有其自身特点 1 必须以Page为单位进行读写 2 写之前必须先擦除原有内容 3 擦除操作必须对Block进行 即一次至少擦除一个Block的内容 针对这种情况 将Flash的一个Page定为1个扇区 将其2个Block 64个扇区定为一个 簇 这样 簇的容量刚好为512 64 32K 满足FAT16对簇大小的要求 FAT分配空间的时 候 是按簇来分配的 但是其给出的地址却是LBA Logical BlockAddress 即它只给 出一个扇区号 比如对此Flash而言 若给出LBA为0 x40 实代表簇1的扇区1 因此需要将 Logical Block Address转换为物理地址 这样 才可以对数据进行存取操作 根据上面 定义的结构 转换公式为 Flash 的Block Logical Block Address 0 x20 1 Flash 的Page Logical Block Address 0 x20 2 实际上 如果定义每个簇为32 个扇区是最好的 因为这样物理结构和逻辑结构刚好一致 但是这也无防 因为不管Logical Block Address给出什么值 只要按上述公式 总可以 得到物理上正确的Block 和Page 再使用Flash的读写命令读取对应的Block和Page就可以 湖南大学毕业设计 论文 第 31 页 了 因此簇和扇区的概念只是在BPB中给出存储介质信息的时候告之系统就可以了 这里 只要做好LBA与物理地址间的转换就可以了 由于做为U盘的Flash不要求启动 因此可以 没有MBR 区 只包含DBR FAT DIR和DATA四个区 因此 Flash的前两个Block的内容如 下 表3 6 Flash的前两个Block LBABlock Page 长度内容说明 0H0 0 512字节MBR BPB Excutable Code 55AA 1 2H0 1 0 2 1024字节FAT区 第一份FAT 3 4H0 3 0 4 1024字节FAT区备份 第二份FAT 5 39H 目录区 40H 数据区 当主机发出READ命令后 Flash读写操作即告开始 主机首先读取MBR 得到有关存储 介质的有关信息 诸如扇区长度 每簇扇区数以及总扇区数等内容 以便知道此盘有多大 如果读取正确 会接着读取文件分配表 借以在PC 机上的可移动盘符中显示文件目录 并可以复制 删除或是创建文件 系统自动将这些命令都转换成READ或WRITE两种命令 通过USB的READ或WRITE命令块描述符来从Flash中相应扇区读取数据 或是将特定长度的 数据写入Flash相应地址中 湖南大学毕业设计 论文 第 32 页 第四章 程序实现与调试 4 1 固件程序的实现 4 1 1 主循环 MAINLOOP C 主循环检查事件标志并进入子程序进行进一步的处理 MCU一但上电就需要初始化其 所有端口 存储区 定时器和中断服务程序 之后MCU将重新连接USB 包括将 Soft Connect寄存器设置为ON 因为这些过程确保了在MCU准备好服务D12之前D12不会进 行操作 所以是很重要的 下图为主循环流程 Yes 主循环开始 初始化 I O 端口 定时 器和中断 重新连接到 USB 总线 循环 USB 中断 中断服务程序 No 图4 1 主循环流程图 4 1 2 中断服务程序 D12ISR C 中断服务程序代码处理由D12产生的中断 它将数据从D12的内FIFO取回到CPU存储器 并建立正确的事件标志 以通知相应的子程序进行处理 下图为中断服务程序流程图 湖南大学毕业设计 论文 第 33 页 中断服务 读取 D12 中断寄存器 控制输入 控制输出 端点 1 输入 端点 1 输出 端点 2 输入 端点 2 输出 DMA 传输结束 挂起改变 总线复位 中断服务结束 控制端点发送数据处理 控制端点接收数据处理 DMA 传输技术处理 端点 2 接收数据处理 端点 2 发送数据处理 端点 1 发送数据处理 端点 1 接收数据处理 设置挂起改变标志 设置总线复位标志 No No No No No No No No No Yes Yes Yes Yes Yes Yes Yes Yes Yes 图4 2 中断服务程序流程图 湖南大学毕业设计 论文 第 34 页 4 1 2 1 控制端点处理 控制传输总是在SETUP阶段开始 之后为可选的DATA阶段 然后在STATUS阶段结束 固件使用这3个状态来正确处理控制传输 下图为控制端点处理程序流程图 控制输出入口 读端点处理状态清中断 标志 SETUP 包 SETUP 处理程序 控制输出子程序结束 No Yes 图4 3 控制输出程序流程图 控制输入入口 清中断标志位 数据提交处理 控制输入子程序结束 图4 4 控制输入程序流程图 湖南大学毕业设计 论文 第 35 页 4 1 2 2 普通端点处理 对于普通输出端点 本项目中为BULK OUT端点 配置为从主机接收数据包 当MCU从 主机接收输出中断标志 通过读中断寄存器识别 时 D12中断位清零 选择端点将清零 缓冲区 接下来MCU需要确认数据的长度并把数据读出 然后进入数据处理子程序 对于普通输入端点 本项目中为BULK IN端点 的中断 只要读取端点号的最后处理 状态寄存器来清除中断寄存器的相应位 并把状态清零即可 输入端点中断是在发送完数 据后才产生的 当还有数据要发送时 可以在中断程序程序里接着继续发送 下图为普通端点处理程序流程图 普通输入入口 清中断标志读取缓冲区 数据 输入数据接口子程序 普通输入子程序结束 普通输出入口 清中断标志读取缓冲区 数据 数据处理 确认数据长度并读出 普通输出子程序结束 图4 5 普通端点处理程序流程图 4 1 2 3 总线复位和挂起改变 总线复位和挂起并不要求在ISR中进行特殊的处理 所以这里直接退出程序即可 4 1 2 4 数据提交函数 在中断服务程序还里定义了数据提交函数 该子程序负责把数据写入端点缓冲区 然 后提交给主机 下图为数据提交函数程序流程图 湖南大学毕业设计 论文 第 36 页 程序入口 确定传输数据长度 选择端点 写指定长度的数据到 缓冲区 缓冲区数据提交主机 程序结束 图4 6 数据提交函数程序流程图 4 1 3 标准设备请求处理 D12SETUP C 4 1 3 1 获取状态 GET STATUS 00H GET STATUS请求要求接收方返回一个相应的状态 设备返回16位的状态描述 图4 7 为GET STATUS的工作流程图 4 1 3 1 1 获取设备的状态 当GET STATUS的索引为设备时 主机获取设备的状态 如果请求是对器件 MCU必须 向主机返回器件状态 4 1 3 1 2 获取接口的状态 因为接口状态的16位字节全部保留 所以返回0 x0000即可 4 1 3 1 3 获取端点的状态 一个端点有输入和输出两个端点号 这里使用了索引BIT7来标识要求返回的端点的方 向 BIT7 1为返回输入端点的状态 BIT7 0为返回输出端点的状态 湖南大学毕业设计 论文 第 37 页 GET STATUS 对设备请求 对接口请求 对端点请求 返回设备状态 返回接口状态 数据提交处理 返回端点状态 子程序结束 No No No Yes Yes Yes 图4 7 GET STATUS的工作流程图 4 1 3 2 清除特性 CLEAR FEATURE 01H CLEAR FEATURE用来清除或禁止设备的一个特定的特性 当接收到CLEAR FEATURE的请 求后 设备就执行相应的操作 并返回一个空的数据表示执行完毕 图4 8为CLEAR FEATURE的工作流程图 4 1 3 3 设置特性 SET FEATURE 03H SET FEATURE用来设置或允许一个特性 SET FEATURE和CLEAR FEATURE是两个相反的 动作 同样 当接收到SET FEATURE的请求后 设备就执行相应的操作 并返回一个空的 数据表示执行完毕 图4 9为SET FEATURE的工作流程图 4 1 3 4 设置地址 SET ADDRESS 05H 在USB设备枚举的时候 主机会分配一个新的地址给设备 以取代默认地址 默认地 址为0 当设备接收到这一设备请求的时候 要做的事情就是把设备的当前地址改为分 配的地址 以让设备对新的地址作出响应 注意此设置地址请求不含数据阶段 MCU需要 湖南大学毕业设计 论文 第 38 页 向主机写一个零长度的数据包作为应答阶段 CLEAR FEATURE 对设备请求 对接口请求 对端点请求 清除设备唤醒功能 应答主机 清接口状态 数据提交处理 启用端点 子程序结束 No No No Yes Yes Yes 图4 8 CLEAR FEATURE的工作流程图 湖南大学毕业设计 论文 第 39 页 SET FEATURE 对设备请求 对接口请求 对端点请求 设置设备唤醒功能 应答主机 设置接口状态 数据提交处理 停止端点 子程序结束 No No No Yes Yes Yes 图4 9 SET FEATURE的工作流程图 SET ADDRESS 设置新的地址 提交 0B 的数据的程序 子程序结束 图4 10 SET ADDRESS的工作流程图 4 1 3 5 获取描述符 GET DESCRIPTOR 06H GET DESCRIPTOR是主机用来获取USB设备相对应的描述符的一个请求 在这里 设备 请求值的高8位为要求获取的描述符的类型 设备按照请求类型返回相应的描述符 下图 湖南大学毕业设计 论文 第 40 页 为GET DESCRIPTOR的工作流程图 SET DESCRIPTOR 设备描述符 配置描述符 字符串描述符 处理设备描述符 处理配置描述符 数据提交处理 处理字符串描述符 子程序结束 No No No Yes Yes Yes 图4 11 SET DESCRIPTOR的工作流程图 4 1 3 6 获取配置信息GET CONFIGURATION 08H GET CONFIGURATION用于获取当前的配置信息 如果设备已经配置 则返回信息为当 前的配置值 一个字节 否则返回为0 表示还没有配置 图4 12为GET CONFIGURATION 的工作流程图 4 1 3 7 设置配置SET CONFIGURATION 09H SET CONFIGURATION是用来选择设备的工作配置 SET CONFIGURATION中的值只能是0 或与配置描述符中bConfiguration Value相同的值 一旦SET CONFIGURATION有效 MCU还 需要向主机发送零数据包作为应答阶段 图4 13为SET CONFIGURATION的工作流程图 4 1 3 8 获取接口信息 GET INTERFACE 0AH GET INTERFACE用于返回当前的接口号 返回信息为一个字节 4 1 3 9 设置接口 SET INTERFACE 0BH SET INTERFACE用于设备支持多接口的时候 主机用来选择一个接口 如果选择正确 湖南大学毕业设计 论文 第 41 页 设备发送一个空的数据表示执行完毕 GET CONFIGURAION 设置返回的配置值 数据提交程序 子程序结束 图4 12 GET CONFIGURATION的工作流程图 SET CONFIGURATION 主机发送 0 到设备 主机发送 1 到设备 设置未配置 设备 进入地址状态 设置已配置 配置 设备 提交 0B 数据到主机做应答 处理 子程序结束 No No Yes Yes 图4 13 SET CONFIGURATION的工作流程图 4 1 4 NAND FLASH操作程序 NFLASH32 C 存储器操作程序处理了数据的固定存储读写操作 对FLASH的读写又有其自身的特点 特别是它可以随机读 但无法随机的写 因此 对于写数据的问题 就需要通过设置缓冲 湖南大学毕业设计 论文 第 42 页 区来解决 下面介绍各功能函数的设计实现 4 1 4 1 块擦除函数 对于FLASH的擦除操作是基于16K字节的块的 下图为块擦除函数程序流程图 程序入口 块擦除命令 设定擦除块地址 处理命令 读处理状态 打印处理状态 子程序结束 图4 13 块擦除函数程序流程图 4 1 4 2 页拷贝函数 对于FLASH的页拷贝操作是基于512字节的扇区的 下图为页拷贝函数程序流程图 湖南大学毕业设计 论文 第 43 页 程序入口 页拷贝命令 1 设定拷贝页地址 页拷贝命令 2 读处理状态 打印处理状态 子程序结束 设定目的页地址 图4 14 页拷贝函数程序流程图 4 1 4 3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论