如今多媒體數(shù)碼產(chǎn)品的迅猛發(fā)展,,其中,,各種音頻視頻等功能的不斷增強(qiáng),使得系統(tǒng)對(duì)于存儲(chǔ)介質(zhì)的性能,,容量,,安全等方面的要求與日俱增。MMC卡和SD卡均是基于flash的存儲(chǔ)設(shè)備,,近年來,,它們以高存儲(chǔ)容量,,快速的數(shù)據(jù)傳輸速率,加上極大的移動(dòng)靈活性和更高的安全性已經(jīng)成為閃存市場的標(biāo)準(zhǔn),,其廣泛應(yīng)用于手機(jī),,MP3,MP4,,掌上電腦等各種產(chǎn)品中,。可見,,其已經(jīng)成為面向便攜式數(shù)碼電子產(chǎn)品的SOC芯片中通用的功能接口,。
文章設(shè)計(jì)的SD/MMC控制器基于一款3G手機(jī)基帶芯片,,其內(nèi)核采用ARM926EJ,,系統(tǒng)總線架構(gòu)為AMBA,,控制器連接到APB總線上,。通過分析SD卡和MMC卡的規(guī)范,,利用Verilog HDL實(shí)現(xiàn)了符合該規(guī)范的SD/MMC卡控制器IP核,,該IP在SMIC的0.13um標(biāo)準(zhǔn)單元工藝庫下對(duì)模型進(jìn)行了綜合和優(yōu)化,。
1 SD/MMC卡控制器工作原理
SD(Secure Digital)卡和MMC(Multi Media Card)卡是市面上常見的兩種數(shù)據(jù)存儲(chǔ)卡,。SD卡向下兼容MMC卡,。
兩者基本特性相同,,只是在數(shù)據(jù)接口以及傳輸模式上有一些區(qū)別:SD卡的數(shù)據(jù)線為4根,而MMC卡只有1根,;SD卡支持安全性保護(hù),;而MMC卡支持比特流傳輸(不限長傳輸,即必須接受到停止命令時(shí)才停止傳輸),。
控制器就是通過SD/MMC總線對(duì)SD/MMC卡進(jìn)行初始化,,讀,寫等一系列操作,。其總線包括時(shí)鐘線CLK,,命令線CMD,數(shù)據(jù)線DAT3-DAT0(MMC卡只有DAT0)等,。上電后,,控制器必須按一定的總線協(xié)議傳輸命令給卡,使其初始化,??偩€上一共有三種數(shù)據(jù)格式:命令包,響應(yīng)包,,數(shù)據(jù)包,。由于在傳輸中數(shù)據(jù)和命令均有可能出錯(cuò),命令帶有7位的CRC校驗(yàn)碼,,數(shù)據(jù)帶有16位的CRC校驗(yàn)碼,。
控制器對(duì)卡進(jìn)行讀操作時(shí),,將接收到的串行數(shù)據(jù)(可能是比特流,也可能是多塊)轉(zhuǎn)換為并行數(shù)據(jù),,存入FIFO,。寫操作也是相同的,控制器將并行數(shù)據(jù)從FIFO里面取出,,串行發(fā)出,。
SD/MMC卡的工作時(shí)鐘來源于控制器,對(duì)卡的命令或數(shù)據(jù)傳輸?shù)纫幌盗胁僮骶c該時(shí)鐘同步,。該時(shí)鐘可以通過控制器進(jìn)行配置,,以適應(yīng)不同工作狀態(tài)中卡正常工作所需的不同時(shí)鐘頻率。需要注意的是,,SD卡的最大工作頻率是25Mhz,,MMC卡的最大工作頻率是20Mhz.
總之,控制器不僅要輸出合適的工作時(shí)鐘,,還要完成對(duì)命令/響應(yīng)以及數(shù)據(jù)讀寫的正常工作,,并針對(duì)命令和數(shù)據(jù)進(jìn)行CRC校驗(yàn),中斷的及時(shí)產(chǎn)生和清除,。
2 控制器設(shè)計(jì)與實(shí)現(xiàn)
2.1 模塊劃分
在整個(gè)SOC中,,我們這片TD基帶芯片采用的是ARM926EJ-S內(nèi)核,系統(tǒng)架構(gòu)為AMBA總線,。在設(shè)計(jì)中,,將SD/MMC卡控制器作為APB的SLAVE掛在APB總線上,ARM通過APB總線來訪問和控制該模塊,。本模塊主要分為接口模塊,,CMD控制模塊及DATA控制模塊三部分。其結(jié)構(gòu)框圖如圖1所示,。
ASIC設(shè)計(jì)" height="283" src="http://files.chinaaet.com/images/20110922/2116f50c-7fd4-48a3-9b04-d8600000b7e2.jpg" width="400" />
圖1 SD/MMC控制器結(jié)構(gòu)
接口模塊實(shí)現(xiàn)與ARM的APB總線相連接,,通過該模塊,ARM可以對(duì)相應(yīng)寄存器進(jìn)行讀寫,,從而實(shí)現(xiàn)對(duì)本模塊和外部存儲(chǔ)卡的控制,。其讀寫時(shí)序按照APB總線讀寫時(shí)序,具體見文獻(xiàn),。
CMD控制模塊主要發(fā)送和接收CMD線上的信號(hào),。控制器發(fā)送給卡的命令長度固定為48bit,,而從卡接收到的響應(yīng)長度不固定,,有短應(yīng)答(48bit)和長應(yīng)答(136bit)之分。
其中,,包含CRC7的子模塊,,不管是命令還是響應(yīng),,均要用到CRC校驗(yàn)。
DATA控制模塊主要是通過RXDATA數(shù)據(jù)線接收數(shù)據(jù),,并通過TXDATA發(fā)送數(shù)據(jù)。主要的數(shù)據(jù)傳輸方式有兩種:比特流數(shù)據(jù)傳輸和多塊數(shù)據(jù)傳輸,,另外,,該控制器還支持無響應(yīng)包數(shù)據(jù)傳輸。為確保傳輸?shù)恼_,,包含了CRC16校驗(yàn)的子模塊,。
2.2 CMD控制模塊的設(shè)計(jì)
由于SD/MMC卡的操作命令不一致,在模塊中并沒有對(duì)命令作譯碼,,而是通過軟件來設(shè)置命令的類型,。單塊(signalblock data)讀數(shù)據(jù)命令(CMD17),寫數(shù)據(jù)命令(CMD24),;多塊(multi-block data)讀數(shù)據(jù)命令(CMD18),,寫數(shù)據(jù)命令(CMD25)等需要控制模塊根據(jù)SD_CMD_INDEX寄存器的內(nèi)容來發(fā)布相應(yīng)的命令,并作不同的狀態(tài)轉(zhuǎn)換,。CMD控制模塊的狀態(tài)轉(zhuǎn)換圖如圖2所示,。
圖2 CMD控制模塊的狀態(tài)轉(zhuǎn)換
2.3 DATA控制模塊的設(shè)計(jì)
本模塊主要功能是向卡發(fā)送數(shù)據(jù)和從卡讀取數(shù)據(jù),另外,,針對(duì)SD卡該模塊可以通過DATA[3]檢測卡是否插入,,通過DATA[2]發(fā)送讀等待信號(hào),通過DATA[1]接收卡送來的中斷信號(hào)以及通過DATA[0]來檢測卡是否處于忙狀態(tài),。
APB總線上還有其他一些功能模塊,,如SPI接口控制器,CAMERA控制器等,,由于不能一直占有總線,,在對(duì)卡進(jìn)行讀寫的同時(shí),來不及處理及時(shí)收到的數(shù)據(jù)或來不及獲取新的發(fā)送數(shù)據(jù),,所以我們采取數(shù)據(jù)緩存,,添加一個(gè)64bytes的FIFO。
控制器對(duì)卡進(jìn)行讀操作時(shí),,需要先發(fā)送CMD9命令,,獲得卡的CSD寄存器數(shù)據(jù),其中包含了卡的數(shù)據(jù)長度,,卡存儲(chǔ)容量,,卡最大時(shí)鐘速度等??刂破骺梢猿掷m(xù)進(jìn)行數(shù)據(jù)讀取,,直到向卡發(fā)送停止傳輸命令,;或者讀取指定個(gè)數(shù)的數(shù)據(jù)塊。
讀數(shù)據(jù)過程中,,如果卡檢測到錯(cuò)誤,,如超出范圍,地址對(duì)齊錯(cuò)誤等,,卡會(huì)停止數(shù)據(jù)發(fā)送,,停在sending-data狀態(tài),控制器需要發(fā)送停止傳輸命令,,此時(shí),,卡會(huì)將錯(cuò)誤信息,通過響應(yīng)返回給控制器,。
控制器可以對(duì)卡持續(xù)進(jìn)行寫數(shù)據(jù)操作,,直到向卡發(fā)送停止傳輸命令;或者指定個(gè)數(shù)的數(shù)據(jù)塊寫完,。寫數(shù)據(jù)過程中,,如果卡檢測到錯(cuò)誤,如寫保護(hù),,地址超出范圍,,地址對(duì)齊錯(cuò)誤等,卡會(huì)停止數(shù)據(jù)的接收,,停在Receiving-data狀態(tài),,控制器需要發(fā)送停止傳輸命令,此時(shí)卡會(huì)將錯(cuò)誤信息,,通過響應(yīng)包返回給控制器,。一個(gè)數(shù)據(jù)塊寫完后,卡需要一段時(shí)間將這塊數(shù)據(jù)寫到內(nèi)部Flash中,,控制器需要查詢卡的狀態(tài),,等卡寫完數(shù)據(jù)后,才能發(fā)送下一個(gè)命令,。
2.4 CRC的算法設(shè)計(jì)
在CMD控制模塊和DATA控制模塊中均用到CRC校驗(yàn),。CMD控制模塊中用的是CRC7,其公式是G(x)=x7+x3+1,。實(shí)現(xiàn)其算法的邏輯圖如圖3,。
圖3 CRC7生成邏輯
在DATA控制模塊中用的是CRC16,其公式是G(x)=x16+x12+x5+1,。算法邏輯圖同CRC7類試,,這里我們不再贅述。
兩種校驗(yàn)本質(zhì)相同,后者精度更高,,適應(yīng)數(shù)據(jù)尤其是長數(shù)據(jù)的傳輸校驗(yàn),。
3 功能驗(yàn)證與綜合
使用Mentor公司的ModelSim軟件進(jìn)行仿真,該軟件許可在PC,、Solaris,、HP-UX或Linux平臺(tái)上使用,支持VHDL或Verilog硬件描述語言(HDL)仿真,。它支持所有器件的行為級(jí)仿真和VHDL或Verilog仿真激勵(lì),。
為了測試設(shè)計(jì)的正確性,編寫了testbench模塊,,其中包括一個(gè)用HDL描述的SD卡的原型(使得控制器能夠?qū)υ摽ㄟM(jìn)行操作),包括產(chǎn)生時(shí)鐘信號(hào),,輸出命令,,讀寫的數(shù)據(jù),產(chǎn)生的中斷等,。下面以測試SDMMC讀寫寄存器,,發(fā)送命令接收響應(yīng),4線塊數(shù)據(jù)(block data)傳輸?shù)葹槔齺碚f明:
當(dāng)滿足片選信號(hào)后,,APB總線對(duì)內(nèi)部寄存器先進(jìn)行配置,,然后確定命令的發(fā)送,并附上CRC7的校驗(yàn)碼,,最后接收響應(yīng)和響應(yīng)的CRC7校驗(yàn)碼,。
對(duì)流傳輸,單塊,,多塊數(shù)據(jù)等所有傳輸方式進(jìn)行完仿真,,利用目前業(yè)界最流行的綜合工具:SYNOPSYS公司的DesignCompiler對(duì)其綜合。經(jīng)過對(duì)Script腳本約束的設(shè)定,,通過DC將控制器的時(shí)序和面積進(jìn)行優(yōu)化,,工作頻率滿足手機(jī)基帶芯片頻率125Mhz(最高可到200以上),面積在3萬門,,比主流的4萬門有所降低,,節(jié)省了面積。
最后采用Xilinx公司的xc4vlx200-10ff1513芯片進(jìn)行FPGA驗(yàn)證,,測試結(jié)果表明該控制器可以對(duì)市面上主流SDMMC卡進(jìn)行數(shù)據(jù)傳輸,,符合整個(gè)SOC的要求。
4 結(jié)語
驗(yàn)證結(jié)束后,,利用中芯國際的0.13um的工藝庫對(duì)上面的設(shè)計(jì)進(jìn)行封裝制造,,就實(shí)現(xiàn)了最新的SD1.0和MMC3.31協(xié)議,并將其嵌入到ASIC中,使得TD終端具有外部擴(kuò)展存儲(chǔ)性,,節(jié)約用戶開銷,。不僅如此,該控制器可作為一個(gè)成熟的IP核,,移植到各種基于多媒體處理的ASIC芯片中去,,其應(yīng)用十分廣泛。
作者創(chuàng)新點(diǎn):該IP核的設(shè)計(jì),,為TD-SCDMA終端基帶芯片以及類似手持SOC提供外接擴(kuò)展存儲(chǔ)卡的功能,,且具有廣泛的可靠移植性用于其他芯片中。