基于ARM的U盘设计.docx
《基于ARM的U盘设计.docx》由会员分享,可在线阅读,更多相关《基于ARM的U盘设计.docx(11页珍藏版)》请在冰豆网上搜索。
基于ARM的U盘设计
福建师范大学2006级网络工程
【摘要】:
USB(UniversalSerialBus,通用串行总线)是计算机一种新型的接口技术,它能够使得计算机与外部设备的链接更加方便与快捷。
现在,许多设备都开始应用USB接口来开发,比如键盘.鼠标.移动硬盘.打印机.数码相机等。
在实际应用中,也越来越多地开发开始采用USB技术,比如数据收集等,USB的开发设计和应用现已成为现代电子设计的一个非常很要的部分。
【关键词】:
D12、USB_HUB、ARM、MassStorage协议.FAT区.综述
目录
1引言3
1.1USB接口的分析3
1.2USB器件的选择3
1.3MassStorage协议与FAT16文件系统4
2系统应用技术的概述4
2.1嵌入式系统4
2.1.1ARM的初步介绍4
2.2PDIUSBD12芯片介绍5
2.2.1PDIUSBD12芯片的性能与特点5
3USB系统原理和结构5
3.1USB总线拓扑结5
3.2.1USB设备6
3.2.2USBHUB7
3.2.4设备电源7
3.2.5设备的挂起7
3.3USB主机8
3.4USB设备接口的固件程序设计8
3.5USB数据流10
4应用的协议13
4.1MassStorage协议13
4.2Bulk-Only传输协议16
4.3SCSI指令集18
5程序的实现21
5.1主循环--MAINLOOP.C21
5.2中断服务程序21
5.3控制端点处理22
5.4普通端点处理23
5.5数据提交函数24
六固件调试25
6.1固件调试25
6.2USB器件的检查25
6.3提供描述符25
6.4BULK_ONLY传输协议命令处理26
6.5SCSI命令集27
6.6系统调试测试29
七总结32
参考文献33
1引言
1.1USB接口的分析
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、高速80Mbit/s。
同时,4种类型的传输模式:
块传输、中断传输、同步传输、控制传输。
这样USB就能够满足不同种外部设备的功能需求。
6、USB成本很低。
现在,市场上USB的主控与从控芯片的价格都十分便宜,比如USB电缆等也非常的便宜,再加上USB具有很高的性能,使USB成为性价比非常高的计算机接口。
7、USB能够提供电源。
当外部设备耗电不大,能够可以考虑用USB接口直接供电的方式,这样十分方便与便携。
8、USB同时拥有的很好的兼容性。
1.2USB器件的选择
在对一个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.3MassStorage协议与FAT16文件系统
USB组织在定义了海量存储设备类(MassStorageClass)的规范制,而且这个类规范又包括四个独立的子类规范,
1.USBMassStorageClassControl/Bulk/Interrupt(CBI)Transport
2.USBMassStorageClassBulk-OnlyTransport
3.USBMassStorageClassATACommandBlock
4.USBMassStorageClassUFICommandSpecification。
1和2子规范在定义了数据、命令、状态USB上的传输方法。
Bulk-Only传输规范只是使用Bulk端点传送数据、命令、状态,CBI传输规范使用了Control、Bulk和Interrupt三种类型的端点在进行数据、命令、状态传送。
3和4子规范是定义了存储介质上的操作命令。
ATA命令仅规范用于在硬盘上,UFI的命令规范只是对USB移动存储。
MicrosoftWindows中提供了对MassStorage协议的支持,所以USB移动设备只是需要遵循MassStorage协议来组织数据和处理命令,就能够实现和PC机进行交换数据。
但是Flash的存储单元的组织形式是用FAT16文件系统,因此,就能够直接把Windows的浏览器上经过可移动磁盘来进行交换数据了,Windows可以对FAT16文件系统的管理,因此,USB设备并不需要干预FAT16文件系统操作的完整细节。
2系统应用技术的概述
2.1嵌入式系统
2.1.1ARM的初步介绍
ARM是AdvancedRISCMachines的缩写,是微处理器行业非常知名的一家企业。
ARM在设计上不仅实现了小体积化而且高性能的结构。
ARM处理器简单的结构使得ARM的内核非常小,因此使得工作期间的低功耗。
ARM处理器核具有卓越的性能和非常突出的优点,不仅成为高效率、低消耗、低成本嵌入式处理器核的代名词,同时也得到许多厂家的大力支持。
ARM处理器是在32位高端嵌入式系统中使用的主流芯片之一,占有了绝大部分的市场,而且提供了在数字处理和移动通信等消费类嵌入式产品非常好的解决方案。
ARM处理器是精简指令集计算机RISC体系结构的计算机系统,它不仅集成了非常典型的RISC结构特性,
RISC是指ReducedInstructionSetComputer的缩写,
比如:
1.具有简单的寻址模式,全部加载/存储的地址都是由寄存器的内容与指令域来决定;
2.每一条数据处理指令最大限度和利用ALU和移位器;
3.实现了最大的数据吞吐量多寄存器加载和存储指令;
4.实现了最快速所有指令代码执行的条件;
因此这些在基本的RISC结构上增强的特征,使得ARM处理器在低功耗、高性能和体积小方面上得到非常良好的平衡与稳定[1]。
2.2PDIUSBD12芯片介绍
2.2.1PDIUSBD12芯片的性能与特点
PDIUSBD12是PHILIPS运用在USB1.1协议设备端上使用最广的芯片之一,带有并行总线与局部DMA传输能力的高速的USB接口器件。
在芯片内集成了具有卓越性能的USB接口器件、SIE和FIFO存储器以及电压调整器等,能够给任何外部微控制器与微处理器达成高速并行接口。
PDIUSBD12芯片的功能框图如图2.2.1所示
图2.2.1D12的功能框图
PDIUSBD12是一种性价上非常高的USB器件,它提供了28PIN脚模式,有SO28与TSSOP28封装,SIE达到了全部的USB协议层,并且全部由硬件实现而不需要固件的参与。
具体功能如下:
同步方式识别、并/串转换、比特填充/解填充、CRC校验/生成、PID确认/生成、地址识别和握手信号的鉴定/生成、批处理数据传输可达1MB/s,3±0.3V双极性输入范围,可接受4.5~5.5V工作电压、工业级标准工作环境温度范围为-40~+85℃[4]。
3USB系统原理和结构
3.1USB总线拓扑结
USB总线的物理连接是一种有层次性的星型结构,每个星型结构以集线器(HUB)为中心。
PC机就是主机和根HUB,用户能够将外设或者附加的HUB同它相连,而且这些附加的HUB能够连接另外的外部设备以及下层HUB。
USB最多可以支持5个HUB层以及127个外设。
下图中描述了总线的物理拓扑结构。
图3.1USB总线拓扑结构
3.2.1USB设备
USB设备中包括HUB与功能设备,而且功能设备又能够细分为定位设备与字符设备等等。
为达到进一步叙述,给出端点(endpoint)与管道(pipe)的观念。
端点:
每一个USB设备在主机看来就是一个端点的集合,主机只能通过端点与设备进行通讯,以使用设备的功能。
每一个端点实际上就是一个一定大小的数据缓冲区,这些端点在设备出厂时就已经定义好了。
在USB系统中,每一个端点都有唯一的地址,这是由设备地址和端点号给出的。
每个端点都有一定的特性。
其中包括:
传输方式、总线访问频率、带宽、端点号、数据包的最大容量等等。
除端点0外,其它端点必须在设备配置后才能生效。
端点0通常为控制端点,用于设备初始化参数等,端点1、2等一般用作数据端点,存放主机与设备间往来的数据。
管道:
一个USB管道是驱动程序的一个数据缓冲区与一个外设端点的连接,它代表了一种在两者之间移动数据的能力。
一旦设备被配置,管道就存在了。
管道由两种类型,数据流管道(其中的数据没有USB定义的结构)与消息管道(其中的数据必须由USB定义的结构)。
管道只是一个逻辑上的概念。
所有的设备必须支持端点0以作为设备的控制管道。
通过控制管道可以获取完全描述USB设备的信息,包括:
设备类型、电源管理、配置、端点描述等等。
只要设备连接到USB上并上电,端点0就可以被访问,与之对应的控制管道就存在了。
一个USB设备可以分为三个层。
最底层是总线接口,用来发送与接收包。
中间层处理总线接口与不同的端点之间的数据流通。
一个端点是数据最终的使用者或提供者,它可以看作是数据源或是数据接收端。
最上层就是USB设备所提供的功能,比如鼠标或键盘等。
图3.2.1USB设备层次结构
3.2.2USBHUB
USB结构中HUB是一个关键,它提供了附加的USB节点,USB节点被又称为端口。
HUB能够检测出每一个下行端口的状态,而且能够给下端的设备提供电源。
下图描述了一个非常典型的HUB结构。
图3.2.2USBHUB
3.2.4设备电源
USB设备的电源能够由USB总线供给,而且也能够自备电源。
一个USB设备能够有这两种供电方式,但同一时间只能为一种供电方式。
这两种供电方式是可以进行切换的。
3.2.5设备的挂起
为了节电,当设备在指定的时间内没有总线传输,USB设备自动进入挂起状态。
如果设备所接的HUB的端口被禁止了,设备也将进入挂起状态(称之为选择挂起)。
当然主机也可以进入挂起状态。
USB设备当总线活动时,就会离开挂起状态。
一个设备也可以通过电信号来远程唤醒进入挂起状态的主机。
这个能力是可选的,如果一个设备具有这个能力,主机有能力禁止或允许使用这种能力。
3.3USB主机
USB主机在USB系统中处于中心地位,能够对USB及其连接的设备有着特殊的任务。
主机控制着全部对USB的访问,一个外部设备只能有主机同意才能够有访问总线的权利。
主机也同时检测着USB的结构。
USB主机有三层结构:
设备驱动程序、USB系统软件、USB主控制器(主机的总线接口)。
另外,还有两个软件接口:
主机控制驱动(HCD)接口,USB驱动(USBD)接口。
图3.3主机的层次结构
3.4USB设备接口的固件程序设计
在整个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.5USB数据流
图3.5.1USB数据流过程
从逻辑上讲,USB数据的传输是通过管道进行的。
USB系统软件通过缺省管道(与端点0相对应)管道设备,设备驱动程序通过其它的管道来管理设备的功能接口。
实际的数据传输过程是这样的:
设备驱动程序通过对USBD接口(USBdriverinterface)的调用发出输入输出请求(IRP,I/ORequestPacket);USB驱动程序接到请求后,调用HCD接口(hostcontrollerdriverinterface),将IRP转化为USB的传输(transfer),一个IRP可以包含一个或多个USB传输;然后HCD将USB传输分解为总线操作(transaction),由主控制器以包(packet)的形式发出。
需要注意的是:
所有的数据传输都是由主机开始的,任何外设都无权开始一个传输。
IRP是由操作系统定义的,而USB传输与总线操作是USB规范定义的。
为了进一步说明USB传输,这里引出帧(frame)的概念。
帧:
USB总线将1ms定义为一帧,每帧以一个SOF包为开始,在这1ms里USB进行一系列的总线操作。
引入帧的概念主要是为了支持与时间有关的总线操作。
为了满足不同外设和用户的要求,USB提供了四中传输方式:
控制传输;同步传输;中断传输;批传输。
它们在数据格式、传输方向、数据包容量限制、总线访问限制等方面有着各自不同的特征:
控制传输(ControlTransfer)
1.通常用于配置、命令、状态等情形;
2.其中的设置操作(setup)和状态操作(status)的数据包具有USB定义的结构,因此控制传输只能通过消息管道进行;
3.支持双向传输;
4.对与高速设备,允许数据包最大容量为8,16,32或64字节,对于低速设备只有8字节一种选择;
5.端点不能指定总线访问的频率和占用总线的时间,USB系统软件会做出限制;
6.具有数据传输保证,在必要时可以重试。
同步传输(IsochronousTransfer)1.是一种周期的、连续的传输方式,通常用于与时间有密切关系的信息的传输;
2.数据没有USB定义的结构(数据流管道);
3.单向传输,如果一个外设需要双向传输,则必须使用另一个端点;
4.只能用于高速设备,数据包的最大容量可以从0到1023个字节;
5.具有带宽保证,并且保持数据传输的速率恒定(每个同步管道每帧传输一个数据包);
6.没有数据重发机制,要求具有一定的容错性;
7.与中断方式一起,占用传输CSW。
在从Host接收数据时,也设置接收标
志,当收到WRITE命令后,即进入此状态,直至从Host端接收数据完毕,再将数据存入
Flash中。
图6.5.1SCSI传送数据
图6.5.2SCSI接收数据
本系统开发的U盘的存储空间使用的是4MB的RAM空间。
当U盘插入主机时,通过操作系统的格式化操作把该空间格式化成FAT系统,然后主机就可以在该存储空间上进行文件的写入与读取。
6.6系统调试测试
1.嵌入式软件的加载界面
图6.6.1
2.U盘设备控制传输阶段的配置信息通信过程,包括设备描述符、配置描述符和字符串描述符的枚举、设置USB设备地址等
图6.6.2
3.基于BulkOnly的海量存储协议的调试信息输出
图6.6.3
4.本论文所设计的U盘的格式化界面
图6.6.4
5.U盘中文件的拷贝与文件夹的创建
图6.6.5
七总结
在此项目开发过程中,我从中学到了许多书本上学不到的东西,尤其是在动手和实际应用的能力得到强化。
通过这次USB通信程序开发,包含嵌入式程序、单片机,让我觉得C语言编程的熟练城区是项目开发的重点。
许多出现的问题其实都是原理上非常承受的东西,从资料中就能够找到。
而我们要做的就是把书本上的原理在特定的平台上实现就可以了。
原理是比较抽象,比较粗略的,不需要精确;而在真正使用代码实现时,那就是需要具体、详细、精确、一点误差都不能有,因此,对编程语言的熟练就可以达到事半功倍,提高效率。
动手实际的运用和开发就是学习的好机会,只有真正经过了开发过程以后,你才会有更加深刻的体会。
在项目开发过程中,实际能力和经验的增长是相辅相成的。
有些内容是要凭经验,理论上的东西,是别人总结出来的东西,非常的抽象,跟实际运用中相比往往省略了许多细节,而项目开发有时候就是根据抽象的理论,来重新实现细节。
一个问题在一次查找原因的过程中不清楚,那么你在做第二次就有一定的思路了,也就能够很快的找到问题的所在。
在开发过程中,学到的不仅是将理论的东西运用到实际中,同时也是排找问题思路的建立。
参考文献
[1]ARM公司.ARMArchitetureReferenceManual[s].2000
[2]ARM公司.TheARM-THUMBProcedureCallStandard[s].2000
[3]马忠梅,马广云.ARM嵌入式处理器结构与应用基础[m].北京:
北京航空航天大学出版色,2002
[4]周立功.PDIUSBD12USB固件编程与驱动开发[M].北京:
北京航空航天大学出版社,2003.2
[5]沈文,Eaglelee.AVR单片机C语言开发入门指导[M].北京:
清华大学出版社,2003
[6]王士元.C高级实用程序设计[M].北京:
清华大学出版社,1996
[7]谭浩强.C程序设计[M].北京:
清华大学出版社,1996
[8]AtmelCorporation.AVRInstructionSetNomenclature:
StatusRegister(SREG);[9]RegistersandOperands.
[10]SAMSUNGElectronicsCO.LTD.K9F5608U0A-YCB0,K9F5608U0A-YIB0.
U-diskdesignbasedonARM
FujianNormalUniversity,FujianInstituteofTechnology2006NetworkEngineering
122622006071JianPingXieTutorXiaoLin
Abstract:
USB(UniversalSerialBus,UniversalSerialBus)isanewtypeofcomputerinterfacetechnologythatallowscomputerstolinkwithexternaldevicesmoreconvenientandfast.Now,manydevicesarebeginningtouseUSBinterfacetodevelop,suchasthekeyboard.Mouse.Mobileharddisk.Mobileharddisk.Printer.Digitalcameras.Inpractice,moreandmoredevelopersstartusingUSBtechnology,suchasdatacollection,USBdesignandapplicationdevelopmenthasbecomeaverymodernelectronicdesignistobepartof.
Keywords:
D12,USB_HUB,ARM,MassStorageProtocol.FATarea.Summary
?
?
基于ARM的U盘设计