新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于单片机的大容量数据存储技术的应用研究

基于单片机的大容量数据存储技术的应用研究

作者:时间:2012-01-31来源:网络收藏

0 引言

在现场测控系统中,RTU(远程测控终端)存储容量、存储数据的转移问题始终是RTU的重要环节。RTU的存储容量一般为几十K~几百K字节,数据转移通常采用不掉电静态RAM、EEPROM存储模块,或采用便携式计算机通过串行口读取RTU数据。无论采用哪种方法都存在一定的局限性。首先存储容量小,对于大量的显得比较紧张。对于数据转移,如果采用存储模块,虽然携带方便但不是通用设备,其成本较高,同时不能与计算机兼容,要将存储模块的数据录入计算机还需要专用的读取设备;如果采用便携式计算机读取RTU数据,虽然读取方便,但在野外便携式计算机也是一个不小的包袱。

随着(Universal Serial Bus)技术的发展,计算机的移动存储介质普遍采用U盘或移动硬盘。U盘的存储容量以MB为单位,移动硬盘的存储容量以GB为单位,它们相对于RTU原先的存储模块来说都是海量存储,所有数据存也无需进行压缩处理,可以在文件级与计算机兼容。即便是对于那些小数据量存储的RTU,虽然只依靠内部的 FLASH就能满足存储要求,然而采用接口就能方便地用一个U盘分别读出多个RTU的数据。

如今,技术已经越来越普及和成熟,低成本、高稳定性、较高的数据传输速率和即插即用的方便性,使其备受硬件厂商的青睐。随着数据采集和嵌入式用户对移动存储的需求越来越大,具有USB接口的存储设备以其优异的性价比和灵活性常用来进行数据的存储和交换,所以在嵌入式系统中实现对优盘或移动硬盘的直接读写是非常有价值的。

1USB设备开发的一般过程

1.1 USB接口芯片的选择

在进行一个USB设备开发之前,首先要根据具体使用要求选择合适的USB接口芯片,它是总线在主机方面的接口,用于支持USB设备通过USB连到主机上。

目前,市场上供应的USB控制器主要有两种:带USB接口的和纯粹的USB接口芯片。前者的好处在于开发者对系统结构和指令集很熟悉,开发工具简单,但对于简单或低成本系统,价格高将会是最大的障碍。而纯粹的USB接口芯片仅处理USB通信,必须有一个外部微处理器进行协议处理和数据交换。这类芯片的特点是价格便宜、接口方便、可靠性高,尤其适合于产品的改型设计(硬件上仅需对并行总线和中断进行改动,软件则需增加微处理器的USB中断处理和数据交换程序、PC机的USB接口通信程序,无需对原有产品系统结构作很大的改动)41]。

1.2 硬件电路设计

在选定USB控制芯片后,如果是带USB接口的,那就是一般单片机应用系统的开发;反之,就是如何把USB接口芯片与单片机应用系统融合的问题,一般的USB接口芯片都支持多种并行总线结构,可以方便地与多种单片机接口。

1.3 软件设计

设计完USB主控器与系统中CPU和存储器的接口电路后,就要开发主机系统上的主要外设驱动程序,USB的核心驱动以及USB主控制器驱动程序了,由主机系统控制USB数据的传送动作,响应来自外设的USB标准请求,完成各种数据的交换工作和事件处理。

软件设计中要注意的是先要考虑USB总线延时问题。理论上USB总线工作在全速时的最小响应周期为1毫秒,但是实际上的响应周期可能会到几十毫秒。其原因是多方面的,比如驱动程序、多重缓冲区等。这是在实时控制项目设计时首先要考虑的因素之一。

1.4 调试

因为每一次USB的传输过程,都有时效要求,等待时间过长,通信过程也就中止了,因此不适合用硬件仿真器来设断点调试。可采用串口辅助调试过程,即在固件代码中加入类似于Printf的语句,向串口输出一些信息。借此,可以知道程序运行到哪,以及运行到某处时相应的变量或寄存器值。

调试工作基本分三步进行:首先对单片机部分借助PC调试软件(芯片生产商提供或从网上下载Bus Hound,WINRT-USB 等调试软件)将设备端的USB协议(主要有描述符请求、端口配置、地址设置以及基本数据交换)调通。然后,用调试好的USB设备接口来开发、调试PC 软件。最后,加上USB设备端的其它用户程序,对整个完整的系统进行调试。

2 应用实例

下面从硬软件两方面具体介绍本案例,重点分析了初始化问题。本例研究开发了一种基于单片机的USB总线的HOST接口,使得可以接入标准的USB DEVICE,针对大容量数据固态存储的技术需要,在单片机上研究实现FAT32(兼容FAT16)的文件系统,从而使得USB的Mass Storage类设备可以自由接入,现场采集的数据可以以文件的形式存储记录。这样,就大大拓宽了传统的数据测控终端在长时间大容量的技术上的限制。

本例采用F149单片机作为核心处理部件,Philps公司的ISP1161A1为USB主控芯片,由F149控制 ISP1161A1,将CPU发来的指令变为相应的USB数据流,传送给指定的USB设备进行相应的操作。图1为具有USB主机功能的数据采集系统原理框图。数据采集的固态存储设备采用现在应用非常普遍的U盘或移动硬盘,这些设备可移动性强,均采用标准的USB总线接口,通用性非常好。

图1具有USB主机功能的数据采集系统原理框图

在本例中,软件系统的设计主要涉及五个部分,分别为软件主程序、数据采集部分、数据处理部分、数据的现场大容量存储部分、数据的GSM通信部分。整个系统是在IAR Embedded Workbench的软件环境以及ScomAssistant调试助手下实现的,程序的实现采用C语言。主程序的代码为:

void main(void)

{

SYSInit();

TimeTaskInit();

USBInit();

while(1){

TimerTaskManage();

USBTaskManage();

}

}

SYSInit()实现系统初始化工作,主要对单片机基础参数的设置和定义各个I/O口的工作方式;TimeTaskInit()中先进行单片机定时中断的配置,再将定时任务的所有标志清零初始化,为定时中断处理做准备。USBInit()是对USB事务进行硬软件初始化,先检测和配置USB主控芯片ISP1161A1,再初始化USB软件环境。

早期的U盘对初始化要求不高,有的甚至不需要驱动就可直接对扇区进行读写,所以现有大部分USB主机系统一般都能实现对这些U盘的读写。但随着产品不断更新,初始化信息不能完全获取使得一些不同的USB装置只能针对不同U盘。本实验证明,初始化过程完成后再解决了时序问题,就可以解决大部分U盘的读写。

3.初始化分析

正如前面所述,目前社会上很多人只能完成针对某些特定U盘的读写,本实验中的重点就是先完成U盘的初始化,让单片机先能认识大多数U盘,然后对它们进行批处理方式的读写,再从U盘或移动硬盘加载文件系统,最后完成对U盘或移动硬盘在文件级别上的读写。

当主机检测到一个设备已经连接时,就会自动识别所连接的设备,这个过程称为设备枚举(Device Enumeration).设备枚举使得主机的设备驱动程序能够与USB设备之间进行数据交换.在这个过程中,USB设备需要响应主机的标准设备请求并把描述符传送给主机,这些描述符包括设备描述符,配置描述符,接口描述符和端点描述符等42]。在没有对U盘完成初始化之前,单片机只能看到U盘的端点0,其他端点对于单片机来说是透明的。因此,我们只能从端点0即控制通道中对U盘进行配置,读进U盘的必要的配置信息后再对U盘的各端点进行配置。一般的传输数据大小不为0的控制传输的过程可分为3个阶段[3]。

第一阶段,是控制传输的建立阶段。

在这阶段里,我们首先要建一个用于建立控制传输事务的PTD数据,然后往U盘发送。

这里有一个需要注意的地方,在每次用于发送的函数执行以后,要加上一定的延时,等待U盘对发过来的指令进行处理。我们要读取描述表,就要向U盘发送 USB设备的标准设备请求命令。比如获取U盘描述表的USB标准设备请求命令为“0680 0100 0000 0012”。把上述命令写入PTD数据的负载区,然后发送,延时等待。

第二阶段,是数据阶段。

标准设备请求命令发送后,U盘就会把设备描述表发过来,这时我们就准备接收了。

在这里有一个问题要解决,就是最大包长度的问题。每个U盘在0通道里都规定了一个最大包的长度,可以是8,16,32或64字节。举个例子:这次要传输的描述表的长度为18字节。假设U盘的最大包长度为8字节,那就分三次接收,8+8+2字节。若最大包长度为16字节,就分两次接收,16+2字节。如果最大包长度为32字节或者64字节,就可以一次完成。为了得到这个U盘的最大包长度,可以进行试探,然后用一个公共变量把最大包长度记录下来。判断原理如下:先建立一个大小为8字节的接收区进行接收,然后监视PTD头的COMPLETE CODE字段(参考1161芯片中PTD数据的建立过程),如果该字段出现1000(二进制)的错误,就证明最大包长比8大,然后再建立16字节的接收区接收,如果还出现1000的错误的话,就再用稍大的包进行尝试,直到COMPLETE CODE字段出现0000为止。这样,就得出了该U盘0通道的最大包长度。下图2总结了读入描述表的过程。


第三阶段,是状态阶段。

在状态阶段里,单片机要向U盘发送一个空数据负载的PTD数据,以向U盘汇报此次控制传输已经完成。

配置表的读取过程和描述表过程差不多,这里就不再加以叙述了。在完成描述表和配置表的读取以后,就可以往U盘发送标准设备请求命令SET CONFIG对U盘进行配置了,至此,枚举过程结束。到此为止,本例单片机对U盘的初始化过程也已基本完成。

实验证明,此方案确实解决了大部分U盘的读写,但由于USB单片机系统对时序要求很严,测试过程也有一定困难,目前还不能解决所有U盘及移动硬盘的读写,为解决这一问题,我们又采用了南京恒沁电子公司的CH375芯片作为USB主控芯片,该芯片集成了处理Mass Storage存储的专用通信协议的固件,单片机可以直接以扇区为基本单位读写存储设备。初步实验证明,它能解决目前市场上几乎所有的U盘及移动硬盘的读写。

CH375的优点是处理Mass Storage存储设备比较方便,缺点是只有一个USB接口,如果视频采集和同时处理就需要2个CH375芯片;只支持USB1.1协议,内部缓冲区只有64字节,数据吞吐量比较小,对于高速的视频采集难以满足要求。ISP1161A1的优点是有2个USB HOST接口和1个USB DEVICE接口,支持USB2.0协议,内部缓冲区为4K字节,数据吞吐量大;缺点是没有Mass Storage的专用通信协议的固件,应用开发比较费事。

3.结束语

文中论述的基于单片机的大容量数据存储方案现已完成了模块调试。实际测试中,将终端的模拟采集数据送入U盘,以ASCII文件方式存储,成功存入自定的文件中,可在PC 机中打开, 也可以直接用上层测控软件进行进一步的处理。

本文的研究是在水利自动化的背景下进行的,但在结构上这种终端明显具有广泛的适应性。除了应用于水利自动化信息测报外,还可以用于电力系统的现场测报和数据记录、交通智能化管理以及环保、气象、地质、民用领域如数码相机等。因此,文中研究的设计模式和实现技术的应用前景将是非常广阔的。

参考文献:

[1] Don Anderson. Universal Serial Bus System Architecture [M].Addison Wesley Longman, Inc,2000

[2] Don Anderson. USB系统体系[M].北京:中国电力出版社,2001

[3] Philips Semiconductors:《ISP1161A1 USB single-chip host and device controller, Programming Guide》,2004



评论


相关推荐

技术专区

关闭