1 MMC(多媒体卡)简介
MMC卡(Multimedia Card)是由美国SanDisk公司和德国西门子公司在1997年共同开发研制的一种多功能、体积小巧而容量大的快闪存储卡。1998年1月十四家公司联合成立了MMC协会(Multi-Media Card Association简称MMCA)。MMC卡的发展目标主要是针对移动电话、数码相机、数码摄像机、MP3音乐、PDA、电子书、玩具等产品。MMC卡在一定程度上改善了CF卡读写速度较慢的缺点,并且体积轻巧,抗冲击性强,可反复读写30万次左右。MMC卡4.0标准提供了更宽的数据带宽和更快的传输速率,并支持双电压操作模式。MMC存储卡还具备存储区纠错能力和低功耗特性,如果在5 ms内没有接收到命令控制字,MMC卡会自动转入休眠状态,MMC卡同时还支持热插拔。
MMC存储卡可以分为MMC和SPI两种工作模式,MMC模式是MMC卡的标准默认模式,具有MMC的全部特性。而SPI模式则是MMC存储卡可选的第二种模式,这个模式是MMC协议的一个子集,主要用于只需要小数量的卡和低数据传输率的系统,这个模式可以把设计成本减到最小,但性能不如MMC工作模式。
2 MMC的结构及工作原理
2.1 MMC卡的引脚及功能
MMC卡通常设计为一种低成本的数据平台和通讯介质,目前MMC存储卡的容量可达2 GB。它的接口设计非常简单:MMC卡采用7针的接口(如图1所示),低成本的串行总线时钟频率可达20MHz,MMC的工作电压为2.7 V~3.6 V,写/读电流只有27 mA和23 mA。它的读写模式包括流式、多块和单块。最小的数据传送是以块为单位的,缺省的块大小为512字节。
MMC读写接口机可在MMC和SPI两种通信协议下工作,MMC是MMCA协会开发的高性能三线制通信协议,即图l中的CMD、CLK和DAT三根线,可寻址64 000张MMC卡,单个物理寻址可叠放30张卡,支持顺序读/写、单/多数据块读/写操作,MMC工作模式是MMC卡默认的通信协议。SPI协议作为MMC卡的可选协议,工作效率不及MMC协议,但SPI协议简单易用、兼容性好、便于嵌入式系统连接使用。表1是MMC卡使用SPI协议时的引脚定义。
2.2 MMC卡的内部逻辑结构及功能
MMC卡的内部逻辑结构可分为四部分:MMC/SPI通信协议接口、单芯片控制器、数据闪存模块、控制线和数据线。MMC/SPI接口实现与主控制器的通信;单芯片控制器完成接口协议、数据存储检索、纠错码算法、故障判断处理、电源管理和时钟控制等功能;数据闪存模块可以实现整个存储区空间的单字节访问;控制线和数据线可以实现单芯片控制器与数据闪存模块的访问。
2.3 MMC/SPI通信协议
MMC卡上电后,以默认方式进入MMC协议模式,如果要转入SPI协议模式,还需要进行协议模式切换。如果要从SPI协议模式转入MMC协议模式,则只能切断电源后重新通电,本设计采用SPI通信协议。
2.4 MMC卡的文件系统
MMC卡的文件格式定义并不包括在系统规范内,不过为了提高资料的交换性,还是定义了三种基本的文件系统,其中除了不带分区的DOS-FAT文件系统和类似硬盘带分区的文件系统外,开发者还可以定义自己独特的文件系统。这些定义同样使得MMC卡具有广泛的操作平台(如DOS、Windows系统)支持性。
3 MMC(多媒体卡)的SPI协议
3.1 SPI通信协议模式及接口简介
SPI是一个高速同步串行输入/输出端口或同步串行外围接口,是一种通用同步串行接口总线,字长为8位,主要用于与各种外围器件进行通讯。SPI接口很容易与许多厂家的各种外围器件直接相连,这些外围器件可以是简单的TTL移位寄存器、复杂的LCD显示驱动器或A/D转换子系统。还可应用于嵌入式系统、MCU与外部移位寄存器、D/A转换器、A/D转换器、串行EEPROM、LED显示驱动器等外部设备之间的通信接口扩展。SPI接口有主、从两种工作模式,在多主机系统中,SPI还可用于不同MCU之间的通讯。SPI接口的传送速率可编程,其内部有125个可编程的波特率,接收或发送操作均可通过中断或查询方式来进行。整个工作状态要通过设置其内部的几个控制寄存器来完成,如:
(1)SPICCR:SPI配置控制寄存器。
(2)SPICTL:SPI操作控制寄存器。
(3)SPISTS:SPI状态寄存器。
(4)SPlBRR:SPI波特率寄存器。
(5)SPIRXEMU:SPI仿真缓冲寄存器。
(6)SPIRXBUF:SPI串行输入缓冲寄存器。
(7)SPITXBUF:SPI串行发送缓冲寄存器。
(8)SPIDAT:SPI串行数据寄存器。
(9)SPIPRI:SPI优先级控制。
如图2和表1所示,SPI接口利用CLK、DataIn、DataOut三线进行数据的读写操作,其中,CLK为时钟信号,由外部控制器提供,DataIn和DataOut为数据输入和输出线,CS是MMC卡的片选信号线,在整个SPI操作过程中,CS必须保持低电平有效。
3.2 MMC卡命令的CRC校验
MMC卡在数据处理时为了确保数据存储的准确性,均采用了CRC校验字,MMC卡的CRC校验分为两种:CRC7和CRCl6。CRC7适合于MMC卡的所有命令,只有应答信号格式为R3的除外,它的算法表达式为:G(x)=x7+x3+1。CRCl6用于数据块传输模式的保护处理,它的算法表达式为:G(x)=x16+x12+x5+1 。
3.3 MMC卡的命令及答复信号
所有MMC卡的命令字长度为6个字节,传输从高位开始,且包含一个CRC校验字,命令字的格式如表2所示。
3.3.1 MMC卡的命令
MMC卡的命令字共分为10个命令组,每组由多个命令字组成。SPI协议模式下支持其中的6个命令组,可实现基本设定、数据块读、数据块写、擦除、写保护和MMC卡锁定等功能。以堆栈的检查管理命令CIM_CHECK_STACK为例,它是命令组中的基本设定命令之一,主要是通过命令SEND_CSD(CMD9)来读取MMC卡的信息后,与进入系统中堆栈表的接口卡信息对比,如果不是上一张卡,再判定是否超时和超出卡的数量,从而确定该卡是否已进入系统。堆栈的检查管理命令流程图如图3所示。
3.3.2 MMC卡的应答信号格式
对于MMC卡的命令,MMC卡有多种应答信号格式,其应答信号的传输也是从高位开始,在SPI协议模式下,有5种应答信号格式:即Rl、R2、R3、Busy和Rlb。
接收到每个命令字后,MMC卡都会发送一个格式为R1的应答信号(除卡状态查询命令字CMDl3外),此应答信号为1字节,最高位为O,其他位为错误标志,如表3所示。
Busy格式应答信号的长度为多个字节,各位均为0时,表示卡正忙,如果存在非O位,表明MMC卡已经准备好接受下一个命令。
R2格式应答信号的长度为2个字节,用于答复卡状态查询命令字CMDl3,首字节同R1,第2字节表示的是错误类型,如表4所示。
R3格式应答信号的长度为5个字节,用于答复卡内OCR寄存器,R3的首字节同Rl,其余4字节为OCR寄存器的内容。
Rlb格式应答信号包括两部分,Rl格式部分和Busy格式可选附加部分。
4 MMC与嵌入式系统的接口
4.1 硬件设计
图2是MMC卡与嵌入式系统芯片的硬件接口,图中可增加一个片外存储器作缓存芯片,采用Port C的硬件SPI接口对MMC卡进行读写操作,对MMC卡的文件系统进行读写操作可参阅参考文献[4]。
4.2 软件设计
访问MMC卡存储单元前,需要设定访问块的长度,默认的长度为512个字节,系统通过写缓存储芯片,当写入的数据达到512个字节后即转入主存MMC,故读写长度不再设定。MMC格式化为FAT文件系统的结构后,数据以文件的形式保存,这样方便上位机对主存MMC的读取。
MMC接口的部分软件设计流程如图4所示。
SPI模式支持单数据块和多数据块的写命令,以下的程序为单数据块写子程序的部分代码:
5 结束语
和CompactFlash一样,MMC也是把存储单元和控制器一同做到了卡上,智能的控制器使得MMC保证了较好的兼容性和灵活性。实际上所有的MMC是向上兼容的,而且能保证与以后出现的新规格的产品兼容。Sanyo和Fujitsu联合推出了Secure MMC,这种新的MMC采用了Hitachi的SuperHRISC微处理器内核,能高速执行与安全相关的操作(如加密解密等),具有很强的版权保护功能,Secure MMC也是向上兼容的,可以插入MMC插槽中使用,这种卡配合应用Hitachi、Sanyo和Fujitsu开发的UDAC-MB(universal distribution with accesscontrol-media base)版权保护技术,可以用于提供基于移动电话的音乐发行服务,且具有低功耗、携带方便、性能价格比高等特点。