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