




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 目录第一章 绪论 (11.1PC接口简介 11.2USB接口分析11.3USB器件的选择 11.4M ASS S TORAGE协议与FAT16文件系统 2第二章 USB总线结构 (32.1总线拓扑结 32.2USB设备 32.3USB主机 62.4USB数据流72.5USB的端点9第三章 协议 (123.1M ASS S TORAGE 协议123.2B ULK-O NLY传输协议163.3SCSI指令集183.4FAT16文件系统21第四章 程序实现与调试 (294.1固件程序的实现294.2固件调试42 结论 (46致谢 (47参考文献 (48附录 (49附录A USB接口芯片命令总汇49
2、A1.初始化命令 (50A2.数据流命令 (54A3.数据流命令 (59附录B U盘固件程序源码清单60 第一章 绪论1.1 PC接口简介1.2 USB 接口分析通用串行总线(Universal Serial Bus USB,是一种快速、灵活的总线接口。与其它通信接口比较,USB接口的最大特点是易于使用,这也是USB的主要设计目标。作为一种高速总线接口,USB适用于多种设备,如数码相机、MP3播放机、高速数据采集设备等。易于使用还表现在USB接口支持热插拔,并且所有的配置过程都由系统自动完成,无需用户干预。USB接口支持1.5Mb/s(低速、12Mb/s(全速和高达480Mb/s(USB 2.
3、0规范的数据传输速率,扣除用于总线状态、控制和错误监测等的数据传输,USB的最大理论传输速率仍达1.2Mb/s 或9.6Mb/s,远高于一般的串行总线接口。USB接口芯片价格低廉,一个支持USB 1.1 规范 的USB接口芯片价格大多在人民币(2004年1530元之间,这也大大促进USB设备的开发与应用。1.3 USB 器件的选择在进行一个USB设备开发之前,首先要根据具体使用要求选择合适的USB控制器。目前,市场上供应的USB控制器主要有两种:带USB接口的单片机(MCU或纯粹的USB接口芯片。带USB接口的单片机从应用上又可以分成两类,一类是从底层设计专用于USB控制的单片机另一类是增加了
4、USB接口的普通单片机,如Cypress公司的EZ-USB(基于8051,选择这类USB控制器的最大好处在于开发者对系统结构和指令集非常熟悉,开发工具简单,但对于简单或低成本系统。但价格因素也是在实际选择过程中需要考虑的因素。纯粹的USB 接口芯片仅处理USB通信,必须有一个外部微处理器来进行协议处理和数据交换。典型产品有Philips公司的PDIUSBD11(I2C接口、PDIUSBD12(并行接口,NS公司的USBN9603/9604(并行接口,NetChip公司的NET2888 等。USB接口芯片的主要特点是价格便宜、接口方便、可靠性高,尤其适合于产品的改型设计(硬件上仅需对并行总线和中
5、断进行改动,软件则需要增加微处理器的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 Blo
6、ck 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协议来组织数据和处理命令,即可
7、实现与PC机交换数据。而Flash的存储单元组织形式采用FAT16文件系统,这样,就可以直接在Windows的浏览器中通过可移动磁盘来交换数据了,Windows负责对FAT16文件系统的管理,USB设备不需 要干预FAT16文件系统操作的具体细节。第二章 USB总线结构2.1 总线拓扑结USB总线的物理连接是一种有层次性的星型结构,集线器(HUB是每个星型结构的中心。PC机就是主机和根HUB,用户可以将外设或附加的HUB与之相连,这些附加的HUB可以连接另外的外设以及下层HUB。USB支持最多5个HUB层以及127个外设。从下图描述了总线的这种物理拓扑结构。 图2.1 USB总线拓扑结构2.2
8、 USB设备USB设备包括HUB和功能设备,而功能设备又可以细分为定位设备、字符设备等等。为了进一步叙述,这里给出端点(endpoint和管道(pipe的概念。端点:每一个USB设备在主机看来就是一个端点的集合,主机只能通过端点与设备进 行通讯,以使用设备的功能。每一个端点实际上就是一个一定大小的数据缓冲区,这些端点在设备出厂时就已经定义好了。在USB系统中,每一个端点都有唯一的地址,这是由设备地址和端点号给出的。每个端点都有一定的特性。其中包括:传输方式、总线访问频率、带宽、端点号、数据包的最大容量等等。除端点0外,其它端点必须在设备配置后才能生效。端点0通常为控制端点,用于设备初始化参数等
9、,端点1、2等一般用作数据端点,存放主机与设备间往来的数据。管道:一个USB管道是驱动程序的一个数据缓冲区与一个外设端点的连接,它代表了一种在两者之间移动数据的能力。一旦设备被配置,管道就存在了。管道由两种类型,数据流管道(其中的数据没有USB定义的结构与消息管道(其中的数据必须由USB定义的结构。管道只是一个逻辑上的概念。所有的设备必须支持端点0以作为设备的控制管道。通过控制管道可以获取完全描述USB设备的信息,包括:设备类型、电源管理、配置、端点描述等等。只要设备连接到USB 上并上电,端点0就可以被访问,与之对应的控制管道就存在了。一个USB设备可以分为三个层。最底层是总线接口,用来发送
10、与接收包。中间层处理总线接口与不同的端点之间的数据流通。一个端点是数据最终的使用者或提供者,它可以看作是数据源或是数据接收端。最上层就是USB设备所提供的功能,比如鼠标或键盘等。 图2.2 USB设备层次结构HUB在USB结构中是一个关键,它提供了附加的USB节点,这些节点被称为端口。HUB 可以检测出每一个下行端口的状态,并且可以给下端的设备提供电源。从下图描述了一个典型的HUB结构。 图2.3 USB HUBUSB设备可以即插即用,但在可以使用之前,必须对设备进行配置。一旦设备连接到某个USB的节点上,USB就会产生一系列的操作,来完成对设备的配置,这种操作被称为总线枚举过程:1.设备所连
11、接的HUB检测出端口上由设备连接,通过状态变化管道向主机报告;2.主机通过询问HUB以获得确切的信息;3.主机这时知道设备连接到那个端口上,于是向这个端口发出复位命令;4.HUB发出的复位信号结束后,端口被打开,HUB向设备提供100mA的电源,这时设备上电,所有的寄存器复位,并且以缺省地址0以及端点0响应命令;5.主机通过缺省地址与端点0进行通讯,赋予设备一个唯一的地址,并且读取设备的配置信息;6.最后主机对设备进行配置,该设备就可以使用了。 当该设备被移走时,HUB依然要报告主机,并且关闭端口。一旦主机接收到设备移走的报告,就会改写当前结构信息。USB设备的电源可以由USB总线供给,也可以
12、自备电源。一个USB设备可以具有这两种供电方式,但同一时刻只能由一种方式供电。这两种供电方式是可以切换的。为了节电,当设备在指定的时间内没有总线传输,USB设备自动进入挂起状态。如果设备所接的HUB的端口被禁止了,设备也将进入挂起状态(称之为选择挂起。当然主机也可以进入挂起状态。USB设备当总线活动时,就会离开挂起状态。一个设备也可以通过电信号来远程唤醒进入挂起状态的主机。这个能力是可选的,如果一个设备具有这个能力,主机有能力禁止或允许使用这种能力。2.3 USB主机USB主机在USB系统中处于中心地位,并且对USB及其连接的设备有着特殊的责任。主机控制着所有对USB的访问,一个外设只有主机允
13、许才有访问总线的权利。主机同时也检测着USB的结构。USB主机包括三层:设备驱动程序,USB系统软件,USB主控制器(主机的总线接口。另外,还有两个软件接口:USB驱动(USBD接口,主机控制驱动(HCD接口。 图2.4 主机的层次结构2.4 USB数据流 图2.5 USB数据流过程 从逻辑上讲,USB数据的传输是通过管道进行的。USB系统软件通过缺省管道(与端点0相对应管道设备,设备驱动程序通过其它的管道来管理设备的功能接口。实际的数据传输过程是这样的:设备驱动程序通过对USBD接口(USB driver interface的调用发出输入输出请求(IRP, I/O Request Packe
14、t;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进行一系列的总线操作。引
15、入帧的概念主要是为了支持与时间有关的总线操作。为了满足不同外设和用户的要求,USB提供了四中传输方式:控制传输;同步传输;中断传输;批传输。它们在数据格式、传输方向、数据包容量限制、总线访问限制等方面有着各自不同的特征:控制传输(Control Transfer1.通常用于配置、命令、状态等情形;2.其中的设置操作(setup和状态操作(status的数据包具有USB定义的结构,因此控制传输只能通过消息管道进行;3.支持双向传输;4.对与高速设备,允许数据包最大容量为8,16,32或64字节,对于低速设备只有8字节一种选择;5.端点不能指定总线访问的频率和占用总线的时间,USB系统软件会做出限
16、制;6.具有数据传输保证,在必要时可以重试。同步传输(Isochronous Transfer1.是一种周期的、连续的传输方式,通常用于与时间有密切关系的信息的传输;2.数据没有USB定义的结构(数据流管道; 3.单向传输,如果一个外设需要双向传输,则必须使用另一个端点;4.只能用于高速设备,数据包的最大容量可以从0到1023个字节;5.具有带宽保证,并且保持数据传输的速率恒定(每个同步管道每帧传输一个数据包;6.没有数据重发机制,要求具有一定的容错性;7.与中断方式一起,占用总线的时间不得超过一帧的90%。中断传输(Interrupt Transfer1.用于非周期的、自然发生的、数据量很小
17、的信息的传输,如键盘、鼠标等。2.数据没有USB定义的结构(数据流管道;3.只有输入这一种传输方式(即外设到主机;4.对于高速设备,允许数据包最大容量为小于或等于64字节,对于低速设备只能小于或等于8字节;5.具有最大服务周期保证,即在规定时间内保证有一次数据传输;6.与同步方式一起,占用总线的时间不得超过一帧的90%;7.具有数据传输保证,在不要时可以重试。批传输(Bulk Transfer1.用于大量的、对时间没有要求的数据传输;2.数据没有USB定义的结构(数据流管道;3.单向传输,如果一个外设需要双向传输,则必须使用另一个端点;4.只能用于高速设备,允许数据包最大容量为8,16,32或
18、64字节;5.没有带宽的保证,只要有总线空闲,就允许传输数据(优先级小于控制传输;6.具有数据传输保证,在必要时可以重试,以保证数据的准确性。 图2.6 USB数据传输2.5 USB的端点端点是USB中一个独特的概念,它是一个可以与USB Host交换数据的硬件单元。USB Host与USB设备之间都是通过端点来传输数据的,端点是桥梁和纽带,不同的端点其传输数据的能力不同,适于不同的应用场合。PDIUSBD12的端点适用于不同类型的设备,例如图像打印机、海量存储器和通信设备。 端点可通过Set Mode命令配置为4种不同的模式,分别为:1.模式0 Non-ISO 模式:非同步传输2.模式1 I
19、SO-OUT 模式:同步输出传输3.模式2 ISO-IN 模式:同步输入传输4.模式3 ISO-IO 模式:同步输入输出传输这几种模式下可得到的端点情况如下表2.1:表2.1 端点模式 端点2(主端点是进行吞吐大量数据的主要端点。主端点执行主机的特性以减轻传输大数据的任务,包括:1.双缓冲。允许USB与本地CPU之间的并行读写操作,增加了数据的吞吐量。缓冲区切换是自动处理的,导致了透明的缓冲区操作。2.支持DMA(直接存储器访问操作,可以和对其他端点的正常I/O操作交进行。3.DMA操作中的自动指针处理,在跨过缓冲区边界时不需要本地CPU的干预。4.可配置为同步传输或非同步(批量和中断传输。
20、第三章 协议3.1 Mass Storage 协议USB协议能够在启动或是当设备插入系统时对设备进行备置,这就是USB设备为什么可以执插拨的原因。USB设备被分成以下几类:显示器(Monitors、通讯设备(Communication devices、音频设备(Audio、人机输入(Human input、海量存储(Mass storage。特定类(class的设备又可划分成子类(subclass,划分子类的后软件就可以搜索总线并选择所有它可以支持的设备。每个设备可以有一个或多个配置(Configuration,配置 用于定义设备的功能。如果某个设备有几种不同的功能,则每个功能都需要一个配置。
21、配置(configuration是接口(interface的集合。接口指定设备中的哪些硬件与USB交换数据。每一个与USB交换数据的硬件就叫做一个端点(endpoint。因此,接口是端点的集合。USB的设备类别定义(USB Device Class Definitions定义特定类或子类中的设备需要提供的缺省配置、接口和端点。描述符(descriptor描述设备、配置、接口或端点的一般信息,下图为USB 描述符的层次结构。 图3.1 USB描述符层次结构USB(Host唯一通过描述符了解设备的有关信息,根据这些信息建立起通信,在这些描述符中,规定了设备所使用的协议、端点情况等。因此,正确地提供
22、描述符,是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是随机存取、基于块/扇区存储的设备。它只能存储和取回来自CPU 的数据。这种设备的接
23、口遵循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。配置描述符如下图: 图3.3 配置(Configuration描述符这里配置所支持的接口
24、数应为1。即设置至少支持一个接口,这里为Bulk-Only Data 接口,此接口使用三个端点:控制端点(默认、Bulk-In和Bulk-Out。其中bInterfaceSubClass指定所使用的工业标准命令块,bInterfaceProtocol为所使用的传输协议。 图3.4 bInterfaceSubClass 处的工业标准命令块代码 图3.5 Mass Storage 传输协议接口描述符如下图: 图3.6 接口(Interface描述符由于控制端点为每个设备都使用的缺省端点,因此不需要定义,只需定义Bulk-In和Bulk-Out两个端点,其端点描述符如下: 图3.7 Bulk-In端
25、点描述符 图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发送到设备
26、的命令,命令格式遵从接口中的bInterfaceSubClass 所指定的命令块,这里为SCSI传输命令集。USB设备需要将SCSI命令从CBW中提取出来,执行相应的命令。完成以后,向Host发出反映当前命令执行状态的CSW(Command Status Wrapper,即命令状态包,Host根据CSW来决定是否继续发送下一个CBW或是数据。Host要求USB设备执行的命令可能为发送数据,则此时需要将特定数据传送出去,完毕后发出CSW,以使Host进行下一步的操作。USB设备所执行的操作可用下图描述: 图3.9 USB 设备所执行的操作USB Host 按照下面的格式向设备端发送CBW, 图3
27、.10 CBW其中dCBWSignature的值为43425355h(LSB,表示当前发送的是一个CBW;dCBWTag的内容需要原样作为dCSWTag再发送给Host;dCBWDataTransferLength为本次CBW需要传输的数据长度,bmCBWFlags反映数据传输的方向,0表示来自Host,1表示发至Host;bCBWLUN 一般为零,但当设备有多个逻辑单元时,用此位指定本次命令是发给谁的;bCBWCBLength 为本次命令字的长度;CBWCB即为真正的传输命令集的命令。设备得到一个CBW后,解析出CBWCD中所代表的命令,然后按照SCSI命令集中的定义来执行相应的操作,或是需
28、要接收下一个Bulk-Out发来的数据,或是需要向Host传送数据,完成以后需要向USB Host发送CSW,反映命令执行的状态。USB也是通过此来了解设备的工作情况的。USB设备按照下面的格式向主机端发送CBW, 图3.11 CSW其中dCSWSignature的值为53425355h(LSB,表示当前发送的是一个CSW;dCSWTag的内容为dCBWTag的内容,dCSWDataResidue为还需要传送的数据,此数据根据dCBWDataTransferLength减去本次已经传送的数据得到。Host端根据此值决定下一次CBW的内容,如果没有完成则继续;如果命令正确执行,则bCSWStat
29、us返回0。设备按这个规则组装好CSW后,通过Bulk-In端点将其发送给主机。3.3 SCSI指令集Bulk-Only的CBW中的CBWCB中的内容即为如下格式的命令块描述符(Command Block Descriptor。SCSI-2有三种字长的命令,6位、10位和12位,Microsoft Windows环境下支持12 位字长的命令。 图3.12 命令块描述符(Command Block DescriptorOperation Code是操作代码,表示特定的命令。高3位为Group Code,共有8 种组合,即8个组,低5五位为Command Code,可以有32种命令。Logicol
30、 unit Number是为了兼容SCSI -1而设的。Logical block address为高位在前,低位在后的逻辑块地址,即扇区地址。Transfer length为需要从逻辑块地址处开始传输的扇区数(比如在Read 和Write 命令中;Parameter list length为需要传输的数据长度(比如在Mode Sense 命令中; Allocation length为初始程序为返回数据所分配的最大字节数,此值可以为零,表示不需要传送数据。SCSI指令集的Direct Accesss类型存储介质的传输命令有许多,所幸运的是Mass Storage协议只用到了其中的一些。下面黑体
31、部分即为需要USB设备作出响应的请求,一般是要求向Host发送一些有关设备的数据: 表3.1 SCSI指令集 对于不同的命令,其命令块描述符略有不同,其要求的返回内容也有所不同,根据相应的文档,可以对每种请求作出适当的回应。下面以INQUIRY请求为例,给出该命令块的命令块描述符和其返回内容的数据格式,其它命令块格式和返回内容请参考Information technology - SCSI Primary Commands - 2(SPC-2。 图3.13 INQUIRY命令块描述符 图3.14 INQUIRY命令返回数据格式Host会依次发出INQUIRY、READ CAPACITY、UFI
32、 MODE SENSE请求,如果上述请求的返回结果都正确,则Host会发出READ命令,读取文件系统0簇0扇区的MBR数据,进入文件系统识别阶段。对于PREVENT-ALLOW MEDIUM REMOVAL和TEST UNIT READY命令,只需直接返回CSW即可,对于后者,由于Flash盘总是处于READY状态,故可直接返回CSW。3.4 FAT16 文件系统一个FAT(FAT12/FAT16/FAT32文件系统卷(卷可以理解为是一张软盘、一个硬盘或是一个Flas电子盘由四个部分组成:分区的保留区(Reserved Region中的第一个扇区必须是BPB(BIOS Parameter Bl
33、ock, 此扇区有时也称作“引导扇区”、“保留扇区”或是“零扇区”,因为它含有对文件系统进行识别的关键信息,因此十分重要。下表是此扇区的结构:表3.2 引导扇区结构(一 表3.3 引导扇区结构(二 表3.4 引导扇区结构(三 FAT即File Allocation Table,文件分配表。操作系统分配磁盘空间按簇来分配的。因此,文件占用磁盘空间时,基本单位不是字节而是簇,即使某个文件只有一个字节,操作系统也会给他分配一个最小单元即一个簇。为了可以将磁盘空间有序地分配给相应的文件,而读取文件的时候又可以从相应的地址读出文件,我们把整个磁盘空间分成32K字节长的簇来管理,每个簇在FAT表中占据着一
34、个16位的位置,称为一个表项。对于大文件,需要分配多个簇。同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对一个文件的最后一簇,则要指明本簇无后继 簇。这些都是由FAT表来保存的,FAT表的对应表项中记录着它所代表的簇的有关信息:诸如是否空,是否是坏簇,是否已经是某个文件的尾簇等。FAT区的结构如下:表3.5 FAT区结构 FAT的项数与硬盘上的总簇数相关(因为每一个项要代表一个簇,簇越多
35、当然需要的FAT 表项越多,每一项占用的字节数也与总簇数有关(因为其中需要存放簇号,簇号越大当然每项占用的字节数就大。FAT的格式有多种,最为常见是FAT16和FAT32,其中FAT16是指文件分配表使用16位,由于16位分配表最多能管理65536(即2的16次方个簇,又由于每个簇的存储空间最大只有32KB,所以在使用FAT16管理硬盘时,每个分区的最大存储容量只有(65536×32 KB即2048MB,也就是我们常说的2G。现在的硬盘容量是越来越大,由于FAT16对硬盘分区的容量限制,所以当硬盘容量超过2G之后,用户只能将硬盘划分成多个2G的分区后才能正常使用。由于FAT对于文件管
36、理的重要性,所以FAT有一个备份,即在原FAT的后面再建一个同样的FAT。紧接着第二个FAT表的后面一个扇区,就是根目录区了。根目录区中存放目录项,每个目录项为32个字节,记录一个文件或目录的信息(长文件名例外。以下是目录项的结构:表3.6 目录项结构 目录项所占的扇区数与有多少个目录项有关,它将占用(目录项*32/512个扇区。目录项的所占的最后一个扇区之后,便是真正存放文件数据或是目录的位置了。Flash硬盘与普通的磁头、柱面式介质不一样。在开发U盘的过程中,使用Flash作为存储介质。它有其特定的结构特点。以32M的三星K9F5608U0A-YCB0 Flash为例,它有2048个Blo
37、ck,每个Block 有32个Page,每个Page有512+16=528个字节。 图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而言,
38、若给出LBA为0x40,实代表簇1的扇区1。因此需要将Logical Block Address转换为物理地址,这样,才可以对数据进行存取操作。根据上面定义的结构,转换公式为:Flash 的Block = Logical Block Address/0x20 (1 Flash 的Page = Logical Block Address %0x20 (2实际上,如果定义每个簇为32 个扇区是最好的,因为这样物理结构和逻辑结构刚好一致。但是这也无防,因为不管Logical Block Address给出什么值,只要按上述公式,总可以得到物理上正确的Block 和Page,再使用Flash的读写命令
39、读取对应的Block和Page就可以了, 因此簇和扇区的概念只是在BPB中给出存储介质信息的时候告之系统就可以了,这里只要做好LBA与物理地址间的转换就可以了。由于做为U盘的Flash不要求启动,因此可以没有MBR 区,只包含DBR、FAT、DIR和DATA四个区。因此,Flash的前两个Block的内容如下:表3.6 Flash的前两个BlockLBA Block/Page 长度 内容说明0H 0/0 512字节 MBR=BPB+Excutable Code+55AA1-2H 0/1-0/2 1024字节 FAT区(第一份FAT3-4H 0/3-0/4 1024字节 FAT区备份(第二份FA
40、T5-39H 目录区40H 数据区当主机发出READ命令后,Flash读写操作即告开始,主机首先读取MBR,得到有关存储介质的有关信息,诸如扇区长度、每簇扇区数以及总扇区数等内容,以便知道此盘有多大。如果读取正确,会接着读取文件分配表,借以在PC 机上的可移动盘符中显示文件目录,并可以复制、删除或是创建文件。系统自动将这些命令都转换成READ或WRITE两种命令,通过USB的READ或WRITE命令块描述符来从Flash中相应扇区读取数据,或是将特定长度的数据写入Flash相应地址中。 第四章 程序实现与调试4.1 固件程序的实现主循环检查事件标志并进入子程序进行进一步的处理。MCU一但上电就
41、需要初始化其所有端口、存储区、定时器和中断服务程序。之后MCU将重新连接USB,包括将Soft_Connect 寄存器设置为ON,因为这些过程确保了在MCU准备好服务D12之前D12不会进行操作,所以是很重要的。下图为主循环流程: 中断服务程序代码处理由D12产生的中断,它将数据从D12的内FIFO取回到CPU存储器,并建立正确的事件标志,以通知相应的子程序进行处理。下图为中断服务程序流程图: 图4.2 中断服务程序流程图 控制传输总是在SETUP阶段开始,之后为可选的DATA阶段,然后在STATUS阶段结束。固件使用这3个状态来正确处理控制传输。下图为控制端点处理程序流程图: 图4.3 控制
42、输出程序流程图 图4.4 控制输入程序流程图 对于普通输出端点(本项目中为BULK_OUT端点配置为从主机接收数据包。当MCU从主机接收输出中断标志(通过读中断寄存器识别时,D12中断位清零。选择端点将清零缓冲区,接下来MCU需要确认数据的长度并把数据读出,然后进入数据处理子程序。对于普通输入端点(本项目中为BULK_IN端点的中断,只要读取端点号的最后处理状态寄存器来清除中断寄存器的相应位,并把状态清零即可。输入端点中断是在发送完数据后才产生的,当还有数据要发送时,可以在中断程序程序里接着继续发送。 下图为普通端点处理程序流程图:. 图4.5 普通端点处理程序流程图总线复位和挂起并不要求在I
43、SR中进行特殊的处理,所以这里直接退出程序即可。在中断服务程序还里定义了数据提交函数。该子程序负责把数据写入端点缓冲区,然后提交给主机。下图为数据提交函数程序流程图: 图4.6 数据提交函数程序流程图GET STATUS请求要求接收方返回一个相应的状态,设备返回16位的状态描述。图4.7为GET STATUS的工作流程图。当GET STATUS的索引为设备时,主机获取设备的状态。如果请求是对器件,MCU必须向主机返回器件状态。因为接口状态的16位字节全部保留,所以返回0x0000即可。一个端点有输入和输出两个端点号。这里使用了索引BIT7来标识要求返回的端点的方 向,BIT7=1为返回输入端点
44、的状态;BIT7=0为返回输出端点的状态。 Array 图4.7 GET STATUS的工作流程图CLEAR FEATURE用来清除或禁止设备的一个特定的特性。当接收到CLEAR FEATURE的请求后,设备就执行相应的操作,并返回一个空的数据表示执行完毕。图4.8为CLEAR FEATURE 的工作流程图。SET FEATURE用来设置或允许一个特性。SET FEATURE和CLEAR FEATURE是两个相反的动作。同样,当接收到SET FEATURE的请求后,设备就执行相应的操作,并返回一个空的数据表示执行完毕。图4.9为SET FEATURE的工作流程图。在USB设备枚举的时候,主机会
45、分配一个新的地址给设备,以取代默认地址(默认地址为0。当设备接收到这一设备请求的时候,要做的事情就是把设备的当前地址改为分配的 地址,以让设备对新的地址作出响应。注意此设置地址请求不含数据阶段,MCU需要向主机写一个零长度的数据包作为应答阶段。 Array图4.8 CLEAR FEATURE的工作流程图 图4.9 SET FEATURE的工作流程图Array图4.10 SET ADDRESS的工作流程图GET DESCRIPTOR是主机用来获取USB设备相对应的描述符的一个请求。在这里,设备请求值的高8位为要求获取的描述符的类型,设备按照请求类型返回相应的描述符。下图为GET DESCRIPT
46、OR的工作流程图: Array图4.11 SET DESCRIPTOR的工作流程图GET CONFIGURATION用于获取当前的配置信息。如果设备已经配置,则返回信息为当前的配置值(一个字节;否则返回为0,表示还没有配置。图4.12为GET CONFIGURATION的工作流程图。SET CONFIGURATION是用来选择设备的工作配置。SET CONFIGURATION中的值只能是0或与配置描述符中bConfiguration Value相同的值。一旦SET CONFIGURATION有效,MCU还需要向主机发送零数据包作为应答阶段。图4.13为SET CONFIGURATION的工作流
47、程图。GET INTERFACE用于返回当前的接口号。返回信息为一个字节。SET INTERFACE用于设备支持多接口的时候,主机用来选择一个接口。如果选择正确, 设备发送一个空的数据表示执行完毕。 图4.12 GET CONFIGURATION的工作流程图 存储器操作程序处理了数据的固定存储读写操作。对FLASH的读写又有其自身的特点,特别是它可以随机读,但无法随机的写。因此,对于写数据的问题,就需要通过设置缓冲 对于FLASH的擦除操作是基于16K字节的块的。下图为块擦除函数程序流程图: 对于FLASH的页拷贝操作是基于512字节的扇区的。下图为页拷贝函数程序流程图: 图4.14 页拷贝函
48、数程序流程图对预处理的功能主要是对需要写入的块进行擦除,以及对这些块内不修改的页进行保存。擦除后就可以对存储器进行写操作了。这里对存储器的操时作是以页为单位进行的。下图为写FLASH操作的流程图: 图4.15 写FLASH函数程序流程图对FLASH的读操作可以是随机读取,所以这里只要给定读数据的首地址和读写长度。针对于FLASH的数据存储结构,读操作分别要对每一页的第一部分和第二部分进行。下图为读FLASH操作的流程图: 4.2 固件调试对设备的程序进行调试是本项目开发过程中最难的部分。由于USB协议有严格的时间要求,这就使得程序必须在有效时间内对某些请求或状态进行处理,否则,USB将无法正常
49、工作。这里结合项目的开发过程,将调试划分为以下四个步骤。在调试的过程中需要用到一些辅助工具,如示波器、串口调试软件和USB总线数据检测软件等。确定USB芯片是否已经正常工作,是所有调试的基础,得到电路板之后,这是一个首先要解决的问题。判断USB芯片是否已经工作,可以从两个方面来判断,一是将CLKOUT 设为12M(缺省为4M,然后用示波器量CLKOUT引脚,若确为12M而不是4M,则说明USB的地址和数据都可以正确传送,各种信号线接法正确,USB芯片可以正常工作,硬件基本没有问题。另一方面,如果使用SOFTCONNECT,则在主程序中进行软连接后,如果GL_N灯闪烁几下,PC机上出现了未知设备
50、,则说明USB进行软连接正常,也说明芯片已经工作了。在确定USB设备正常工作的前提下,插上设备将进入枚举阶段。USB设备的调试过程其实就是根据主机的请求,不断地向主机提供各种信息的过程。因此,了解主机按照什么样的顺序向设备发出请求,USB设备的枚举顺序是非常有必要的。以下是USB设备枚举数据传输的全过程:1.主机检测到有设备插上,总线复位;2.主机读取设备描述符;3.地址分配;4.主机从新的地址获取设备描述符;5.主机读取配置描述符;6.读取描述符集合;7.设置配置;8.读取配置状态;9.读取接口状态。本项目USB设备按海量存储协议提供描述符。在调试的过程中发现D12控制端点的缓冲区可以达到6
51、4个字节(芯片数据手册的说明是控制端点的缓冲区只有16个字节,这样的话,设备与主机在枚举数据传输过程中就可以以最大64字节的数据包传输数据,减少了数据传输的次数。如果枚举阶段设备按海量存储协议向主机提供了描述符,则当USB总线数据检测软件检测到数据55 53 42 53时,说明已经开始了BULK_ONLY传输阶段。这时可以不用太多考虑USB 中断、端点之类的问题,到此阶段后只有两个端点工作,即Bulk_In和Bulk_Out端点,In或 Out 都是从主机的角度来讲的,前者用于设备向主机发送数据,后者用于主机向设备发送数据。Bulk _In 端点的处理比较简单,在需要的时候,设备将要发往主机的数据通过此端点送出即可,如果数据一次不能发完,则设置标志位,通过发送中断的产生可以实现连续发送。Bulk _Out 端点的情况比较复杂一些,要判断收到的是协议内容还是数据,如果是协议内容,则要对协议包进行解析,根据协议中的内容得到SCSI 命令,然后再根据这些命令处理相应的请求。下面为BULK端点处理的流程图: Bul
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 核子仪器伦理与社会责任考核试卷
- 《农产品的质量检测》课件
- 装饰材料企业品牌形象塑造考核试卷
- 《农村家禽饲养技术》课件
- 学校安全教育主要内容
- 纺织品的智能生产成本控制考核试卷
- 毛皮服装生产设备选型与采购考核试卷
- 燃气热水器安装与调试考核试卷
- 核电工程施工过程中的质量控制点管理考核试卷
- 建筑造型设计原理
- 2024年中南大学专职辅导员招聘笔试真题
- 2025-2030中国财务公司行业深度分析及发展前景与发展战略研究报告
- 2025年人教版小学五年级下册奥林匹克数学竞赛测试题(附参考答案)
- 不分手协议书合同书
- 室内空间设计方案汇报
- 人因工程学在潜艇指挥系统设计中的应用研究
- 新生儿败血症诊断与治疗专家共识(2024)解读课件
- 调饮技术大赛考试题库400题(含答案)
- 2025年山东青岛东鼎产业发展集团有限公司招聘笔试参考题库含答案解析
- 宠物托运自负协议书范本
- 软件开发中的质量保障及改进措施
评论
0/150
提交评论