基于单片机的嵌入式USB主机系统的实现
扫描二维码
随时随地手机看文章
0 引言
对于大多数单片机而言,其内部存储器只有ROM和RAM两种。由于ROM对数据的不易修改性和RAM对数据的掉电易失性,而且它们有限的容量,这极大地限制了单片机在数据存储,处理及传输方面的应用。如今,U盘已经成为使用方便的移动存储设备,它采用USB总线接口,支持热插拔且即插即用,体积小容量大,读写速度快,可重复擦写几百万次,无需外接电源,易于采购和携带,有多种容量可供选择,但是它通常与计算机交换数据,不是很方便。因此就有了脱离 PC机在U盘之间交换数据的需求。本文为脱离PC机的U盘对拷技术的研究与设计,主要任务是要完成在无操作系统的情况下对嵌入式USB主机系统的设计,并完成Mass Storage类协议设备驱动嵌入式程序及用户程序。最后,实现结果为在无操作系统的单片机环境下能够对U盘进行文件的读写操作及FAT文件系统的实现。
1硬件电路总体设计
嵌入式USB主机系统从硬件上区分主要包括USB主机控制器和系统主处理器,因此,嵌入式主机系统的核心就由主CPU和主机控制器芯片构成。组成系统的首要任务就是选择合适的主CPU以及USB主机控制器芯片。另外,为了直观地显示系统调试过程和运行结果,需要建立一个人机界面。若作为一个独立的系统,需要另行配置LCD显示模块、完整的键盘模块等。硬件选择的方案HAI必须综合考虑系统成本、处理速度、体积、功耗等问题。
1.1 系统硬件总体框图
嵌入式USB主机系统的核心包括中央处理器和USB主机控制器,基于程序存储容量和处理数据速度方面的考虑,外部扩充RAM。图1是系统的总体设计框图。
系统的大致工作流程是(视具体设计而定):单片机系统在完成系统初始化之后,等待USB主控制器的外部中断或查询USB主控制器的状态,当USB设备插入主机系统上之后,由USB主控制器通过外部中断信号或相应的状态值来通知单片机系统,单片机与USB主控制器完成设备的枚举、配置等操作,并对 Flash闪存进行操作,可以建立文件并写数据,建立文件夹,读取具体文件中的数据,修改文件的信息(例如文件的修改时间,大小等),或者使用通配符对 Flash闪盘中文件或文件夹等等。预留扩展接口是留给用户进行具体功能扩展时使用,用于通过RS-232与PC机进行通信,或控制时钟芯片等等。
1.2 系统主处理器的选择
常用的8位单片机体积小成本低,但是一般来说时钟频率不很高,且往往一个机器周期需要好几个时钟周期,更加导致效率降低。此外,8位单片机的片内资源较少,RAM,ROM容量都比较小,加大RAM就可以解决有大量数据需要处理的系统需求。DSP处理器由于外围集成的资源比较少,价格又比较昂贵,同样不适用于本系统。如今市面上流行的32位ARM核微处理器,处理速度快,外围集成单元齐全,价格适中,更被广泛应用于工业控制、智能系统等嵌入式设备中,因此如本系统采用ARM作为核心系统处理器可以达到很高的速度和性价比[1]。但是在一些对于速度要求不很高的场合,利用单片机也能达到很好的效果,并且能够极大的降低系统成本。本设计采用AT89S52单片机作为系统核心处理器,通过对程序的优化,使得对U盘的读写速度达到近80KB/S,完全可以满足一般情况下对U盘读写速度的要求。
1.3 U盘接口的选择
在利用单片机对U盘进行读写时,需要增加两个USB接口,在系统程序的控制下,就可以实现U盘数据拷贝。因此实现单片机对U盘数据的读写是问题的关键所在。为了实现复杂的USB协议及USB通信,需要使用USB总线接口芯片。本设计中选择的是CH375芯片,它是USB总线通用接口芯片,支持 USB-HOST主机模式,在本地端CH375具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机控制器的系统总线上,且 CH375在USB主机方式下支持常用的USB全速设备,外部单片机可以通过CH375按照相应的USB协议与USB设备通讯,并且CH375支持USB 设备的控制,批量和中断传输。因此只要利用单片机对USB总线接口芯片进行在主机模式下的合理控制,即可实现嵌入式的单片机系统对U盘的读写。
2 系统软件功能模块
嵌入式USB主机系统不同于PC平台上的主机系统。由于其系统资源和性能的限制,嵌入式的主机系统只需根据需要实现特定的设备类即可。在USB总线活动的时候,主机系统是根据协议规范按照特定的时序运行。因此,整个系统的软件设计就可以不依赖于任何操作系统,而只是利用嵌入式的资源即可。在嵌入式 USB主机中,通过系统程序来调度各个任务,从而实现系统的各种功能。
2.1 系统程序流程
系统主程序的流程:首先对系统各部分功能模块进行初始化,接着根据具体需要完成相应的功能(例如采集数据等等),之后查询是否有U盘插入,插入之后即可根据具体需要完成相应的文件操作。本设计的应用系统的程序流程图如图2所示。
对于本课题脱离PC机的U盘对拷技术的研究与设计,其具体流程为:首先初始化系统各功能模块,等待源U盘的插入,源U盘插入之后读取指定文件,并将数据暂存在外部RAM中并提示可以拔下源U盘,接着就等待目的U盘的插入,插入之后将外部RAM中的文件数据写到指定的文件中(可以新建文件,也可以将当前系统时间作为当前文件的修改时间等等),第一轮循环结束,继续以下的循环。其流程图如图3所示。
2.2 协议的选择
USB协议从1.0版本至今,已经发展到2.0版本。在最新的2.0版本中,USB系统开发商已经意识到USB的发展瓶颈在于无法脱离PC机,而对 USB主机进行嵌入又因其协议的纷繁复杂而显得困难重重。因此,系统开发商推出了OTG版本协议,其目的就在于实现USB在嵌入式领域中的应用,这与本系统设计的出发点不谋而合。按照USB2.0的补充版本OTG 1.0规定,符合USB OTG协议的设备可以完全脱离PC机而独立运行,即它本身即可作主机,也可以作外设,也可以与另一个符合OTG规范的设备进行互连[2]。
当然,OTG解决方案并非尽善尽美,在很多场合并不要求系统即可作主机也可作从机,应用OTG方案显得有点多余;其次,由于OTG是新兴技术,在其健壮性上还有待验证。最后,开发符合OTG协议的设备在当前价格还比较昂贵,因此,若想将USB设备(存储设备)应用于嵌入式系统中,本文中提出的主机解决方案不失为一种很好的选择。
2.3 软件层次划分
从嵌入式USB主机的软件层次划分来看,系统软件主要包括主控制器驱动程序、USB核心驱动程序,以及用户软件;从功能划分来看,系统软件可分为以下几个部分:
1.主CPU与各系统模块的初始化程序设计
实现主CPU及各系统模块的初始化,包括实现I2C接口的LED显示、键盘、时钟芯片以及主CPU与USB主机控制芯片之间的数据通信功能。
2.USB主机系统软件的实现
主要完成核心驱动程序的功能,具体来说就是实现USB的4种基本数据的传输方式,实现USB设备的枚举过程,并获取USB设备的描述符等。这些功能都可以通过读写主控制器寄存器来完成。因此,系统中只需分别定义一个读寄存器函数和写寄存器函数,然后以此函数为基础来构成各功能子函数,实现数据传输、设备枚举以及获取描述符等各种操作。
3.Mass Storage类协议的程序设计
实现Mass Storage设备类中Bulk-Only传输协议和Mass Storage类中UFI子类的各种请求命令,对设备进行各种访问和读写操作。
4.应用程序设计
主要实现FAT文件系统。可根据FAT文件系统的基本体系,通过Mass Storage类协议中的UFI子类命令和标准的设备请求命令与设备的Flash闪存建立连接关系,并在USB主机系统中建立磁盘的空间结构,定义 MBR, DBR的数据结构,建立FAT表,FDT表,实现对文件系统进行读取等操作功能即可。
系统的软件设计即可按照上述的4个功能模块来依次构建。
3结束语
本设计建立了基于单片机的嵌入式USB主机系统,该系统实现了USB协议中的Mass Storage类协议和精简的FAT文件系统,能够对U盘中的文件数据进行读写,完成相应的文件操作等各种功能。结果表明:利用该嵌入式USB主机系统对具体U盘中的文件进行读操作时,平均速度为60~80KB/S,对之进行写操作时,平均速度为40~50KB/S。该系统真正实现了便携式,摆脱了PC机对USB设备的控制,无需PC主机即可对USB设备进行读写操作,具有广阔的应用前景。程序主要采用C语言编写,因此它可以很方便地移植到其它处理器中。
本文创新之处:目前,市场上脱离PC对U盘操作的单纯产品很少,而且有些此功能的产品都有一定的应用背景。本设计开发了U盘对拷器,留有扩展口,可作U盘对拷器用,也可在此基础上作二次开发。
参考文献
[1] 王成儒.USB 2.0原理与工程开发[M].北京:国防工业出版社,2004.1
[2] 伊勇,王洪成.单片机开发环境uVision2使用指南及USB固件编程与调试[M]. 北京:北京航空航天大学出版社,2004.11
[3] 李群芳 张士军编.单片微型计算机与接口技术(第2版)[M].西安:电子工业出版社,2005.1
[4] 郭文彬 孙智权等. 基于NiosⅡ的usb接口模块设计[J].微计算机信息,2006,10-2:278-279。