基于ARM的U盘设计
基于ARM的U盘设计,基于,arm,设计
基于ARM的U盘设计 基于ARM的U盘设计福建师范大学 2006级 网络工程 【摘要】:USB(Universal Serial Bus,通用串行总线)是计算机一种新型的接口技术,它能够使得计算机与外部设备的链接更加方便与快捷。现在,许多设备都开始应用USB接口来开发,比如键盘.鼠标.移动硬盘.打印机.数码相机等。在实际应用中,也越来越多地开发开始采用USB技术,比如数据收集等,USB的开发设计和应用现已成为现代电子设计的一个非常很要的部分。 【关键词】:D12、USB_HUB、ARM、Mass Storage协议.FAT区.综述目录1 引言31.1 USB 接口的分析31.2 USB 器件的选择31.3 Mass Storage协议与FAT16文件系统42 系统应用技术的概述42.1 嵌入式系统42.1.1ARM的初步介绍42.2 PDIUSBD12芯片介绍52.2.1PDIUSBD12芯片的性能与特点53 USB系统原理和结构53.1 USB 总线拓扑结53.2.1 USB设备63.2.2 USB HUB73.2.4 设备电源73.2.5 设备的挂起73.3 USB主机83.4 USB设备接口的固件程序设计83.5 USB数据流104 应用的协议134.1 Mass Storage 协议134.2 BulkOnly传输协议164.3 SCSI指令集185 程序的实现215.1主循环MAINLOOP.C215.2中断服务程序215.3控制端点处理225.4普通端点处理235.5数据提交函数24六 固件调试256.1固件调试256.2 USB器件的检查256.3提供描述符256.4 BULK_ONLY传输协议命令处理266.5 SCSI 命令集276.6 系统调试测试29七 总结32参考文献331 引言1.1 USB 接口的分析USB 是一种价格低廉、体积很小、效率高、速度快和支持热插拔的新型串行通信接口。它能够支持许多个外部设备的同时连接和通信,而且即插即用方便的特点能够使用户可以不重新启动计算机的情况下直接把USB接口的外部设备连接到计算机直接开始通信。USB设计规范性为计算机与外部设备的通信提供了一个比较完整的解决策略,它与旧式的计算机接口相比较,USB总线特性有下面的特点:1、它的接口小巧。与旧式的计算机接口相比较,USB的接口有非常明显的体积优势,朝着计算机与外部设备便携化和小型化发展的大趋势。2、USB是共享式接口。USB接口运用了“菊花链”方式,能够支持许多个外设的连接。经过USB集线器,单个USB主控制器它能偶可以连接最多126个外部设备,它大大提高了计算机的外部设备功能扩展和应用能力。3、它能够支持即插即用和热插拔。当一个USB外部设备连接到计算机时,系统能够自动监测到该设备,同时加载相应的驱动程序。因此,USB可以自动配置,用户可以不需要其他任何手动配置,当连接设备时不要重新启动计算机;用户也能够随时断开USB设备和计算机的连接,同时并不会损害计算机与外部设备。4、它能够节省系统资源。系统中给USB主控制器分配一根IRQ线盒几个I/O地址,它再给外部设备分配唯一的一个地址。5、USB能够支持许多种操作。3种传输速率:低速1.5Mbit/s、全速2Mbit/s、高速80 Mbit/s。同时,4种类型的传输模式:块传输、中断传输、同步传输、控制传输。这样USB就能够满足不同种外部设备的功能需求。6、USB成本很低。现在,市场上USB的主控与从控芯片的价格都十分便宜,比如USB电缆等也非常的便宜,再加上USB具有很高的性能,使USB成为性价比非常高的计算机接口。7、USB能够提供电源。当外部设备耗电不大,能够可以考虑用USB接口直接供电的方式,这样十分方便与便携。8、USB同时拥有的很好的兼容性。1.2 USB 器件的选择在对一个USB设备开发之初,首要根据具体情况要求选择适当的USB控制器。现在,市面上供应的USB控制器大体有两种:一种是带USB接口的单片机(MCU),另一种是纯粹的USB接口芯片。1、 带USB接口的单片机从应用上能够可以分成两大类:(1)专门应用于底层设计USB控制的单片机(2)增加了USB接口的普通单片机。如果USB 接口芯片仅仅处理USB通信,那么必须得有一个外部微处理器来进行数据交换和协议处理。比较有特点的产品有Philips公司的PDIUSBD12(并行接口),NS公司的USBN9603/9604(并行接口)和NetChip公司的NET2888 等。USB接口芯片的主要特点是接口方便、价格便宜、可靠性高,特别是在适合于产品的改型设计方面上(软件只需要增添微处理器的USB中断处理和数据交换程序、PC机的USB接口通信程序,不需要对原有的产品系统结构上作很大的变动,在硬件上只需要对并行总线和中断进行变动)。1.3 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。1和2子规范在定义了数据、命令、状态USB上的传输方法。Bulk- Only传输规范只是使用Bulk端点传送数据、命令、状态,CBI传输规范使用了Control、Bulk和Interrupt三种类型的端点在进行数据、命令、状态传送。3和4子规范是定义了存储介质上的操作命令。ATA命令仅规范用于在硬盘上,UFI的命令规范只是对USB移动存储。Microsoft Windows中提供了对Mass Storage协议的支持,所以USB移动设备只是需要遵循Mass Storage协议来组织数据和处理命令,就能够实现和PC机进行交换数据。但是Flash的存储单元的组织形式是用FAT16文件系统,因此,就能够直接把Windows的浏览器上经过可移动磁盘来进行交换数据了,Windows可以对FAT16文件系统的管理,因此,USB设备并不需要干预FAT16文件系统操作的完整细节。主机 (USB Host)图1.3 USB 移动存储结构大容量存储设备 (USB Peripheral)USB总线API接口UFI/ATA驱动USB传输驱动(CBI或Bulk Only)USB总线接口存储介质接口USB传输处理UFI/ATA命令处理存储介质(硬盘、闪存等)2 系统应用技术的概述2.1 嵌入式系统 2.1.1ARM的初步介绍ARM是Advanced RISC Machines 的缩写,是微处理器行业非常知名的一家企业。ARM在设计上不仅实现了小体积化而且高性能的结构。ARM处理器简单的结构使得ARM的内核非常小,因此使得工作期间的低功耗。ARM处理器核具有卓越的性能和非常突出的优点,不仅成为高效率、低消耗、低成本嵌入式处理器核的代名词,同时也得到许多厂家的大力支持。ARM处理器是在32位高端嵌入式系统中使用的主流芯片之一,占有了绝大部分的市场,而且提供了在数字处理和移动通信等消费类嵌入式产品非常好的解决方案。ARM处理器是精简指令集计算机RISC体系结构的计算机系统,它不仅集成了非常典型的RISC结构特性,RISC是指Reduced Instruction Set Computer 的缩写,比如:1.具有简单的寻址模式,全部加载/存储的地址都是由寄存器的内容与指令域来决定;2.每一条数据处理指令最大限度和利用ALU和移位器;3.实现了最大的数据吞吐量多寄存器加载和存储指令;4.实现了最快速所有指令代码执行的条件;因此这些在基本的RISC结构上增强的特征,使得ARM处理器在低功耗、高性能和体积小方面上得到非常良好的平衡与稳定1。2.2 PDIUSBD12芯片介绍2.2.1PDIUSBD12芯片的性能与特点PDIUSBD12是PHILIPS运用在USB1.1协议设备端上使用最广的芯片之一,带有并行总线与局部DMA传输能力的高速的USB接口器件。在芯片内集成了具有卓越性能的USB接口器件、SIE和FIFO存储器以及电压调整器等,能够给任何外部微控制器与微处理器达成高速并行接口。PDIUSBD12芯片的功能框图如图2.2.1所示图2.2.1 D12的功能框图PDIUSBD12是一种性价上非常高的USB器件,它提供了28PIN脚模式,有SO28与TSSOP28封装,SIE达到了全部的USB协议层,并且全部由硬件实现而不需要固件的参与。具体功能如下:同步方式识别、并/串转换、比特填充/解填充、CRC校验/生成、PID确认/生成、地址识别和握手信号的鉴定/生成、批处理数据传输可达1MB/s,30.3V双极性输入范围,可接受4.55.5V工作电压、工业级标准工作环境温度范围为-40+854。3 USB系统原理和结构3.1 USB 总线拓扑结USB总线的物理连接是一种有层次性的星型结构,每个星型结构以集线器(HUB)为中心。PC机就是主机和根HUB,用户能够将外设或者附加的HUB同它相连,而且这些附加的HUB能够连接另外的外部设备以及下层HUB。USB最多可以支持5个HUB层以及127个外设。下图中描述了总线的物理拓扑结构。图3.1 USB总线拓扑结构3.2.1 USB设备USB设备中包括HUB与功能设备,而且功能设备又能够细分为定位设备与字符设备等等。为达到进一步叙述,给出端点(endpoint)与管道(pipe)的观念。端点:每一个USB设备在主机看来就是一个端点的集合,主机只能通过端点与设备进行通讯,以使用设备的功能。每一个端点实际上就是一个一定大小的数据缓冲区,这些端点在设备出厂时就已经定义好了。在USB系统中,每一个端点都有唯一的地址,这是由设备地址和端点号给出的。每个端点都有一定的特性。其中包括:传输方式、总线访问频率、带宽、端点号、数据包的最大容量等等。除端点0外,其它端点必须在设备配置后才能生效。 端点0通常为控制端点,用于设备初始化参数等,端点1、2等一般用作数据端点,存放主机与设备间往来的数据。 管道:一个USB管道是驱动程序的一个数据缓冲区与一个外设端点的连接,它代表了一种在两者之间移动数据的能力。一旦设备被配置,管道就存在了。管道由两种类型,数据流管道(其中的数据没有USB定义的结构)与消息管道(其中的数据必须由USB定义的结构)。管道只是一个逻辑上的概念。 所有的设备必须支持端点0以作为设备的控制管道。通过控制管道可以获取完全描述USB设备的信息,包括:设备类型、电源管理、配置、端点描述等等。只要设备连接到USB上并上电,端点0就可以被访问,与之对应的控制管道就存在了。一个USB设备可以分为三个层。最底层是总线接口,用来发送与接收包。中间层处理总线接口与不同的端点之间的数据流通。一个端点是数据最终的使用者或提供者,它可以看作是数据源或是数据接收端。最上层就是USB设备所提供的功能,比如鼠标或键盘等。图3.2.1 USB设备层次结构3.2.2 USB HUBUSB结构中HUB是一个关键,它提供了附加的USB节点,USB节点被又称为端口。HUB能够检测出每一个下行端口的状态,而且能够给下端的设备提供电源。下图描述了一个非常典型的HUB结构。图3.2.2 USB HUB3.2.4 设备电源 USB设备的电源能够由USB总线供给,而且也能够自备电源。一个USB设备能够有这两种供电方式,但同一时间只能为一种供电方式。这两种供电方式是可以进行切换的。3.2.5 设备的挂起为了节电,当设备在指定的时间内没有总线传输,USB设备自动进入挂起状态。如果设备所接的HUB的端口被禁止了,设备也将进入挂起状态(称之为选择挂起)。当然主机也可以进入挂起状态。 USB设备当总线活动时,就会离开挂起状态。一个设备也可以通过电信号来远程唤醒进入挂起状态的主机。这个能力是可选的,如果一个设备具有这个能力,主机有能力禁止或允许使用这种能力。3.3 USB主机USB主机在USB系统中处于中心地位,能够对USB及其连接的设备有着特殊的任务。主机控制着全部对USB的访问,一个外部设备只能有主机同意才能够有访问总线的权利。主机也同时检测着USB的结构。USB主机有三层结构:设备驱动程序、USB系统软件、USB主控制器(主机的总线接口)。另外,还有两个软件接口:主机控制驱动(HCD)接口,USB驱动(USBD)接口。图3.3 主机的层次结构3.4 USB设备接口的固件程序设计在整个USB接口设计中USB设备接口固件的开发具有举足轻重的地位。设备接口硬件需要软件的协同来完成相应的工作,然而在固件的编制上不会受到具体的微处理器种类限制。相对于开发者来说,接口硬件在工作上具有着不可见性,能够看到的的是接口固件在控制整个接口时所做的工作。完全的中断驱动由PDIUSBD12的固件设计成,当一个CPU处理前台任务的时候,后台进行的是USB的传输。这也就能够确保了最好的传输速率与更好的软件结构,而且同时也能够简化了编程与调试。事件标志“EPPFLAGS”和Setup包数据缓冲区“CONROL_XFER”来实现是由后台ISR(中断服务程序)和前台主程序循环之间的数据交换,其原理如图3.4.1所示图3.4.1 前后台工作原理对于这种结构,主循环就可以不用来考虑数据的来源,它只要检查循环缓冲区中需要处理的新数据。这样,主循环就能够专注用于数据的处理,而ISR能可以以最大可能的速度来进行数据的传输。 D12固件在编写成分层结构简洁且能够进行更加简单的修改和测试。不仅增加了程序的通用性,同时也增加了代码的可读性。固件的积木式结构如图3.4.2所示.图3.4.2 固件结构和数据流向各模块程序的分工如下:硬件提取层:对单片机的I/O口、数据总线等硬件接口进行操作。PDIUSBD12命令接口:对PDIUSBD12器件进行操作的模块子程序集。中断服务程序:当PDIUSBD12向单片机发出中断请求时,读取PDIUSBD12的中断传输来的数据,并设定事件标志“EPPFLAGS”和Setup包数据缓冲区“CONROL_XFER”传输给主循环程序。标准请求处理程序: 对USB的标准设备请求进行处理。主循环程序:发送USB请求、处理USB总线事件和用户功能处理等。厂商请求处理程序:对用户添加的厂商请求进行处理。3.5 USB数据流图3.5.1 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)的形式发出。需要注意的是:所有的数据传输都是由主机开始的,任何外设都无权开始一个传输。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定义的结构(数据流管道);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. 具有数据传输保证,在必要时可以重试,以保证数据的准确性。图3.5.2 USB数据传输4 应用的协议4.1 Mass Storage 协议USB协议可以在启动或者当设备插入系统时对设备进行备置。USB设备被分成以下几类:通讯设备(Communication devices)、人机输入(Human input)、显示器(Monitors)、音频设备(Audio)、海量存储(Mass storage)。特定类(class)的设备又能够划分成子类(subclass),划分子类的后软件就能够搜索总线而且可以选择所有它能够可以支持的设备。每一个设备可以有一个或者多个配置(Configuration),配置可以用来定义设备的功能。如果其中的某个设备具有几种不同的功能,那么每个功能都只需要一个配置。配置(configuration)是接口(interface)的集合。接口指定设备中的哪些硬件和USB交换数据。而每一个和USB交换数据的硬件就叫做一个端点(endpoint)。所以,接口就是端点的集合。在USB的设备类别定义(USB Device Class Definitions)定义特定类或者子类中的设备又需要提供的缺省配置、端点和接口。描述符(descriptor)能够描述配置、设备、接口和端点的一般信息。下图为USB 描述符的层次结构。图4.1.1 USB描述符层次结构USB(Host)唯一通过描述符了解设备的有关信息,根据这些信息建立起通信,在这些描述符中,规定了设备所使用的协议、端点情况等。因此,正确地提供描述符,是USB设备正常工作的先决条件。USB海量存储设备(USB Mass Storage Class)包括General Mass Storage Subclass、CDROM、Tape、Solid State。Mass Storage Class只需要支持一个接口,即数据(Data)接口,选择缺省配置时此接口即被激活。数据接口允许与设备之间进行数据传输,它提供三个端点:Bulk Input 端点、Bulk Output 端点和中断端点。通用海量存储设备(General Mass Storage Device)是随机存取、基于块扇区存储的设备。它只能存储和取回来自CPU 的数据。这种设备的接口遵循SCSI2标准的直接存取存储设备(Direct Access Storage Device)协议。USB设置上的介质使用与SCSI2设备相同的逻辑块(logical blocks)方式寻址。下面介绍基于Bulk Only(批量传输)模式的Mass Storage 设备的描述符:每个USB设备都必须有一个设备描述符8。图4.1.2 设备(Device)描述符图4.1.3 配置(Configuration)描述符图4.1.4接口(Interface)描述符图4.1.5 BulkIn 端点描述符图4.1.6 BulkOut 端点描述符图4.1.7 bInterfaceSubClass 处的工业标准命令块代码图4.1.8 Mass Storage 传输协议4.2 BulkOnly传输协议设备插入到USB后,USB即对设备进行搜索,并要求设备提供相应的描述符。在USB Host 得到上述描述符后,即完成了设备的配置,识别出为BulkOnly的Mass Storage设备,然后即进入BulkOnly传输方式。在此方式下,USB与设备间的所有数据均通过BulkIn和BulkOut来进行传输,不再通过控制端点传输任何数据。在这种传输方式下,有三种类型的数据在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设备所执行的操作可用下图描述:ReadyCommandTransport(CBW)Date-in(to host)Date-out(From host)StatusTransport(CSW)图4.2.1USB Host 按照下面的格式向设备端发送CBW,图4.2.2 CBW下面是CSW 的格式和定义:图4.2.3 CSWdCSWSignature 的内容为53425355h , dCSWTag 即为dCBWTag 的内容,dCSWDataResidue 还需要传送的数据,此数据根据dCBWDataTransferLength本次已经传送的数据得到。Host 端根据此值决定下一次CBW 的内容,如果没有完成则继续;如果命令正确执行,bCSWStatus 返回0 即可。按这个规则组装好CSW 后,通过BulkIn 端点将其发出即可4.3 SCSI指令集Bulk-Only 的CBW 中的CBWCB 中的内容即为如下格式的命令块描述符(CommandBlock Descriptor)。SCSI-2 有三种字长的命令,6 位、10 位和12 位,Microsoft Windows 环境下支持12 位字长的命令。图4.3.1 12 位字长的SCSI 命令Operation Code是操作代码,表示特定的命令。高3位为Group Code,共有8 种组合,即8个组,低5五位为Command Code,可以有32种命令。Logicol unit Number是为了兼容SCSI1而设的。Logical block address为高位在前,低位在后的逻辑块地址,即扇区地址。Transfer length为需要从逻辑块地址处开始传输的扇区数(比如在Read 和Write 命令中);Parameter list length为需要传输的数据长度(比如在Mode Sense 命令中);Allocation length为初始程序为返回数据所分配的最大字节数,此值可以为零,表示不需要传送数据。SCSI指令集的Direct Accesss类型存储介质的传输命令有许多,所幸运的是Mass Storage协议只用到了其中的一些。下面黑体部分即为需要USB设备作出响应的请求,一般是要求向Host发送一些有关设备的数据:图4.3.2对于不同的命令,其命令块描述符略有不同,其要求的返回内容也有所不同,根据相应的文档,可以对每种请求作出适当的回应。比如,下面是INQUIRY 请求的命令块描述符和其返回内容的数据格式:图4.3.3 INQUIRY命令块描述符图4.3.4 INQUIRY命令返回数据格式Host 会依次发出INQUIRY、Read Capacity、UFI Mode Sense 请求,如果上述请求的返回结果都正确,则Host 会发出READ 命令,读取文件系统0 簇0 扇区的MBR 数据,进入文件系统识别阶段。对于PREVENT-ALLOW MEDIUM REMOVAL 和TEST UNIT READY 命令,只需直接返回CSW 即可,对于后者,由于Flash 盘总是处于READY 状态,故可直接返回CSW。5 程序的实现5.1主循环MAINLOOP.C主循环的的检查开始表示子程序进一步的处理。MCU一但通电那就需要初始化I/O端口、定时器和中断服务程序。然后,MCU将会重新连接USB,其中包含SOFT CONNET 寄存器设置ON,这个工程很重要。下图为主循环的流程图:Yes主循环开始初始化I/O端口、定时器和中断,重新连接到USB总线循环USB中断中断服务程序No图5.1主循环5.2中断服务程序D12产生的中断就是中断服务程序代码处理,中断服务程序把数据从D12的内FIFO拿回到CPU存储器,同时也要建立正确的事件标志,用来通知对应的子程序来进行处理。下图是中断服务程序的流程图:中断服务读取D12中断寄存器控制输入控制输出端点1输入端点1输出端点2输入端点2输出DMA传输结束挂起改变总线复位中断服务结束控制端点发送数据处理控制端点接收数据处理DMA传输技术处理端点2接收数据处理端点2发送数据处理端点1发送数据处理端点1接收数据处理设置挂起改变标志设置总线复位标志NoNoNoNoNoNoNoNoNoYesYesYesYesYesYesYesYesYes图5.2中断服务程序流程5.3控制端点处理 SETUP阶段开始就是控制传输的标志,然后进行的就是可选的DATA阶段,在SETUS阶段结束,固件的控制传输就是使用这三个状态来正确处理。下图是控制端点处理程序的流程图:控制输出入口读端点处理状态清中断标志SETUP包?SETUP处理程序控制输出子程序结束NoYes图5.3.1 控制输出程序流程图控制输入入口清中断标志位数据提交处理控制输入子程序结束图5.3.2 控制输入程序流程图5.4普通端点处理 从主机接收数据包是普通输出端点(本项目中为BULK_OUT端点)配置。MCU从主机接收输出中断标志时,清零D12中断位。在清零缓冲区选择端点,然后MCU需要确认数据的长度而且同时把数据读出来,之后再进行数据处理子程序。普通输入端点(本项目中为BULK_IN端点)的中断,只需要读取端点号的最后处理状态寄存器来清除中断寄存器的相应位,同时把状态清零就可。输入端点中断是发送完数据之后才产生的,如果还有数据要发送时,就可以在中断程序程序里接着继续发送。下图为普通端点处理程序流程图:普通输入入口清中断标志读取缓冲区数据输入数据接口子程序普通输入子程序结束普通输出入口清中断标志读取缓冲区数据数据处理确认数据长度并读出普通输出子程序结束图5.4 普通端点处理程序流程图5.5数据提交函数定义了数据提交函数在中断服务程序里。同时子程序负责把数据写入端点缓冲区,之后提交给主机。下图是数据提交函数程序流程图:程序入口确定传输数据长度选择端点写指定长度的数据到缓冲区缓冲区数据提交主机程序结束图5.5 数据提交函数程序流程图六 固件调试6.1固件调试相对与设备的程序进行调试是USB通讯程序项目开发过程中最难的部分。同时USB协议有严格的时间限制,这就使得程序得在一定的时间内对某些请求或者状态进行处理,否则,USB将会无法正常的工作。USB 设备端的固件分以下几个层次:文件模块名称主要功能Main.c:进行各种初始化操作、寄存器设置、中断设置Fat16.c flash.c :负责按照Fat16 文件系统的组织向Flash 中写入数据或是从Flash: 中读出数据Chap9.c bulk-only.c:完成不同的中断请求,Chap9 完成来自端点0 的USB标准设备请求,Bulk-Only 完成来自批量模式端点的Mass Storage Bulk-Only 传输中断请求Isr.c :中断服务程序,负责将不同类型的中断转向一同的地方D12ci.c:函数化的D12 的命令集合,可以直接调用这些函数,而不必再自己根据手册查每个命令的代码另外,此文件中包括一些与硬盘有关的地址定义6.2 USB器件的检查第一:判断USB芯片是否已经工作。第二:使用SOFTCONNECT,则在主程序进行软件连接后,如果GL_N灯闪烁几下,则PC机上出现未知设备,则说明USB进行软连接正常,也说明芯片已经工作了。6.3提供描述符1GetDeviceDescriptor。主机主要对Length 域感兴趣,发送内容一定要正确,特别是第 2 字节type 一定为0x01,即Device;否则,主机将不响应,或 者再重复2 次后放弃。这时由于主机对Device 的描述符将有多长实际上都不知道,所以这个步骤只是试探性的,目的是得到真正长度,第三步中才正而巴经地读取DeviceDescriptor。2SetAddress。一般为02 或03。3连续3 次GetDeviceDescriptor,读取全部设备描述符,一般为 18 B,分为多次传输。如果不正确,主机将不响应或重复2 次后放弃。4GetConfigDescriptor。注意第2 字节一定为0x02,即config 。这部分内容包括Configuration Descriptor、Interface Descriptor 和所有要用到的端点的EndPooint Descriptor。5GetStringDescriptor(可能没有),根据在设备描述符中是否有 String 索引而定。一般先读取LanguageID,再读取product string。6读取全部ConfigDescriptor,次数根据描述符的大小决定(端点个数不同,描述符大小不同),如 果不正确,主机将不响应或再重复2 次后放弃。7如果以上步骤都正确,主机将找到新设备,提示安装驱动程序;否则找到未知设备,不可用。安装驱动程序后,以后的每次PlugIn,枚举次序与以上步骤略有不同,之后会有SetConfiguration、GetConfiguration 和GetInterface 等调用。6.4 BULK_ONLY传输协议命令处理当USB总线数据检测软件检测到数据55 53 42 53时,说明已经开始了BULK_ONLY传输阶段。就可以不用太多考虑USB中断、端点之类的问题,到此阶段后只有两个端点工作,即Bulk_In和Bulk_Out端点,IN用于设备向主机发送数据,OUT用于主机向设备发送数据。Bulk_In端点的处理比较简单,只是在需要的时候,设备将要发往主机的数据通过此端点送出即可,如果数据一次不能发完,就把设置标志位,通过发送中断的产生可以实现连续发送。Bulk_Out端点的情况比较复杂一些,要判断收到的是协议内容还是数据,如果是协议内容,就要对协议包进行解析,根据协议中的内容得到SCSI命令,然后再根据这些命令处理相应的请求。下面为BULK端点处理的流程图:清中断寄存器标志是否正传数据继续传送数据向主机发送CSWYesNo 6.4 Bulk_In端点处理流程图清中断寄存器标志收到的是数据继续传送数据解析命令并执行命令YesNo图6.5 Bulk_Out端点处理流程图6.5 SCSI 命令集在SCSI 命令集的处理中,比较难处理的是WRITE 和READ 比较难处理。因为Host传送数据至少一次为512 个字节,不管是读还是写,都需要一次传送512 个字节,但是批量传输端点一次只能传输64 个字节,即要传8 次才可以传完。因此,在向Host 传送数据时,设置传输标志,当Device 的发送中断出现后,判断此传输标志,如果正处于传输状态,则继续传输,直至需要的数据传输完毕,再传输CSW。在从Host 接收数据时,也设置接收标志,当收到WRITE 命令后,即进入此状态,直至从Host 端接收数据完毕,再将数据存入Flash 中。Host传送数据Device发送中断传送CSW传输完毕图6.5.1 SCSI传送数据Host接收数据Write命令Host端接收完毕数据存入Flash中收到接收标志图6.5.2 SCSI接收数据本系统开发的U盘的存储空间使用的是4 MB的RAM空间。当U盘插入主机时,通过操作系统的格式化操作把该空间格式化成FAT系统,然后主机就可以在该存储空间上进行文件的写入与读取。6.6 系统调试测试1. 嵌入式软件的加载界面图6.6.12. U盘设备控制传输阶段的配置信息通信过程,包括设备描述符、配置描述符和字符串描述符的枚举、设置USB设备地址等图6.6.23. 基于BulkOnly的海量存储协议的调试信息输出图6.6.34. 本论文所设计的U盘的格式化界面图6.6.45. U盘中文件的拷贝与文件夹的创建图6.6.5七 总结在此项目开发过程中,我从中学到了许多书本上学不到的东西,尤其是在动手和实际应用的能力得到强化。通过这次USB通信程序开发,包含嵌入式程序、单片机,让我觉得C语言编程的熟练城区是项目开发的重点。许多出现的问题其实都是原理上非常承受的东西,从资料中就能够找到。而我们要做的就是把书本上的原理在特定的平台上实现就可以了。原理是比较抽象,比较粗略的,不需要精确;而在真正使用代码实现时,那就是需要具体、详细、精确、一点误差都不能有,因此,对编程语言的熟练就可以达到事半功倍,提高效率。动手实际的运用和开发就是学习的好机会,只有真正经过了开发过程以后,你才会有更加深刻的体会。在项目开发过程中,实际能力和经验的增长是相辅相成的。有些内容是要凭经验,理论上的东西,是别人总结出来的东西,非常的抽象,跟实际运用中相比往往省略了许多细节,而项目开发有时候就是根据抽象的理论,来重新实现细节。一个问题在一次查找原因的过程中不清楚,那么你在做第二次就有一定的思路了,也就能够很快的找到问题的所在。在开发过程中,学到的不仅是将理论的东西运用到实际中,同时也是排找问题思路的建立。 参考文献1ARM公司.ARM Architeture Reference Manuals. 20002ARM 公司.The ARM-THUMB Procedure Call Standards. 20003马忠梅,马广云.ARM嵌入式处理器结构与应用基础m.北京:北京航空航天大学出版色,20024周立功.PDIUSBD12 USB 固件编程与驱动开发M.北京:北京航空航天大学出版社,2003.2 5沈文,Eagle lee.AVR 单片机C语言开发入门指导M.北京:清华大学出版社,2003 6王士元.C高级实用程序设计M.北京:清华大学出版社,1996 7谭浩强.C程序设计M.北京:清华大学出版社,1996 8Atmel Corporation.AVR Instruction Set Nomenclature:Status Register(SREG); 9Registers and Operands.http:/www.atmel.com10SAMSUNG Electronics CO.LTD. K9F5608U0A-YCB0,K9F5608U0A-YIB0. http:/www.intl.samsungsemi.com/Memory/Flash/datasheets.htmlU-disk design based on ARMFujian Normal University, Fujian Institute of Technology 2006 Network Engineering122622006071 JianPing Xie Tutor Xiao LinAbstract: USB (Universal Serial Bus, Universal Serial Bus) is a new type of computer interface technology that allows computers to link with external devices more convenient and fast. Now, many devices are beginning to use USB interface to develop, such as the keyboard. Mouse. Mobile hard disk. Mobile hard disk. Printer. Digital cameras. In practice, more and more developers start using USB technology, such as data collection, USB design and application development has become a very modern electronic design is to be part of.Key words: D12, USB_HUB, ARM, Mass Storage Protocol. FAT area. Summary33
收藏
编号:2680158
类型:共享资源
大小:940.67KB
格式:ZIP
上传时间:2019-11-28
15
积分
- 关 键 词:
-
基于
arm
设计
- 资源描述:
-
基于ARM的U盘设计,基于,arm,设计
展开阅读全文
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。