文献标识码: B
文章编号: 0258-7998(2010)10-0073-03
SD卡[1]作为新型移动存储设备,以体积小、速度快、抗震动、通用性强的特点备受青睐。以SD卡作为存储介质来保存企业的电能耗用参数,可以有效提高数据保存的可靠性。采用SD卡结合ARM处理器LPC2148设计的多参数电能耗用记录仪,将现场采集的各类电能耗用数据按文件方式存储到SD卡中,并且可以方便地与PC等上位机进行数据交换,从而满足现场数据采集、室内进行数据分析的要求,特别适合于长时间、大容量数据采集的场合。
1 系统硬件设计
电能耗用记录仪硬件电路如图1所示,ARM核处理器LPC2148是整个系统的核心,其工作频率高达60 MHz,内置512 KB的闪存和16 KB的SRAM,并且带有SPI总线、两路A/D转换器、实时时钟等多种片内功能部件。电网中的电压电流信号通过较高精度的互感器变换成1 V左右的交流信号,同时使记录仪与强电隔离,对隔离后的交流信号进行整形、滤波之后送入LPC2148内部两路A/D转换器,完成对电压、电流、功率因数等参数的测量,LPC2148根据内部实时时钟提供的时间按高峰和低谷时段对耗电量进行分时计度,计算出瞬时电量、整点电量、总需量等参数。记录仪采用点阵图形液晶显示器作为本地显示接口,既可以文本模式显示所采集的数据,也可以图形方式显示采集数据曲线。外扩矩阵键盘用于设定数据采集间隔、采集时间等,系统根据用户设定启动数据采集,并自动将采集得到的数据存储到SD卡存储器中。
SD卡可以采用SD和SPI两种工作方式[2],在SPI方式下只需要4条信号线即可完成数据通信,操作简单方便,而且很容易与LPC2148的SPI总线进行接口,接口引脚说明如表1所列。作为SPI设备,SD卡的SPI通道由以下4个信号组成:CS(片选)、SCK(时钟)、DateIn(主机到卡的数据信号)和DateOut(卡到主机的数据信号)。CS是SD卡的片选信号线,在整个SPI 操作过程中,必须保持低电平有效;SCK时钟用于同步;DateIn不但传输数据还发送命令;DateOut除了传输数据外,还发送应答信号。
2 SD卡在SPI方式下的读写实现
SPI是一种通用同步串行接口总线,字长为8 bit。SPI协议是以主从方式工作的,通常有一个主设备和一个(或多个)从设备。工作时主设备通过提供同步时钟和从设备使能信号来控制数据传输。主设备每次开始传送数据时,必须先将片选信号置低以激活SD卡,使其进入工作状态。SD卡在SPI方式下工作时,被选中的卡总是对来自于主设备的命令有所响应,当卡遇到错误时,将返回一个出错响应来代替期望的数据。
2.1 SD卡初始化
SD卡在读写操作之前必须进行初始化,这是确保SD卡能在SPI方式下进行正常数据传输的前提。由于大容量SD卡的出现,SD1.x标准已经升级为SD2.0,但也因此出现许多电子设备无法驱动大容量SD卡的情况,如何识别SD1.x与SD2.0就显得特别重要。SD卡上电后默认进入SD工作方式,应等待至少74个时钟周期后,将片选信号置低,发送复位命令CMD0,等SD卡复位完成后再向SD卡发送CMD8命令。如果收到的应答信号为01H,则表示为SD2.0卡,否则为SD1.x卡。SD1.x与SD2.0最大不同之处在于命令地址的表示,SD1.x的地址单位是字节,而SD2.0的地址单位是扇区,因此在读写操作时应根据不同的卡对地址作相应处理。图2所示为SD卡在SPI方式下的初始化流程。
2.2 FAT32文件系统
SD卡在能够进行数据保存之前必须先按某种文件系统[3]的规定进行格式化,FAT32文件系统因具有高度兼容性而被广泛应用于移动存储设备中。FAT32文件系统结构分为五个部分:MBR区、DBR区、FAT区、FDT区、DATA区。
MBR区又称为主引导记录,其后为64 B的磁盘分区表DPT。
DBR区即操作系统引导记录区,占用分区的第0扇区,共512 B,由跳转指令、结束标志等几部分组成。
FAT区存放文件分配表,文件分配表与数据区簇号一一对应,反映了所有簇的使用情况。每个表项单元的大小决定了FAT的类型,比如FAT32的表项单元为32 bit。FAT表一般都有一个备份。
FDT区存放文件目录表,位于备份FAT表之后。FDT由32 bit线性目录项构成,记录着根目录下每个文件(子目录)的起始单元、属性等。
DATA区是真正意义上的数据存储区,位于FDT之后,占据SD卡上的大部分空间。
当SD卡格式化为FAT32分区时,文件系统就将这个分区当成整块可分配的区域进行规划,以便于数据的存储。通常将SD卡空间以一定数目的扇区为单位进行划分,这样的单位称为簇,簇的大小为2n个扇区(n为整数),每个扇区512 B,每个簇的最大存储空间为32 KB。
3 系统软件设计
系统软件包括SD卡驱动、液晶驱动、A/D转换驱动、键盘驱动以及各种数据处理程序等。限于篇幅,这里仅介绍SD卡的文件系统操作。整个文件系统采用模块化层次结构,包括文件管理与目录管理模块、文件分配表管理模块、SD卡缓存模块等,这些模块都建立在底层驱动程序之上[4],底层驱动程序则主要完成向SD卡某个扇区的读写。文件系统的功能是在SD卡中进行正确的文件数据操作,主要包括:在FDT中申请新目录项,创建文件;写入新文件时,在FAT表中查找未使用的簇,并将该簇号写入文件对应目录数据结构中的起始簇号位置,当文件长度大于一簇时,还需在FAT表中对应的起始簇号位置填入下一可用簇号,直到文件的最后一簇;删除文件时,除了在FDT中将对应的目录项设置相应标志外,还要修改FAT表,将此文件使用的簇号位置清0,表示此簇当前未被使用等。FAT32文件系统存储文件时最小单元为簇,即使一个很小的文件也会占用一簇,为了节约存储空间,创建文件时如果有同名文件存在,则只需要向原来的同名文件追加数据。文件系统设计时为用户提供了各种API函数,如创建文件函数Creat_File(),打开文件函数Open_FIle(),写入文件函数Write_File(),删除文件函数Delete_File()等,调用这些API函数即可完成用户所需要的功能。图3所示为在SD卡中创建文件并向其中写入文件数据的流程图。
采用SD卡作为移动存储器的多参数电能耗用记录仪,可以对现场耗电数据进行实时采集和高速保存。利用SD卡的良好移动性,可方便地实现与计算机的数据交换,达到现场数据采集、室内数据分析的目的。也可以通过记录仪键盘命令随时读取SD卡中的数据,从液晶显示屏幕上以文本或曲线方式进行实时显示。随着SD卡移动存储性能的不断提高,容量越来越大,其价格越来越便宜,基于SD卡移动存储器的多参数电能耗用记录仪将会得到广泛的应用。
参考文献
[1] SanDisk Corporation SD memory card specifications part 1, Physical Layer Specification Version 1.0, 2002.
[2] 周煜, 付宇卓. 基于SPI协议的MMC卡读写机制的实现[J]. 计算机仿真, 2005,22(1):97-99.
[3] 邓剑, 杨晓非, 廖俊卿. FAT文件系统原理及实现[J]. 计算机与数字工程, 2005,33(9):105-108.
[4] 徐爱钧. IAR EWARM V5嵌入式系统应用编程与开发[M]. 北京:北京航空航天大学出版社, 2009.