摘要:MultiMediaCard是Sandisc公司推出的大容量串行Flash存儲卡,,外形尺寸為32mm×24mm×1.4mm,質量小于2g,7針引腳,,便于開發(fā)設計小型的移動數(shù)碼設備,。本文重點介紹此類存儲器與PIC單片機的接口,給出實際的電路設計和軟件代碼示例,。
1 概述
Sandisc公司推出的大大容量串行Flash存儲器產(chǎn)品——MultiMediaCard(MMC),,通常叫作多媒體卡。它的體積比SmartMedia還要小,,不怕沖擊,,可反復讀寫記錄30萬次,驅動電壓2.7~3.6V,可變時鐘頻率范圍為0~20MHz,,目前常見的容量為64MB/128MB,。ATP Electrionics公司已經(jīng)率先推出了1GB的高容量MMC。除了體積小,、壽命長、容量大等特性外,,還具備存儲區(qū)糾錯能力,;低功耗;5ms內(nèi)沒有接收到命令字后,,自動轉入休眠狀態(tài),;支持熱插拔等優(yōu)點。MMC可以格式化為FAT文件系統(tǒng),,便于上位機讀寫,。
2 MMC簡介
2.1 引腳排列及功能
根據(jù)存儲容量的不同,MMC有SMDB和SDMJ兩種構成技術,。SMDB即二進制NAND技術(Binary NAND),,16MB和32MB容量的MMC卡采用此技術。目前常用的64MB和128MB的MMC采用SDMJ,,即MLC(Multi Level Cell)NAND技術,。各容量的MMC卡,其外形尺寸及引腳排列相同,,如圖1所示,。
MMC讀寫接口可以在MMC和SPI兩種通信 協(xié)議下工作,。MMC是由MMCA協(xié)會開發(fā)的高性能三線制通信協(xié)議,即CMD,、CLK,、DAT線,最大可尋址64000張MMC卡,,單個物理地址可疊放30張卡,,支持順序讀寫及單/多數(shù)據(jù)塊讀寫操作,是MMC卡默認的通信協(xié)議,。SPI協(xié)議為可選協(xié)議,,工作效率不及MMC協(xié)議;但SPI協(xié)議簡單易用,,兼容性好,,便于和單片機連接使用。本設計采用SPI通信協(xié)議,,下文將詳細介紹,。
2.2 內(nèi)部邏輯結構
MMC卡的內(nèi)部邏輯結構可分為四部分:MMC/SPI接口、單芯片控制器,、數(shù)據(jù)閃存模塊,、控制線和數(shù)據(jù)線。MMC/SPI接口實現(xiàn)與主控制器的通信,。單芯片控制器完成接口協(xié)議,、數(shù)據(jù)存儲檢索、糾錯碼算法,、故障診斷處理,、電源管理和時鐘控制功能。數(shù)據(jù)內(nèi)存模塊可以實現(xiàn)整個存儲空間內(nèi)的單字節(jié)訪剩??皇羌虻サ淖終罅校??潛環(huán)殖閃碩嘀紙峁埂?12個字節(jié)構成1個扇區(qū)(sector),。根據(jù)MMC卡容量的不同,,16或32個扇區(qū)構成1個擦除族(erase group)。32個擦除族構成1個寫保護族(write protect group),。此設計使MMC操作靈活,,使用方便??刂凭€和數(shù)據(jù)線實現(xiàn)數(shù)據(jù)存儲區(qū)的訪問,,其內(nèi)部邏輯結構如圖2所示。
3 MMC/SPI通信協(xié)議
MMC卡上電后,,默認進入MMC模式,。如果轉入SPI模式下工作,需進行模式切換,。SPI模式設定流程如圖3所示,。
如需從SPI模式轉入MMC模式,,只能切斷電源,重新上電,,進入默認MMC模式,。從實際應用角度出發(fā),SPI模式設計簡單,,操作方便,,但數(shù)據(jù)傳輸速率遜于MMC模式?;谠O計要求,,筆者采用了SPI通信協(xié)議。
4 存儲器讀寫接口
4.1 SPI接口及操作模式
SPI接口是一種通用同步串行接口總線,,字長為8位,,用來與外部設備進行通信。SPI接口利用CLK,、DataIn和DataOut三根線進行數(shù)據(jù)的讀寫,。其中,CLK為時鐘信號,,有外部控制器提供,;Datain和DataOut為數(shù)據(jù)輸入和輸出線。CS是MMC片選信號線,,在整個SPI操作過程中,,必須保持低電平有效信號。
SPI接口共有四種操作模式,,分別為0,、1、2和3,。SPI操作模式?jīng)Q定了設備接收和發(fā)送數(shù)據(jù)時的時鐘相位和極性,即決定了時鐘信號的上升和下降沿與數(shù)據(jù)流動方向之間的關系,,如圖4所示,。本設計采用模式3。
4.2 MMC卡命令及答復信號
所有MMC卡命令字長度均為6個字節(jié),,傳輸從高位開始,,且包含一個CRC校驗字。
命令字索引采用二進制編碼,。比如CMD0的索引位是000000,,CMD39的索引位是100111。MMC卡命令字分為10個命令組,,每組由多個命令字組成,,完成MMC卡功能設定,。SPI模式下的Sandisc MMC卡支持其中的6個命令組,可實現(xiàn)基本設定,、數(shù)據(jù)塊讀,、數(shù)據(jù)塊寫、擦除,、寫保護,、MMC卡鎖定功能。
MMC卡有多種應答信號格式,,傳輸從高位開始,。SPI模式下,存在5種應答信號格式,,分別為R1,、R2、R3,、Busy,、R1b。
接收到每個命令后,,MMC卡都發(fā)送一個格式為R1的應答信號,,卡狀態(tài)查詢命令字CMD13除外。此應答信號占1字節(jié),,最高位為0,,低7位為錯誤標志。若某位為1,,表示存在相應錯誤,。
Busy應答信號長度為多個字節(jié)。各位都為0,,表示卡正忙,。存在非零位表明卡已經(jīng)準備好接收下一命令。
R2格式應答信號長度為2字節(jié),,用于答復卡狀態(tài)查詢命令字CMD13,。首字節(jié)格式同R1,第2個字節(jié)表示的錯誤類型,。
R3格式應答信號長度為5字節(jié),,答復卡內(nèi)OCR豁口讀命令CMD58。首字節(jié)格式同R1,,其余4字節(jié)為OCR豁口內(nèi)容,。
R1b格式應答信號包括兩部分,R1格式部分和Busy格式可選附加部分,。
4.3 MMC在SPI模式下的傳輸時序
MMC在SPI協(xié)議下讀寫時序如圖5所示,。主控制器發(fā)送讀/寫命令,,當收到OUT傳輸互上正確的應答信號后,OUT/IN傳輸線開始讀/寫操作,。
5 MMC卡與單片機接口實例
5.1 硬件電路設計
圖6為筆者采用Sandisc公司容量為32MB的MMC卡設計的便攜式數(shù)據(jù)采集系統(tǒng)的一部分,。單片機采用美國Microchip公司推出的PIC16F73B。單片機的工作頻率為4MHZ,,采用Port C的硬件SPI接口進行MMC卡的讀寫操作,。
5.2 軟件設計
訪問MMC卡存儲單元前,需要設定訪問塊長度,。默認長度為512字節(jié),。本設計是通過寫緩存芯片F(xiàn)M24CL64,達到512字節(jié)后轉入主存MMC的(硬件電路圖應作相應的修改),,所以讀寫長度不再設定,。MMC格式化為FAT文件系統(tǒng)的結構后,數(shù)據(jù)以文件的形式為上位機所讀取,。
MMC接口部分軟件設計流程如圖7所示,。
5.3 MMC卡SPI初始化與寫子程序
因為MMC可以在兩種協(xié)議下工作,且默認為MMC操作模式,,所以必須經(jīng)過初始化才能在SPI模式下工作,。初始化和寫子程序代碼見www.dpj.com.cn。