嵌入式系统由于本身存储容量的限制,急需扩展外存,多媒体卡(MMC)就是解决外存扩展的一个很好的方案。
多媒体卡在多媒体领域广泛用作外部存储介质,但是大多数微处理器(MCU)并没有专门的多媒体卡控制器,多媒体卡的串行外设模式给了不具有多媒体卡控制器而需要读写多媒体卡的微处理器另一种选择,串行外设接口协议是广泛支持的总线协议,它通过串行外设接口总线与多媒体卡相连。本文介绍了MMC卡的工作原理和多媒体卡的串行外设接口协议(SPI)模式,给出了微处理器与MMC卡的接口电路、程序流程图及部分程序代码。
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)版权保护技术,可以用于提供基于移动电话的音乐发行服务,且具有低功耗、携带方便、性能价格比高等特点。 |