CH378与ARM处理器的大容量数据记录仪设计

2018-08-08 07:31
单片机与嵌入式系统应用 2018年8期
关键词:记录仪U盘扇区

(1.湖北四机赛瓦石油钻采设备有限公司, 荆州 434023;2.长江大学电信学院)

引 言

工业现场的各种实时数据的采集和保存一直是应用工程师关心的问题,尤其是在数据量大、采集时间长的场合,如何对数据进行安全有效的保存和分析显得格外重要。U盘作为新型移动存储设备,具有体积小、容量大、抗震动、通用性强的特点,以U盘作为存储介质来保存工业现场数据,不仅可以有效提高保存数据的可靠性,而且便于与计算机进行数据交换。采用USB器件CH378[1],结合ARM处理器设计的大容量实时数据记录仪,将现场采集的各种数据按文件方式存储在大容量U盘中,可以方便地实现现场数据采集、室内进行数据分析的要求,特别适合于长时间数据采集的场合。

1 USB海量存储协议与文件系统

USB通信[2]以分层方式进行,总体上可分为功能层、USB设备层和总线接口层。U盘属于USB家族内的海量存储(USB Mass Storage)[3]设备,它与主机之间采用“控制/批量/中断”(CBI)方式或“批量”(Bulk_Only)方式进行通信。海量存储协议包括CBI、 Bulk-Only、 ATA和 UFI等4个独立的子类规范,前两个子规范定义了数据/命令/状态在USB总线上的传输方法,后两个子规范定义了存储介质的操作命令,ATA命令规范用于硬盘,UFI命令规范则是针对USB移动存储制定的。

U盘在能够进行数据保存之前必须先按文件系统[4]进行格式化,FAT32[5]文件系统因具有高度兼容性而被广泛应用于U盘移动存储设备中。FAT32文件系统结构分为5个部分:

主引导记录区(MBR),其后为64字节的磁盘分区表DPT。U盘一般只有一个分区,没有磁盘分区。操作系统引导记录区(DBR),占用分区的第0扇区,共512字节,由跳转指令、结束标志等几部分组成。文件分配表区(FAT),文件分配表与数据区簇号一一对应,反映所有簇的使用情况。每个表项单元大小决定了FAT的类型,FAT32的表项单元为32位。FAT表一般都有一个备份。文件目录表区(FDT),位于备份FAT表之后。FDT由32位线性目录项构成,记录着根目录下每个文件或子目录的起始单元、属性等。数据存储区(DATA),位于FDT之后,占据U盘上的大部分空间。

当U盘格式化为FAT32分区时,文件系统就将这个分区进行整体规划,以便于数据存储。通常将U盘空间以一定数目的扇区为单位进行划分称为簇,每个扇区512字节,每个簇的最大存储空间为32 KB。

2 高速USB接口芯片CH378

CH378 是一种新型高速USB总线通用接口芯片,支持Host主机方式和Slave设备方式。内置了多种固件程序,如USB通信协议的基本固件、海量存储设备的专用通信协议固件、SD卡通信接口固件、FAT32文件系统管理固件。支持常用的USB存储设备,包括U 盘、USB移动硬盘和SD卡(包括标准容量SD卡和高容量HC-SD卡以及协议兼容的MMC卡和TF卡)。CH378支持8位标准并行接口、高速SPI串行接口以及异步串口接口,MCU处理器可以通过上述任何一种通信接口来控制CH378芯片,对U 盘或SD卡中的文件进行读写操作,或者与其它USB设备进行通信。

CH378芯片具有如下主要特点:

支持12 Mbps全速和480 Mbps高速USB通信,外围元器件只需要一个晶振和2个电容。支持USB主机接口和USB设备接口,支持动态切换主机方式和设备方式。 支持USB设备的控制传输、批量传输和中断传输。自动检测USB设备或SD卡的连接和断开,提供设备连接和断开的事件通知。提供最高 50 MHz 的SPI主机接口,支持 SD 卡以及与其协议兼容的 MMC 卡和 TF 卡等。内置文件系统,提供文件管理功能,支持长文件名。以字节为单位或者以扇区为单位对多级子目录下的文件进行读写操作,支持容量高达32 GB的U盘和SD卡。提供磁盘管理功能,包括磁盘初始化、查询物理容量、查询剩余空间、物理扇区读写。提供高速8位并行接口,支持8位并行数据总线。提供最高30 MHz速度的SPI 设备接口,支持SPI串行总线。提供最高10 Mbps速度的异步串行串口,支持串行通信波特率动态调整。支持低功耗模式。内置20 KB的RAM存储器,可作为文件读写缓冲区使用,也可作为普通RAM 使用,极大降低了外部系统的资源要求。

3 硬件系统设计

图1 大容量实时数据记录仪硬件电路框图

大容量实时数据记录仪硬件电路如图1所示。

ARM处理器LPC2138[6]为记录仪核心,工业现场需要测量采集的模拟信号,通过整形和调理电路之后,通过LPC2138片内A/D转换器进行采样并转换成数字量,ARM处理器对测量结果进行数字滤波,进一步提高抗干扰能力。记录仪根据实时时钟芯片DS1302提供的时间,对测量数据进行实时处理,并按时间标记存储到U盘中。记录仪采用点阵图形液晶作为本地显示接口,控制芯片为SED1335,既可以通过文本模式显示所采集的数据,也可以以图形方式显示数据曲线。系统外扩矩阵键盘用于设定数据采集间隔、采集时间等,根据用户设定的参数定时启动数据采集,并自动将采集得到的数据通过CH378存储到U盘之中。当U盘中数据即将存满时系统将显示报警,提醒用户及时更换U盘。

CH378支持三种通信接口,在芯片上电复位时,CH378将采样SEL和TXD引脚的状态,根据这2个引脚状态的组合选择当前的通信接口,如表1所列。

表1 CH378的通信接口选择

CH378采用USB主机方式,通过并行方式实现与LPC2138 ARM处理器之间的接口。并口信号线包括:8 位双向数据总线 D7~D0、读选通输入引脚 RD、写选通输入引脚 WR、片选输入引脚 PCS以及地址输入引脚A0。CH378芯片通过并行接口,可以很方便地挂接到各种8位系统总线上,并且可以与多个外围器件共存。表2为CH378并行接口操作的真值表。

表2 CH378并行接口操作的真值表 (其中X表示不关心此位)

为使CH378工作于并口方式,应将CH378的SEL引脚接地,TXD引脚接高电平。8位双向数据总线D7~D0直接与LPC2138的P0口相连。片选端PCS连接到LPC2138的P1.1引脚,该引脚为低电平时选通CH378芯片。地址输入线A0连接至LPC2138的P1.0引脚,当A0为高电平时选择命令端口,向CH378写入操作命令;当A0为低电平时选择数据端口,对CH378进行数据读写。读、写信号端RD和WR分别连接到LPC2138的P1.6和P1.7引脚。中断请求信号端INT连接到LPC2138外部中断输入EINT0引脚,低电平有效。考虑到读写U盘时一般以扇区方式进行,为了提高读写效率,利用LPC2138片内32 KB的RAM作为数据文件缓冲区,一般来说缓冲区越大,数据读写效率越高。

4 系统软件设计

CH378芯片内置了处理海量存储设备的专用通信协议固件,支持Bulk-Only传输协议和SCSI、UFI、RBC等命令集,这使得USB控制传输过程大为简化,CH378编程时只需要根据发出文件管理和数据读写命令,极大地方便了用户对U盘的读写等操作。

U盘提供若干个物理扇区用于数据存储,每个扇区大小为 512 字节。通常将U盘中的物理扇区组织为FAT32文件系统,为了方便起见,ARM处理器也应该在FAT32规范下通过文件的形式存取U盘中的数据。一个U盘中可以有若干个文件,每个文件都是一组数据的集合,以文件名来区分和识别。实际文件数据的存放可能不是连续的,而是通过一组“指针”链接的多个块(也就是分配的簇),从而能够根据需要随时增大文件长度以便容纳更多数据。

目录(文件夹)是为了便于分类管理,可以将多个文件归档在一起。在FAT32文件系统中,U盘容量以簇为基本单位进行分配,而簇的大小总是扇区的倍数,所以文件的占用空间总是簇的倍数,也就是扇区的倍数。但在实际应用中,保存在文件中的有效数据的长度却不一定是扇区的倍数,所以FAT32在文件目录信息FAT_DIR_INFO中专门记录了当前文件中有效数据的长度,也就是通常所说的文件长度,文件长度总是小于或者等于文件占用的空间。

在对文件写入数据后,如果覆盖了原数据,则文件长度可能不发生变化,当超过原文件长度后,变为追加数据,那么文件长度将会增大。如果向文件追加数据后,没有修改文件目录信息中的文件长度,那么FAT32 文件系统会认为超过文件长度的数据是无效的,这时处理器将无法读出超过文件长度的数据,虽然数据实际存在。如果数据量少或者数据不连续,那么可以在每次追加数据后立即更新文件目录信息中的文件长度,但是如果数据量大并且需要连续写入数据,立即更新文件目录信息会降低效率,并且频繁修改文件目录信息会缩短U盘的使用寿命。

所以在这种情况下,应该在连续写入多组数据后再更新一次文件目录信息中的文件长度,或者一直等到关闭文件时再更新文件长度,CH378的内置命令 CMD_FILE_CLOSE可以将内存中的文件长度刷新到U盘的文件目录信息中。虽然CH378最大支持1 GB的单个文件,但是为了提高效率,一般单个文件的长度不要超过100 MB,通常在几KB到几MB范围是比较正常的,数据较多时可以分为多个目录、多个文件存储。

图2为大容量数据记录仪软件系统在U盘中创建文件并写入数据的流程图。采用FAT32文件系统时最小单元为簇,即使一个很小的文件也会占用一簇,为了节约存储空间,创建文件时如果有同名文件存在,只需要向原来的同名文件追加数据。系统软件对于U盘的操作主要包括如下几点:

图2 在U盘中创建文件并向其中写入数据的流程图

① 创建文件:在FDT中申请新的目录项。

② 写文件:创建新文件时,在FAT表中查找未使用的簇,并将该簇号写入文件对应目录数据结构中的起始簇号位置。当文件长度大于一簇时,需要在FAT表对应的起始簇号位置填入下一个可用簇号,直到文件的最后一簇。

③ 删除文件:除了在FDT中对应的目录项设置相应标志外,还要修改FAT表,将要删除文件所使用的簇号位置清0,表示此簇当前未被使用。

通过CH378构建的FAT32文件系统为用户提供了多种API函数,用户只需要调用相关命令即可完成对应的操作。下面按操作顺序给出常用的几种命令。

(1)初始化操作

这是进行任何一项文件操作之前的必要步骤,相关命令如下:

① 发送 CMD_SET_USB_MODE 命令,进入 USB-HOST工作方式。

② 等待U盘连接,由处理器向CH378发送CMD_DISK_CONNECT命令定期查询。

③ 发送CMD_DISK_MOUNT命令,初始化U盘,并测试磁盘是否就绪,失败后可以重试最多5次。

④ 上述步骤只需执行一次,如果U盘断开后重新连接,则必须回到步骤②。

(2)新建文件并写入数据

相关命令如下:

① 发送 CMD_SET_FILE_NAME 命令+CMD_FILE_CREATE 命令,新建文件。

② 多次发送 CMD_WR_HOST_OFS_DATA 命令+CMD_BYTE_WRITE 命令,写入数据。

③ 发送 CMD_FILE_CLOSE 命令,参数是 1,关闭文件并允许自动更新文件长度。

(3)向已有文件追加数据

相关命令如下:

① 发送 CMD_SET_FILE_NAME 命令+CMD_FILE_OPEN 命令,打开文件。

② 发送 CMD_BYTE_LOCATE 命令,参数是 0F FFFF FFFH,移动文件指针到文件末尾。

③ 多次发送 CMD_WR_HOST_OFS_DATA 命令+CMD_BYTE_WRITE 命令,写入数据。

④ 发送 CMD_FILE_CLOSE 命令,参数是 1,关闭文件并允许自动更新文件长度。

在FAT32中子目录被视为特殊的文件,对其操作类似于文件操作,不再赘述。

系统软件设计还包括数据记录仪的液晶驱动、A/D转换驱动以及键盘驱动等,其中液晶驱动程序较为复杂,包括初始化液晶、读写参数子程序、写命令子程序、建坐标子程序、绘图子程序、汉字写入子程序等,限于篇幅,这里不再一一列举。

结 语

猜你喜欢
记录仪U盘扇区
分阶段调整增加扇区通行能力策略
采用U盘文件冗余方案实现TSP系统的可靠装载
做梦记录仪
基于GPS的便携式汽车行驶记录仪的研制
U盘故障排除经验谈
汽车记录仪保险丝搭接转换装置及其模具设计
基于贝叶斯估计的短时空域扇区交通流量预测
重建分区表与FAT32_DBR研究与实现
使用Cryptsetup加密U盘
大容量Flash在井下记录仪中的应用