




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、二、MMC/SD卡的模型和工作原理 PIN腳、SD卡總線、SD卡結(jié)構(gòu)、SD卡寄存器、上電過程 SD卡寄存器:OCR:操作電壓寄存器: 只讀,32位 第31位:表示卡上電的狀態(tài)位CID: 卡身份識別寄存器 只讀 128位 生產(chǎn)廠商、產(chǎn)品ID,生產(chǎn)日期和串號等CSD: 部分可寫 128位 卡的容量、擦出扇區(qū)大小、讀寫最大數(shù)據(jù)塊的大小、讀操作的電流、電壓等等CSR: 卡配置寄存器 64位 數(shù)據(jù)位寬RCA: 16位 相關(guān)的卡地址寄存器,卡識別過程中主控器和卡協(xié)商出來的一個地址三、SD卡命令和響應(yīng)格式 命令和相應(yīng)格式 SD卡命令,命令類型,ACMD命令 響應(yīng)類型、卡類型、卡狀態(tài)轉(zhuǎn)換表 命令的格式: 48
2、位 起始位0 方向位(host to card: 1, card to host: 0) 內(nèi)容 CRC7 結(jié)束位1響應(yīng)的格式:48位 或者136位卡命令: 命令的類型:bc: broadcast without Response無響應(yīng)的廣播bcr: broadcast with Response有響應(yīng)的廣播ac: Address(point-to-point) Command:點對點,DATA0DATA3數(shù)據(jù)線上無數(shù)據(jù)adtc: Adress(point-to-point) Data Transfer Commands 點對點,DATA0DATA3數(shù)據(jù)線上有數(shù)據(jù)CMD0, CMD2, CMD3
3、, CMD55, ACMD41 命令可能會導致卡的狀態(tài)發(fā)生變化響應(yīng)類型: R1,R1b, R2, R3,R6(SD2.0擴展了R7)擴展內(nèi)容:SPI工作模式: 要知道的特點:只支持一個卡,沒有RCA,命令只是MMC/SD的基本的子集SDHC:(支持2GB32GB):理解CMD8的作用,命令格式和響應(yīng),了解CSDV2.0寄存器做了擴展 SDIO WIFI: 增加CMD52, CMD53CMD8可以通過重新定義先前保留的位,來擴展一些已經(jīng)存在的命令的新功能。ACMD41擴大到支持高容量SD記憶卡的初始化上面介紹了一個控制寄存器等信息綠色表示sd和mmc的不同點對于計算卡的容量 要注意對于sd 卡
4、可以參考Simplified_Physical_Layer_Spec v2.0.pdf手冊上面有對于mmc 可以參考JESD84-A441.pdf 注意對于大卡的mmc 是通過發(fā)送8號命令 來獲取ext_csd 中的212到215位置來得到的-S-static void sd_init(void)int retries;u8 *resp;unsigned int cardaddr;/resp = mmc_cmd(2, 0, MSC_CMDAT_RESPONSE_R2, MSC_CMDAT_RESPONSE_R2);/serial_puts( SD carsd CID =R2= ); seria
5、l_dump_data(resp, 15);resp = mmc_cmd(3, 0, MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1);cardaddr = (resp4 8) | resp3; /發(fā)生3命令 來或者rcarca = cardaddr 6;/serial_puts(sd2_0=); serial_puts_hex(sd2_0);/serial_puts( SD carsd CSD Register =R2= ); serial_dump_data(resp, 16);OUTREG16(A_MSC_CLKRT(0), 0);resp =
6、mmc_cmd(7, rca, MSC_CMDAT_BUSY | MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1);resp = mmc_cmd(55, rca, MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1);resp = mmc_cmd(6, 0x2, MSC_CMDAT_BUS_WIDTH_4BIT | MSC_CMDAT_RESPONSE_R1|MSC_CMDAT_BUSY, MSC_CMDAT_RESPONSE_R1);/應(yīng)答類型R1b/while(!(INREG16(A_MSC_STAT(0)&(
7、12G)還是標準卡 其實也可以利用cmd9命令讀取cds來判斷 在sd就是這么做的#if 0serial_puts( OCR =R3= ); serial_dump_data(resp, 6);if (resp4& 0x80)serial_puts(nnMMC init oknn);/表示上電完成elseserial_puts(nnMMC init failnn);#endifresp = mmc_cmd(2, 0, MSC_CMDAT_RESPONSE_R2, MSC_CMDAT_RESPONSE_R2); /獲取CID/serial_puts( CID CSD =R2= ); serial
8、_dump_data(resp, 16);resp = mmc_cmd(3, 0x10, MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1);/這個東西就很惡心了 在sd卡和mmc卡的參數(shù)不一樣 mmc卡的參數(shù)是自己設(shè)定一個rca值 ,但是sd卡是通過回復值中讀取rca,上面sd卡的初始化中有描述OUTREG16(A_MSC_CLKRT(0), 1);resp = mmc_cmd(7, 0x10, MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1);/設(shè)置新地址為有效地址 這樣就進入了tarnsport mode
9、.只有發(fā)送了7號命令 還有設(shè)置位寬CMD6 才能發(fā)生正在的進行讀寫發(fā)生16 17 18等resp = mmc_cmd(6, 0x3b70101, MSC_CMDAT_BUS_WIDTH_4BIT|MSC_CMDAT_RESPONSE_R1|MSC_CMDAT_BUSY, MSC_CMDAT_RESPONSE_R1);/應(yīng)答類型R1b,設(shè)置位寬 為4BIT模式resp = mmc_cmd(13, rca, MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1);card_status = (resp4 24) | (resp3 16) | (resp2 8)
10、| resp1;serial_puts(mmc_cmd 13n);if(card_status & 0x900) != 0x900) /ready & tranreturn OPEN_CARD_INIT_CHECK_STATUS_ERROR;/對于mmc卡經(jīng)常要加CMD13,不然經(jīng)常會出現(xiàn)問題的,CMD13在發(fā)生玩cmd3后就可以隨時發(fā)送while(!(INREG16(A_MSC_STAT(0)&(1cmd2 (讀取cid)進入Ident狀態(tài) - CMD3(設(shè)置rca)進入stand state狀態(tài)-cmd7進入transport狀態(tài) 在這里還可以利用CMD6設(shè)置位寬的大小 sd不支持8BIT
11、 mmc支持當卡發(fā)生完CMD3后進入待機狀態(tài)(stand-by state),cmd7可以讓卡進入transport狀態(tài),-SD卡調(diào)試關(guān)鍵點:1. 上電時要延時足夠長的時間給SD卡一個準備過程,在我的程序里是5秒,根據(jù)不同的卡設(shè)置不同的延時時間。SD卡初始化第一步在發(fā)送CMD命令之前,在片選有效的情況下首先要發(fā)送至少74個時鐘,否則將有可能出現(xiàn)SD卡不能初始化的問題。2. SD卡發(fā)送復位命令CMD0后,要發(fā)送版本查詢命令CMD8,返回狀態(tài)一般分兩種,若返回0x01表示此SD卡接受CMD8,也就是說此SD卡支持版本2;若返回0x05則表示此SD卡支持版本1。因為不同版本的SD卡操作要求有不一樣的
12、地方,所以務(wù)必查詢SD卡的版本號,否則也會出現(xiàn)SD卡無法正常工作的問題。3. 理論上要求發(fā)送CMD58獲得SD卡電壓參數(shù),但實際過程中由于事先都知道了SD卡的工作電壓,因此可省略這一步簡化程序。協(xié)議書上也建議盡量不要用這個命令。4. SD卡讀寫超時時間要按照協(xié)議說明書書上的給定值(讀超時:100ms;寫超時:250ms),這個值要在程序中準確計算出來,否則將會出現(xiàn)不能正常讀寫數(shù)據(jù)的問題。我自己定義了一個計算公式:超時時間=(8/clk)*arg。5. 2GB以內(nèi)的SD卡(標準卡)和2GB以上的SD卡(大容量卡)在地址訪問形式上不同,這一點尤其要注意,否則將會出現(xiàn)無法讀寫數(shù)據(jù)的問題。如標準卡在讀
13、寫操作時,對讀或?qū)懨盍钆飘斨械牡刂酚蚍踔?x10,表示對第16個字節(jié)以后的地址單元進行操作(前提是此SD卡支持偏移讀寫操作),而對大容量卡讀或?qū)懨盍钆飘斨械牡刂酚蚍踔?x10時,則表示對第16塊進行讀寫操作,而且大容量卡只支持塊讀寫操作,塊大小固定為512字節(jié),對其進行字節(jié)操作將會出錯。6. 對某一塊要進行寫操作時最好先執(zhí)行擦出命令,這樣寫入的速度就能大大提高。進行擦除操作時不管是標準卡還是大容量卡都按塊操作執(zhí)行,也就是一次擦除至少512字節(jié)。7. 對標準卡進行字節(jié)操作時,起始和終止必須在一個物理扇區(qū)內(nèi),否則將不能進行讀寫操作。實際操作過程中建議用塊操作以提高效率。不管是標準卡還是大容
14、量卡一個讀寫命令只能對一個塊進行操作,不允許跨物理層地址操作。8. 在寫數(shù)據(jù)塊前要先寫入若干個dummy data字節(jié),寫完一個塊數(shù)據(jù)時,主機要監(jiān)測MISO數(shù)據(jù)線,如果從機處于忙狀態(tài)這根數(shù)據(jù)線會保持低電平,這樣主機就可以根據(jù)這根數(shù)據(jù)線的狀態(tài)以決定是否發(fā)送下一個命令,在從機沒有釋放MISO數(shù)據(jù)線之前,主機絕對不能執(zhí)行其他命令,否則將會導致寫入的數(shù)據(jù)出錯,而且從機也不會響應(yīng)主機的命令。9. 在SPI模式下,CRC校驗是被忽略的,但依然要求主從機發(fā)送CRC碼,只是數(shù)值可以是任意值,一般主機的CRC碼通常設(shè)為0x00或0xFF。讀多塊操作和寫多塊操作的傳輸停止形式不一樣,讀多塊操作時用用命令CMD12
15、終止傳輸,而寫多塊操作時用Stop Tran Token(停止傳輸令牌,值為0xFD)終止傳輸。-1、初始化步驟:(1) 延時至少74clock,等待SD卡內(nèi)部操作完成,在MMC協(xié)議中有明確說明。(2)CS低電平選中SD卡。(3)發(fā)送CMD0,需要返回0x01,進入Idle狀態(tài)(4)為了區(qū)別SD卡是2.0還是1.0,或是MMC卡,這里根據(jù)協(xié)議向上兼容的原理,首先發(fā)送只有SD2.0才有的命令CMD8,如果CMD8返回無錯誤,則初步判斷為2.0卡,進一步發(fā)送命令循環(huán)發(fā)送CMD55+ACMD41,直到返回0x00,確定SD2.0卡初始化成功,進入Ready狀態(tài),再發(fā)送CMD58命令來判斷是HCSD還
16、是SCSD,到此SD2.0卡初始化成功。如果CMD8返回錯誤則進一步判斷為1.0卡還是MMC卡,循環(huán)發(fā)送CMD55+ACMD41,返回無錯誤,則為SD1.0卡,到此SD1.0卡初始成功,如果在一定的循環(huán)次數(shù)下,返回為錯誤,則進一步發(fā)送CMD1進行初始化,如果返回無錯誤,則確定為MMC卡,如果在一定的次數(shù)下,返回為錯誤,則不能識別該卡,初始結(jié)束。(5)CS拉高。我們在讀寫的前面可以最好 讀取下狀態(tài)CMD13來檢查狀態(tài)位,判斷上一次的命令是否傳輸完了2、讀步驟:(1) 發(fā)送CMD17(單塊)或CMD18(多塊)讀命令,返回0x00(2) 接收數(shù)據(jù)開始令牌0xfe(或0xfc)+正式數(shù)據(jù)512Byt
17、es + CRC校驗2Bytes默認正式傳輸?shù)臄?shù)據(jù)長度是512Bytes,可用CMD16設(shè)置塊長度。3、寫步驟:(1) 發(fā)送CMD24(單塊)或CMD25(多塊)寫命令,返回0x00(2) 發(fā)送數(shù)據(jù)開始令牌0xfe(或0xfc)+正式數(shù)據(jù)512Bytes + CRC校驗2Bytes4、擦除步驟:(1) 發(fā)送CMD32,跟一個參數(shù)來指定首個要擦除的起始地址(SD手冊上說是塊號)(2) 發(fā)送CMD33,,指定最后的地址(3) 發(fā)送CMD38,擦除指定區(qū)間的內(nèi)容此3步順序不能顛倒。最后說一下我的一點體會:SD卡就是一個存儲器,只不過用命令的方式來進行操作,我們只要掌握了各條命令及操作方式,就可以靈活
18、的操作SD卡了,另外我所了解的IC卡也是類似的原理,還有就是建議開始看MMC的協(xié)議,簡單明了易懂些,有了對MMC卡的一些了解后看SD卡協(xié)議就容易多了。SD卡命令共分為12類,分別為class0到class11,不同的SDd卡,主控根據(jù)其功能,支持不同的命令集 如下Class0 :(卡的識別、初始化等基本命令集)CMD0:復位SD 卡.CMD1:讀OCR寄存器.CMD9:讀CSD寄存器.CMD10:讀CID寄存器.CMD12:停止讀多塊時的數(shù)據(jù)傳輸CMD13:讀 Card_Status 寄存器Class2 (讀卡命令集):CMD16:設(shè)置塊的長度CMD17:讀單塊.CMD18:讀多塊,直至主機發(fā)送CMD12為止 .Class4(寫卡命令集) :CMD24
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中職出納考試題及答案
- 染料類型及應(yīng)用效果試題及答案
- 助理廣告師考試自我提升技巧試題及答案
- 全面探討紡織工程師考試試題及答案
- 企業(yè)電工面試題及答案
- 廣告設(shè)計師考試知識的深度剖析及答案
- 政策調(diào)研面試題及答案
- 關(guān)于鋁合金的試題及答案
- 助理廣告師考試內(nèi)容解析試題及答案
- 婦幼業(yè)務(wù)培訓試題及答案
- 人人講安全個個會應(yīng)急全國防災(zāi)減災(zāi)日主題宣教課件
- 2025-2030半月板植入物行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2024年Adobe設(shè)計師考試網(wǎng)頁設(shè)計重要性試題及答案
- 2025屆深圳市高三二模英語試題(含答案)
- 抗凝劑皮下注射技術(shù)臨床實踐指南(2024版)解讀 2
- 痔瘡中醫(yī)治療
- 2025湄洲灣職業(yè)技術(shù)學院教師招聘考試試題及答案
- 2025年福建省福州市電子信息集團有限公司招聘筆試參考題庫含答案解析
- 2025年五級應(yīng)急救援員資格理論考試題庫(含答案)
- 運輸公司2024年防汛工作方案
- 2025年廣東省深圳市南山實驗教育集團中考一模英語試題(含答案)
評論
0/150
提交評論