目前比较常见的数据采集及处理系统是功能完备的微机系统。这种系统虽然能较快地分析和处理监测到的信号,但往往只能在固定的位置使用,在野外和移动的情况下则显得十分笨重和不便。特别是野外数据采集作业,往往需要长时间地采集、记录海量数据,需要体积小、重量轻、存储容量大的数据采集及处理仪器。近几年,随着非易失存储技术的发展以及处理器(如嵌入式系统和DSP)性能的不断提高,使信号采集存储系统的耗电量和体积不断减小,满足了便携式的要求,但其读写速度不及MMC。多媒体卡MMC(Multimedia Card)是由美国SANDISK公司和德国西门子公司在1997年共同开发研制的一种多功能、体积小、容量大的快闪存储卡。MMC的发展目标主要是针对移动电话、数码相机、数码摄像机、MP3音乐、PDA、电子书、玩具等产品。
MMC在一定程度上改善了CF卡读写速度较慢的缺点,并且其体积轻巧、抗冲击性强、可反复读写30万次左右。MMC4.0的标准提供了更宽的数据带宽和更快的传输速率,并支持双电压操作模式。MMC还具备存储区纠错能力和低功耗特性,如果5ms内没接收到系统控制命令字,MMC则会自动转入休眠状态,同时它还支持热拔插操作。由此可见,将MMC应用于大容量便携式数据采集系统是一种很好的选择。
1 MMC的结构及工作原理[1]
1.1 MMC的管脚及功能
MMC常被设计为一种低成本的数据平台和通讯介质,其存储容量可达2GB。MMC的接口设计非常简单,如图1所示。它采用7针接口,低成本的串行总线,时钟频率可达20MHz。MMC的操作电压为2.7~3.6V,读/写电流也只有23mA和27mA。MMC最小数据传送单位是块,块的大小缺省值定义为512B。MMC的读写模式包括流式模式、多块模式和单块模式等。
MMC读写接口可在MMC协议和SPI两种通信协议下工作。MMC协议是MMCA协会开发的高性能三线制通信协议,可寻址64 000张MMC多媒体卡,支持顺序读/写操作、单/多数据块读/写操作。表1是MMC使用SPI协议时的管脚定义。
1.2 MMC的内部逻辑结构及功能
MMC的内部逻辑结构可分为四部分:SPI/MMC通信协议接口、单芯片控制器、数据闪存模块、控制线和数据线。SPI/MMC接口实现与主控制器的通信,单芯片控制器完成接口协议、数据存储检索、纠错码算法、故障判断处理、电源管理和时钟控制等功能。数据闪存模块实现整个存储区空间的单字节访问,控制线和数据线实现单芯片控制器与数据闪存模块的访问及数据传输。
1.3 SPI/MMC通信协议
MMC协议是MMC默认的通信协议,SPI协议作为MMC协议的一个子集,是MMC协议的可选协议。其工作效率虽然不及MMC协议强大,但是SPI协议简单易用、兼容性好、便于和单片机连接使用,且可以把设计费用减到最小。SPI协议主要应用于MMC需要数量不大并且数据传输率要求不太高的系统。
MMC通电后,会以默认方式进入MMC协议模式;如果要转入SPI协议模式,则需要进行相应的协议模式切换;如果要从SPI协议模式转入MMC协议模式,只要切断电源后重新通电,系统即能以默认方式进入。本设计采用SPI通信协议模式。
1.4 MMC的文件系统
MMC的文件格式定义并不包括在系统规范内。为了提高资料的互换性,MMC定义了三种基本的文件系统,其中除了不带分区的DOS-FAT文件系统和类似硬盘带分区的文件系统外,开发者还可以定义自己独特的文件系统。这些定义使得MMC同样具有广泛的操作系统平台(如DOS系统、Windows系统及Linux系统等)支持。
2 MMC的SPI协议
2.1 SPI接口及通信模式
SPI接口是一种通用同步串行接口总线,用来同外部设备进行通信,字长为8位。SPI接口利用CLK、DataIn、 DataOut三线进行数据的读写操作。其中,CLK为时钟信号,由外部控制器提供;DataIn和DataOut为数据输入和输出线。是MMC的片选信号线,在整个SPI操作过程中,必须始终保持低电平有效。
2.2 MMC命令的CRC校验
为了确保数据存储的准确性,MMC在数据处理时均采用CRC校验字。MMC的CRC校验分为CRC7和CRC16两种。CRC7几乎适合于MMC的所有命令(只是应答信号格式为R3的除外),CRC7的算法表达式为:G(x)=x7+x3+1。而CRC16用于数据块传输模式的保护处理,它的算法表达式为:G(x)=x16+x12+x5+1。
2.3 MMC命令的应答信号格式
所有MMC的命令字长度均为6个字节,传输从高位开始,且包含一个CRC校验字。命令字的格式如表2所示。
对于MMC的命令,MMC有多种应答信号格式,且应答信号的传输方向也是从高位开始。在SPI协议模式下,有5种应答信号格式:即R1、R2、R3、Busy和R1b。
通常,MMC接收到每个命令字后,都会发送一个格式为R1的应答信号(卡状态查询命令字CMD13除外),此应答信号为1字节,最高位为0,其他位为错误标志位,如表3所示。
Busy格式应答信号的长度为多个字节。各位均为0时,表示MMC正忙;如果存在非0位,表明MMC已经准备好接收下一个命令。
R2格式应答信号的长度为2个字节,用于答复卡状态查询命令字CMD13,首字节同R1,第2字节表示的是错误类型,如表4所示。
R3格式应答信号的长度为5个字节,用于答复卡内OCR寄存器,R3的首字节同R1,其余4字节为OCR寄存器的内容。
R1b格式应答信号包括两部分:R1格式部分和Busy格式可选附加部分。
3 MMC的命令
MMC的命令字共分为10个命令组,SPI协议模式支持其中的6个命令组,可以实现MMC系统的基本设定、数据块读、数据块写、擦除、写保护和MMC锁定等功能。以堆栈的检查管理命令CIM_CHECK_STACK为例,它是命令组中基本设定命令之一。它主要通过命令SEND_CSD(CMD9)读取MMC的信息,然后与进入系统堆栈表的接口卡的信息进行对比。如果不是上一张卡,再判定是否超时和超出卡的限定数量,从而确定该卡是否已进入系统。堆栈的检查管理命令流程图如图2所示。
4 MMC与嵌入式系统芯片组成的大容量便携式数据采集器的接口
4.1 MMC与嵌入式芯片的硬件接口设计
图3是MMC与嵌入式系统芯片PIC16F73B的硬件接口。图中,FM24CL64为缓存芯片,采用Port C的硬件SPI接口对MMC卡进行读写操作[2][3]。
4.2 MMC与嵌入式芯片的软件接口设计
MMC与嵌入式芯片接口的部分软件流程如图4所示。
在访问MMC存储单元前,需要首先设定访问块的长度,系统默认访问块的长度为512字节,通过写缓存芯片FM24CL64完成。当写入的数据达到512个字节时即转入MMC主存,故读写长度不需要再重新设定。MMC格式化为FAT文件系统结构后,数据以文件的形式保存,这样可方便上位机对MMC主存的读取。以下是嵌入式系统对MMC卡写文件的部分程序代码:
Void file_write(DIR_tag *file_tag,char*){
U16 j.offset=file_tag.StartCluster*2;
Mmc_read_block(&sdc,fat1_addr+offset/512,mmc-buffer);
Mmc_buffer[offset%512]=0xff;
Mmc_buffer[offset%512+1]=0xff;
Mmc_write_block (&sdc,fat1_addr+offset/512,mmc_buffer);
Mmc_write_block (&sdc,fat2_addr+offset/512,mmc_buffer);
For (j=0;j
}
采用嵌入式系统芯片PIC16F73B与MMC搭建信号采集的硬件平台,仅使用很少的外部逻辑电路。整个系统可以采用3.3V单一低电压供电,供电电路非常简单。在系统软件实现上,可以采用交替式双缓存机制,将采集到的数据先存入数据缓冲区(图3中的FM24CL64)中。当数据缓冲区写满时发出溢出中断,再对MMC进行突发式写操作。当写操作完毕后可以发送命令,使MMC立即进入休眠状态,将功耗降至最低。这样在数据采集系统工作的大部分时间内,MMC处于休眠状态,工作电流很低。该系统适于野外(如地质、石油等部门)的数据采集与存储工作,数据文件可以在Windows环境下用读卡器读取,方便了数据的进一步分析和处理,且具有低功耗、携带方便、性能价格比高等特点。
参考文献
[1] Multimedia card product manual rev 5.1[S].SANDISK CORPORATION,2002.
[2] 孙方,颜国正,王文兴.Multimedia Card及其与单片机接口[J].单片机与嵌入式系统应用,2004,(6).
[3] 李学海.PIC单片机实用教程[M].北京:北京航空航天大学出版社,2002.
[4] 张凯,姜熙君,陈 磊等.MMC的文件系统及其实现方法[J].单片机与嵌入式系统应用,2006,(5).