STM32之SDIO原理
1 SD的協(xié)議
??1.1??SD卡協(xié)議目前已經(jīng)發(fā)展到了V4.1,可以去SD協(xié)會官網(wǎng)下載.官網(wǎng)的文件N多個,此刻最需要的是 Part1 Physical Layer...這個.其他的文檔作用不妨參考下圖了解一下吧.不過下載的是精簡版,每年交N多美金成為SD協(xié)會的會員才能搞到完整版.
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???SD說明 文檔結(jié)構(gòu)
??1.2??SD卡分類.從容量上分有??標準容量SDSC(<=2G);大容量SDHC(2G到32G);超大容量SDXC(32G到2T),一般卡面上會有HC或XC等字樣.從速度上可以分為class2,class4,calss6,class10(10MHZ/Sec).
? ?? ??這里的協(xié)議適用于標準SD,miniSD和MicroSD.
??1.3??總線協(xié)議
? ?? ???總線上的命令和數(shù)據(jù)都是由一個以0開頭以1結(jié)尾的bit Stream構(gòu)成的.命令是一個操作的開始點,它在CMD line上串行傳輸,由host發(fā)送給SD卡.命令又分為廣播命令和點對點命令;響應(yīng)是由某個目標卡或者總線上的所有卡針對之前收到的命令回復給Host的,響應(yīng)也是在CMD line上傳輸;數(shù)據(jù)通過數(shù)據(jù)線(Dat0-Dat3)傳輸,可以選擇一位數(shù)據(jù)線也可以選擇4位寬的數(shù)據(jù)線,數(shù)據(jù)的傳輸?shù)碾p向的,Host由卡讀數(shù)據(jù)時,數(shù)據(jù)由卡到Host.Host向卡寫數(shù)據(jù)時,數(shù)據(jù)由Host到卡.
? ?? ?? ?? ?? ?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?無響應(yīng)或無數(shù)據(jù)操作
? ?? ???SD卡總線上最基本的傳輸方式就是命令和響應(yīng)方式,host發(fā)命令然后SD卡給予相對應(yīng)的響應(yīng).數(shù)據(jù)是以數(shù)據(jù)塊的方式傳輸?shù)?可以單獨一個塊傳輸也可以多塊傳輸.同樣的數(shù)據(jù)量多塊傳輸要比一個塊一個塊傳輸快,多塊傳輸以CMD line上的停止命令結(jié)束.下面是多塊讀和多塊寫的操作圖示.
? ?? ?? ??一個命令的組成看下圖,由1位起始位,參數(shù),7位CRC,1位結(jié)束位構(gòu)成,共計48bits
? ?? ?? ?響應(yīng)分短響應(yīng)(48bits)和長響應(yīng)(136bits)內(nèi)含參數(shù)和CRC.看圖如下:
? ?? ???命令在CMD line上是MSB在前LSB在后.
? ???數(shù)據(jù)在數(shù)據(jù)線上的傳輸格式分為兩大類,分別是Usual Data(8位)和wide width data(512位) 每大類由分為standard bus 1bit和 wide bus 4bit兩類.看圖
??1.4 引腳功能定義
? ?? ??? ? SD內(nèi)部的寄存器和內(nèi)部結(jié)構(gòu)框圖
? ??
2 SD功能描述
2.1 基本描述
? ???host和SD之間的通訊都是有host控制的,host發(fā)送兩種命令:廣播命令和點對點命令.
? ???SD和host之間有兩種操作模式,識別模式和數(shù)據(jù)傳輸模式.
? ???識別模式:復位后進入識別模式,在識別模式主要是尋找bus上的SD卡,SD卡會一直停留在識別模式直到收到主機給他分配的相對地址RCA(用CMD3實現(xiàn)).
? ???數(shù)據(jù)傳輸模式:收到CMD3就會進入數(shù)據(jù)傳輸模式.
? ?? ?SD卡的狀態(tài)和操作模式之間的對應(yīng)關(guān)系如下圖
? ?? ?? ?
2.2 卡識別模式
? ?? ?在卡識別模式,host復位所有的卡,驗證他們的操作電壓,并向每個卡發(fā)布相對地址, 所有的數(shù)據(jù)通信只在CMD line 進行傳輸.
? ?? ?CMD0 是軟件復位命令.除了卡當前處于在Inactive state外,CMD0都會使SD卡進入Idle state.
? ?? ?SD卡上電后都會處于Idle state,即使卡之前是Inactive state.
? ?? ?SD卡上電或接收到CMD0之后,所有卡的CMD line都處于輸入模式,等待命令的起始位'0',卡初始化用的RCA=0x0000.stm32的引腳配置成什么什么模式參考下圖
? ?? ???
? ?? ?操作電壓的驗證:上電或復位后雙方不知道對方能提供貨能支持的電壓范圍,host發(fā)送一個帶有操作電壓范圍參數(shù)的命令CMD8給SD卡,SD卡通過分析CMD8的參數(shù)檢查操作電壓的合法性,電壓參數(shù)在VHS[3:0]中,這四bits中只能由1bit是'1',如果卡能支持host提供的電壓,則會給予一個響應(yīng).否則不會響應(yīng)并停留在idle state.
? ?? ? 初始化SDHC和SDXC時,發(fā)送第一個ACMD41之前必須發(fā)送CMD8,能夠接受CMD8并給予正確響應(yīng),說明該卡支持Physical layer Version 2.00或Physical layer Version 2.00之后的協(xié)議,并且卡使能一些新的功能.
? ?? ? ACMD41參數(shù)中需設(shè)置HCSbit和OCR[23:0],OCR[23:0]會設(shè)置一個VHS[3:0]指定范圍中的一個具體值.該命令的功能是辨出那些不支持host提供電壓的卡,這些卡脫離總線進入Inactive state.ACMD41是特殊應(yīng)用型命令,發(fā)送特殊應(yīng)用型命令前必須發(fā)送CMD55,CMD55的參數(shù)是RCA=0x000.
? ?? ? 下面是ACMD41命令描述和OCR寄存器描述
? ?? ? SD卡狀態(tài)轉(zhuǎn)移圖(識別模式)
? ?? ?? ??SD卡初始化和識別的處理過程:初始化從ACMD41開始,該命令設(shè)置HCS(host支持的容量標志)和OCR寄存的的23:0bit。HCS=1 表示host支持SDHC或SDXC,HCS=0表示host既不支持SDHC也不支持SDXC.接收到CMD8會擴展ACMD41的功能.不對CMD8響應(yīng)的卡不理睬HCS的值,然而host應(yīng)該HCS=0,如果卡不對CMD8進行響應(yīng),SDHC不在乎HSC的值,但host如果設(shè)置HCS=0,那會SDHC和SDXC類型的卡永遠不會轉(zhuǎn)入到 ready state(busy=0),OCR寄存器中的busy bit用來指示SD卡是否初始化完成,busy=0,初始化仍在進行中;busy=1,初始化已經(jīng)完成.卡初始化應(yīng)該在ACMD41發(fā)出來1秒鐘內(nèi)完成,卡會在ACMD41第一次發(fā)出帶有voltage window的參數(shù)時檢查操作條件和OCR中的HCS位.在重復發(fā)ACMD41的過程中,SD卡不接收其他的命令除了CMD0.
? ?? ? 如果卡回應(yīng)了CMD8,那么對ACMD41的響應(yīng)中包含有CCS(卡容量標志)位,當busy=1時CCS位有效,CCS=0,sd卡為SDSC卡;CCS=1,SD卡為SDHC或SDXC.
? ?? ? Host對總線上的新卡完成相同的初始化的過程,不兼容的卡進入Inactive state.接下來Host發(fā)布CMD2給所有的SD卡,為了獲得他們的唯一卡識別號(Card ID---CID).SD卡響應(yīng)過自己的CID后進入Identification state.接下來Host發(fā)出CMD3,要求各SD卡發(fā)布自己新的RCA(比CID短,用在將來的數(shù)傳輸模式),等到RCA被Host接收的時候,SD卡進入Ready state.之后哦如果host想給卡一個新的RCA,那么就發(fā)送一個CMD3給目標卡,最后一個RCA才是卡的真是RCA.
? ?? ???Host重復識別模式(CMD2--CMD3循環(huán)),完成對系統(tǒng)中每個卡的識別.
? ?? ?? ?? ?下圖是卡初始化和識別過程的流程圖(寫驅(qū)動的重要參考)
? ?? ??? ?關(guān)于ACMD41這個命令:如果在第一次ACMD41命令參數(shù)里的voltage window field(bit23:0)不為0,這時第一個ACMD41就開始初始化,參數(shù)中其余的位有效.接下來重復的ACMD的參數(shù)應(yīng)該跟第一次ACMD41的參數(shù)一樣.
? ?? ? 下圖時ACMD41的參數(shù)格式和他的響應(yīng)R3
? ?? ?? ?上圖中的XPC控制SDXC的功耗,對于32G以下的卡沒有影響,SR18跟UHS-I卡有關(guān),此刻不關(guān)心它.
2.3 數(shù)據(jù)傳輸模式
? ???由于一些卡在識別模式對操作頻率有限制,所以直到CMD3結(jié)束SD卡的頻率應(yīng)在Fod(400K)以下.在數(shù)據(jù)傳輸模式下方可以在Fpp的頻率操作SD卡.Host發(fā)送CMD9命令獲得SD卡的CSD(card special data) 寄存器的內(nèi)容,比如數(shù)據(jù)塊長度,卡容量等等.
? ???host發(fā)送CMD4廣播命令所有已識別卡的driver stages,根據(jù)布線layout和總線上卡的數(shù)量和數(shù)據(jù)傳輸頻率編程SD卡的DSR寄存器.時鐘頻率有Fod到Fpp的轉(zhuǎn)變也是在此時發(fā)生的.CMD4命令對host和SD卡來說都是可選的.
? ?? ?CMD7用來選擇一個特定的目標卡使他進入 transfer state,同一個時間系統(tǒng)內(nèi)只能有一個卡處于transfer state ,選中一個卡后其他卡都回到ready state.帶RCA=0x0000的CMD7命令使系統(tǒng)中的所用SD卡都進入到ready state.
? ?? ?下圖時數(shù)據(jù)傳輸模式 卡狀態(tài)的轉(zhuǎn)移圖
? ?? ?? ??數(shù)據(jù)轉(zhuǎn)移模式下的SD卡狀態(tài)轉(zhuǎn)移關(guān)系總結(jié)如下:
? ?? ? 所有的數(shù)據(jù)讀寫命令均可以被CMD12中斷,寫數(shù)據(jù)是應(yīng)該先中斷寫操作,而后才能執(zhí)行CMD7重新選擇另一個SD卡;寫數(shù)據(jù)過程中,一旦數(shù)據(jù)傳輸結(jié)束SD卡將離開write state轉(zhuǎn)向program state(傳輸成功時)或轉(zhuǎn)向transfer state(傳輸失敗);如果數(shù)據(jù)塊傳輸被停止,那么最后一個數(shù)據(jù)塊是有效的,數(shù)據(jù)將被存儲;SD卡為塊寫操作提供了緩存空間,這就允許當前塊正在編程時下一個塊被發(fā)送至SD卡,但當緩存區(qū)已滿并且SD卡正處于編程狀態(tài),DAT0 line將會保持低電平;寫CSD,寫保護,擦出功能不提供緩存區(qū),這就是說當正在執(zhí)行上述命令時不會接受其他數(shù)據(jù)傳輸命令,DAT0保持低電平;卡正處于program state時參數(shù)設(shè)置命令不允許使用,參數(shù)設(shè)置命令有CMD16(設(shè)置塊小),CMD32(擦出開始地址命令),CMD33(擦出結(jié)束地址命令),讀命令也不被允許在program state中.CMD7后不會立即停止擦出和編程操作;復位命令(CMD0和CMD15)將會停止任何等待和編程操作,這樣操作破換SD卡的數(shù)據(jù)內(nèi)容,host有責任阻止這樣的情況發(fā)生;
2.4??寬總線的選擇
? ?? ?在卡未被LOCK且處于transfer state時用ACMD6選擇寬總線(4bits DAT3--DAT0),復位或上電后
默認1bit寬度(DAT0);
2.5??數(shù)據(jù)塊的讀寫,和擦出就是那幾個命令,查閱文檔可得知,說明一點的是 擦出命令又三條,這三條命令時有先后順序要求的.
2.6??數(shù)據(jù)保護這一部分就不學習了.
2.7??CMD8的補充介紹
? ?? ? CMD8命令的定義為了初始化兼容V2.0版本后的SD卡,CMD8在Idle state有效,他有兩個作用:1電壓檢查;2擴展現(xiàn)有的命令和響應(yīng).CMD8的命令結(jié)構(gòu)如下:
? ?? ? 當卡處于Idle state時,host應(yīng)該在ACMD41之前發(fā)送CMD8,參數(shù)中的check pattern為任意8bit值,卡檢查是否可以在host提供的電壓下運行,可以運行響應(yīng)命令R7,響應(yīng)中的參數(shù)包含跟命令中一樣的VHS和check pattern;卡不支持host提供的電壓不予以響應(yīng)且停留在Idle state.
2.8??SD響應(yīng)格式詳解,命令詳解,狀態(tài)轉(zhuǎn)移,CCCs in SD Mode,Card status和SD status參考文檔
2.9??SD卡上電時間也是由要求的
? ?? ?SD卡從電壓達到VDDmin開始1ms內(nèi)準備好接收第一個命令.
總結(jié)
以上是生活随笔為你收集整理的STM32之SDIO原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RTX移植到STM32F103
- 下一篇: linux修改文件没有备份,归档模式,恢