存储技术
引言
随着移动数据存储领域的日益扩大,在嵌入式系统中实现usb主机功能,以实现利用usb存储设备进行数据存储的需求变得日益迫切。u盘作为新型移动存储设备,以体积小、速度高、抗震动、通用性强的特点倍受青睐,因此,在数据采集系统中开发出嵌入式usb主机控制u盘作为数据存储器,将具有良好的实用价值和应用前景。
1、usb大容量存储设备协议分析
基于usb的大容量数据采集系统的设计,主要是要实现嵌入式usb-host。要想设计出能直接读写u盘的嵌入式usb-host,就必须理解usb大容量存储设备协议。目前usb大容量存储设备软件结构如图1所示。
图1 usb大容量存储设备软件结构示意图 图1中,虚线左边部分是主机的驱动程序结构,也是嵌入式usb-host所要实现的。左边最顶层是fat文件系统层api,用于提供给用户访问存储设备的方法。
u盘中的数据都是以文件格式存储的,fat16因具有高度兼容性而被广泛应用于移动存储设备中。这里简要分析一下fat16文件系统结构和存储空间的组织原则。
(1)fat16文件系统结构
fat格式的磁盘大致可以分5个部分:mbr区、dbr区、fat区、fdt区和data区。
mbr区:又称主引导记录,其后为64字节的dpt(disk partition table,磁盘分区表)。由于不需要从u盘启动,且u盘就一个分区,所以u盘上没有这个数据区。
dbr区:即操作系统引导记录区,通常占用分区的第o扇区,共512字节,由跳转指令、bpb、结束标志几部分组成。
fat区:存放文件分配表。文件分配表是一一对应于数据区簇号的列表,反映了所有簇的使用情况。每个表项单元的大小决定了fat的类型,比如fat16的表项单元为16位。fat表一般都有一个备份。
fdt区:存放着文件目录表,位于备份fat表之后。fdt由32位的目录项线性构成,记录着根目录下每个文件(子目录)的起始单元、属性等。fdt大小为32个扇区,最多可以保存512个目录项。
data区:是真正意义上的数据存储的地方,位于fdt之后,占据硬盘上的大部分数据空间。
(2)fat16的存储空间组织原则
当磁盘空间格式化为fat分区时,fat文件系统就将这个分区当成整块可分配的区域进行规划,以便数据的存储。fat将磁盘空间以一定数目的扇区为单位进行划分,这样的单位称为簇。通常情况下,每扇区512字节的原则是不变的。簇的大小一般是2n(n为整数)个扇区的大小(每个簇的最大存储空间为32 kb)。一般采用逻辑块lba(logical block addressing)寻址方式。
图1虚线左边中间的ufi/ata驱动层将应用程序的访问转换成ufi或ata命令/数据格式,与外部存储设备之间按照子规范ufi或ata的定义进行命令/状态/数据的交换;最底层则是usb传输驱动,负责将上层的ufi/ata数据发送到usb总线上以及接收从存储设备返回的状态/数据。cbi/bulk-only/ata/ufi是usb mass storage类规范中4个独立的子类规范的简称。前两个子规范定义了数据/命令/状态在usb上的传输方法。bulk-only传输规范仅使用bulk端点传送数据/命令/状态,cbi传输规范则使用control/bulk/interrupt三种类型的端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ata命令规范用于硬盘,ufi命令规范是针对usb移动存储而制定的。
2、嵌入式usb-host设计
2.1 硬件设计
系统采用增强型8051内核的单片机stc89c516rd+作为中央处理芯片,选用南京沁恒电子公司的ch375s作为usb主机控制芯片。
stc89c516rd+具有64 kb的flash程序存储器,1280字节的ram(256字节的内部ram和1kb的外部ram),支持在系统/在应用可编程(isp,iap);ch375s是一款符合usb1.1协议规范的usb总线的通用接口芯片,支持usb-host主机方式和usb-device/slave设备方式。ch375s具有8位数据总线和读、写、片选控制线以及中断输出,因此ch375s作全速usb-host主机接口时,外围元器件只需要晶振和电容,就可以方便地挂接到单片机/dsp/mcu/mpu等控制器的系统总线上。考虑到读/写u盘或移动硬盘时一般都是以扇区模式进行的,所以要加磁盘数据缓冲区和文件数据缓冲区(都是512字节的整数倍),并且缓冲区越大,执行的效率越高,所以外扩了32 kb的ram。
usb-host电路如图2所示。
根据以上分析,即可设计如下文件操作:
①创建文件。在fdt中申请新目录项。
②写文件。当写一新文件时,需在fat表中查找未使用的簇,并将该簇号写入文件对应目录数据结构中的起始簇号位置。当此文件长度大于一簇时,还需在fat表中对应的起始簇号位置填入下一可用簇的簇号,直到文件的最后一簇(fat表中的相应位置填ffff)。若磁盘有备份fat,则须在备份fat表的相应位置填入正确的内容。
③删除文件。除了将fdt中对应的目录项置相应标志外,还要修改fat表及备份fat表。将此文件使用的簇号位置清0,表示此簇当前未被使用。
由于在fat16中子目录被视为特殊的文件,对其操作类似于文件操作,所以不再赘述。
构建的fat16文件系统对用户提供文件级api函数,如ch375_creat_file()、ch375_write_file()、ch375_delete_file()等,当执行文件级api函数时,将调用seck_empty_cluster()寻找一个空簇、link_cluster_list()建立簇链、seck_sector()定位文件指针等中间函数。这些中间函数在调用ch375s专用于海量存储设备类对应的命令,如set_usb_mode、disk_read、disk_write等。下面以创建adc.txt,并向其中写入a/d采样数据为例,其工作流程如图3所示。
用fat16文件系统存储文件时最小单元为簇。即使一个很小的文件也会占用一簇,所以,为了节约存储空间,在图3中将创建同名文件并向其中写入数据转换为向原文件追加数据。
3、大容量数据采集系统设计
利用已设计好的嵌入式usb-host搭建起大容量数据采集系统,系统的框图如图4所示。
温度传感器采用ds18b20。它是单总线数字温度传感器,测量范围为-55~+125℃,可编程9~12位a/d转换精度,测温分辨率可达o.0625℃。液晶采用tm320240eccw,它是320×240点阵液晶,显示控制芯片是sed1335,既可以以文本模式显示所测温度数据,也可以自建平面坐标以曲线模式显示温度数据。外扩了4×5键盘,用于设定采集的时间间隔、时间长度;系统所允许的高、低温容限;设定采集时的时间以及输入自己想查看数据的存储区域。键盘用8279管理,目的是减轻单片机的负担。因为单片机处理温度采集及温度数据在液晶上显示时已经耗去一些时间,再加上定时和不定时的读/写u盘,负荷已经很重了,所以键盘扫描与处理交给8279来做。单片机采用查询方式查询8279的中断。
驱动程序包括液晶驱动、ds18820驱动和8279驱动。其中主要的工作是液晶驱动程序的编写。液晶驱动包括初始化液晶、读写参数子程序、写命令子程序、建坐标子程序、绘点子程序、汉字写入子程序等。液晶在系统初始化和对u盘初始化与枚举时显示提示信息,在采集过程中,以曲线模式显示温度数据。
4、结语
基于ch375s实现的usb-host接口,其硬件结构便于在其他开发平台上扩充,其核心的文件层协议栈采用标准的c语言编写,具有良好的移植性。类似的基于usb的大容量数据采集方案已用于轻轨铁路、无纸记录仪的数据存储系统中。随着usb otg时代的到来,基于usb的大容量数据采集将会有非常广阔的应用前景。
责任编辑:gt
全部0条评论
快来发表一下你的评论吧 !