日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【SDIO】SD2.0协议分析总结(二)-- SD卡识别数据传输过程

發(fā)布時間:2024/3/26 编程问答 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SDIO】SD2.0协议分析总结(二)-- SD卡识别数据传输过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

相關文章

《【SDIO】SDIO、SD卡、FatFs文件系統(tǒng)相關文章索引》

1. SD卡操作模式

SD 卡系統(tǒng)(包括主機和 SD卡)定義了種操作模式:卡識別模式數(shù)據(jù)傳輸模式。在系統(tǒng)復位后,主機處于卡識別模式,尋找總線上可用的 SDIO 設備;同時,SD 卡也處于卡識別模式,直到被主機識別到,即當 SD卡接收到 SEND_RCA(CMD3)命令后,SD卡就會進入數(shù)據(jù)傳輸模式,而主機在總線上所有卡被識別后也進入數(shù)據(jù)傳輸模式。在每個操作模式下,SD卡都有幾種狀態(tài),如下圖所示,通過命令控制實現(xiàn)卡狀態(tài)的切換。

操作模式SD 卡狀態(tài)
無效模式(Inactive) 無效狀態(tài)(Inactive State)
卡識別模式(Card identification mode) 空閑狀態(tài)(Idle State)
準備狀態(tài)(Ready State)
識別狀態(tài)(Identification State)
數(shù)據(jù)傳輸模式(Data transfer mode) 待機狀態(tài)(Stand-by State)
傳輸狀態(tài)(Transfer State)
發(fā)送數(shù)據(jù)狀態(tài)(Sending-data State)
接收數(shù)據(jù)狀態(tài)(Receive-data State)
編程狀態(tài)(Programming State)
斷開連接狀態(tài)(Disconnect State)

2. SD卡識別模式

當處于卡識別模式時,主機將所有處于卡識別模式的卡重置,驗證操作電壓范圍,識別卡并詢問它們發(fā)布的Relative Card Address(RCA)。這個操作是在每個卡各自的CMD命令行上分別執(zhí)行。在卡識別模式下,所有數(shù)據(jù)通信都只使用CMD命令行。

在SD卡的識別過程中,SD時鐘頻率在100KHz ~ 400KHz范圍內工作。

2.1 SD卡Reset

命令GO_IDLE_STATE (CMD0)是軟件復位命令,無論當前卡處于什么狀態(tài),它將每個卡都設置為 Idle狀態(tài)。處于Inactive 狀態(tài)的卡不受此命令影響。主機上電后,所有卡都處于 Idle狀態(tài),包括之前處于Inactive 狀態(tài)的卡。

上電或CMD0后,所有卡的CMD數(shù)據(jù)線都處于輸入模式,等待接收下一條命令。這些卡被初始化為一個默認的SD卡相對地址(RCA=0x0000),并設置SD卡驅動級寄存器(DSR)默認為最低的速度和最高的驅動能力。

2.2 SD卡操作條件的確認

在主機和SD卡開始通信時,主機可能不知道SD卡支持的電壓,SD卡也可能不知道它是否支持當前提供的電壓。主機發(fā)出一個復位命令(CMD0),同時假定它電壓可能被SD卡支持。為了驗證電壓,在《 Physical Layer Specification Version 2.00》文檔中定義了以下新命令(CMD8)。

SEND_IF_COND (CMD8)用于驗證SD卡接口操作條件。SD卡通過分析CMD8的參數(shù)來檢測操作條件的有效性,主機通過分析CMD8的響應來檢測操作條件的有效性。提供的電壓通過命令CMD8的參數(shù)VHS域來指定。SD卡以VHS中指定的電壓作為當前提供的電壓。通過CRC和Check Pattern(‘10101010b’)來檢測主機與SD卡之間通信的有效性。

  • 如果SD卡支持在提供的電壓上操作,在響應命令的參數(shù)中會包含提供的電壓Check Pattern(‘10101010b’)
  • 如果SD卡不支持在提供的電壓下工作,它沒有任何響應返回并保持在Idle狀態(tài)。為初始化大容量SD存儲卡,必須在第一個ACMD41之前發(fā)出CMD8(如下圖4 - 1)。接收CMD8能被SD卡識別到,需要主機支持《 Physical Layer Specification Version 2.00》和SD卡支持該新功能。

SD_SEND_OP_COND (ACMD41)被設計為為主機提供一種機制來識別拒絕與主機所提供的VDD范圍不匹配的卡。不能在指定范圍內進行數(shù)據(jù)傳輸?shù)腟D卡,應放棄總線操作,進入Inactive 狀態(tài)。OCR寄存器定義了相關的電壓等級。

注意:ACMD41是特定應用程序的命令,因此APP_CMD (CMD55)應該始終在ACMD41之前被發(fā)送。在idle_state中用于CMD55的RCA將是SD卡的默認值(RCA = 0 x0000)。


通過在命令ACMD41的參數(shù)中將OCR設置為0,主機可以查詢每個卡并確定公共電壓范圍,然后再將超出范圍的卡發(fā)送到 Inactive 狀態(tài)。ACMD41只是作為查詢發(fā)出,SD卡不會開始初始化。之后,主機可以選擇一個工作電壓,并在這種情況下重新發(fā)出ACMD41,將不兼容的卡發(fā)送到 Inactive 狀態(tài)。在初始化過程中,主機不允許改變工作電壓范圍。

2.3 SD卡初始化和識別過程

總線被激活后,主機開始SD卡的初始化和識別過程(參考下圖4-2)。初始化過程從SD_SEND_OP_COND(ACMD41)開始,通過設置操作條件和OCR(Operation Conditions Register)中的HCS(Host Capacity Support)位。

HCS(Host Capacity Support)位設置為 :

  • 1: 表示主機支持大容量SD存儲卡。
  • 0: 表示主機支持大容量SD存儲卡。

使用命令CMD8擴展了ACMD41的功能; 發(fā)送命令ACMD41時會帶有參數(shù)HCS,ACMD41對應的響應為R3(OCR register),包含:VDD電壓范圍、SD卡容量狀態(tài)CCS(Card Capacity Status)。如果SD卡沒有相應CMD8,那么ACMD41參數(shù)HCS會被SD卡忽略。但是,如果卡沒有返回對CMD8的響應,主機應該將HCS設置為0 。標準容量的SD卡將忽略HCS。如果HCS設置為0,則大容量SD卡永遠不會返回就緒狀態(tài)(保持Busy Bit為0)。OCR中的Busy Bit被SD卡用來告知主機ACMD41的初始化是否完成。

OCR中的Busy Bit設置為:

  • 0:表示該SD卡仍處于初始化狀態(tài)。
  • 1:表示該SD卡初始化已經(jīng)完成

主機反復發(fā)出ACMD41,直到Busy Bit設置為1。SD卡只在第一個ACMD41檢查OCR中的Operational ConditionsHCS位。當重復ACMD41時,主機不得發(fā)出除CMD0以外的其他命令。

當卡響應CMD8時,ACMD41的響應中包含CCS字段信息。當SD卡返回Ready(Busy Bit設置為1)時,CCS生效。

CCS(Card Capacity Status)設置為:

  • 0: 表示該卡為 Standard Capacity SD Memory Card
  • 1: 表示該卡為 High Capacity SD Memory Card

主機對系統(tǒng)中的所有新卡執(zhí)行相同的初始化順序,不兼容的卡將被發(fā)送到 Inactive 狀態(tài)。然后主機向每個卡發(fā)出命令ALL_SEND_CID (CMD2),以獲得其唯一的卡標識(CID)號。未識別的卡(即處于就緒狀態(tài)的卡)發(fā)送其CID號作為響應(在CMD線上)。在卡發(fā)送CID后,它進入識別狀態(tài)。然后,主機發(fā)出CMD3 (SEND_RELATIVE_ADDR)請求卡發(fā)布一個新的相對卡地址(RCA),它比CID短,在未來的數(shù)據(jù)傳輸模式中用于給卡尋址。一旦接收到RCA,SD卡狀態(tài)就會變?yōu)?strong>待機狀態(tài)。此時,如果主機希望分配另一個RCA號碼,它可以通過向卡發(fā)送另一個CMD3命令來要求卡發(fā)布一個新號碼。最后發(fā)布的RCA是SD卡的實際RCA號。

3. SD卡數(shù)據(jù)傳輸模式

在SD卡識別模式結束之前,主機應保持在 fOD (400kHz)頻率,因為在SD卡識別模式期間,有些SD卡可能有操作頻率限制。在數(shù)據(jù)傳輸模式下,主機可以在 fPP (25MHz)頻率范圍內對卡進行操作。主機發(fā)出SEND_CSD(CMD9)以獲取與SD卡有關的數(shù)據(jù)(CSD寄存器),例如塊長度、卡的儲存容量等。

廣播命令SET_DSR (CMD4)配置所有識別卡的 Driver Stage Register。它根據(jù)應用總線的布局(長度)總線上卡的數(shù)量數(shù)據(jù)傳輸頻率來編程DSR寄存器。時鐘速率也從 fOD 切換到 fPP。SET_DSR命令是SD卡和主機的一個選項(非必須)。

CMD7用于選擇一張SD卡并將其置于傳輸狀態(tài),在同一時刻只能有一張卡處于傳輸狀態(tài)。如果先前選擇的卡處于傳輸狀態(tài),它與主機的連接將被釋放,它將返回到 Stand-by 狀態(tài)。當CMD7以保留的相對卡片地址“0x0000”發(fā)出時,所有卡片都被退回到 Stand-by 狀態(tài)。

注意:主機預留 RCA = 0x0000 用于退出選擇。


這可以在識別新卡之前使用,而不用重置其他已經(jīng)注冊的卡。處于此狀態(tài)的SD卡已經(jīng)有一個RCA后,將不響應識別命令(例如:ACMD41, CMD2)。

注意:如果確認的SD卡獲取到CMD7不匹配的RCA后,該卡將取消選擇。

下面總結各種數(shù)據(jù)傳輸模式之間的關系:

  • 所有數(shù)據(jù)讀取命令都可以在任何時候通過停止命令(CMD12)中止。數(shù)據(jù)傳輸將終止,SD卡將返回到 Transfer 狀態(tài)。讀命令包括:塊讀(CMD17)、多塊讀(CMD18)、發(fā)送寫保護(CMD30)、發(fā)送scr (ACMD51)和讀模式的通用命令(CMD56)。
  • 所有數(shù)據(jù)寫命令都可以在任何時候通過停止命令(CMD12)中止。在CMD7取消對卡的選擇之前,應該停止寫命令。寫入命令包括:塊寫入(CMD24和CMD25),程序CSD(CMD27),鎖定/解鎖命令(CMD42)和寫入模式下的常規(guī)命令(CMD56)。
  • 一旦數(shù)據(jù)傳輸完成,SD卡將退出數(shù)據(jù)寫入狀態(tài),并移動到 Programming 狀態(tài)(傳輸成功) 或 Transfer 狀態(tài)(傳輸失敗)。
  • 如果一個塊寫操作被停止,并且最后一個塊的塊長度和CRC是有效的,數(shù)據(jù)將被編程。
  • SD卡可以為塊寫入提供緩沖。這意味著在前一個塊被編程時,下一個塊可以被發(fā)送到SD卡。如果所有寫緩沖區(qū)都滿了,只要SD卡處于 Programming 狀態(tài)(見SD卡狀態(tài)圖圖4-3),DAT0線就會保持低(BUSY)
  • 寫CSD、寫保護和擦除沒有緩沖選項。這意味著當SD卡忙著處理這些命令中的任何一條時,其他的數(shù)據(jù)傳輸命令將不會被接受。只要卡忙且處于 Programming 狀態(tài),DAT0線就會保持低電平。
  • 當卡在編程時,參數(shù)設置命令是不允許的。參數(shù)設置命令包括:設置塊長度(CMD16),擦除塊開始(CMD32)和擦除塊結束(CMD33)。
  • 當卡在編程時不允許讀命令。
  • 將另一張卡從 Stand-by 狀態(tài)轉移到 Transfer 狀態(tài)(使用CMD7)不會終止擦除和編程操作??▽⑶袚Q到 Disconnect 狀態(tài),將釋放DAT線。
  • Disconnect 狀態(tài)下,可以使用CMD7重新選擇卡。在這種情況下,卡將轉移到 Programming 狀態(tài)并重新激活占線指示。
  • 重置SD卡(使用CMD0或CMD15)將終止任何掛起的或正在進行的編程操作。這可能會破壞卡上的數(shù)據(jù)內容。防止這種情況發(fā)生是主機的責任。
  • CMD34-37、CMD50、CMD57預留用于SD命令系統(tǒng)擴容。這些命令的狀態(tài)轉換在每個命令系統(tǒng)規(guī)范中都有定義。

4. 參考資料

SDIO參考的資料如下:

下載地址如下:
https://download.csdn.net/download/ZHONGCAI0901/14975835

總結

以上是生活随笔為你收集整理的【SDIO】SD2.0协议分析总结(二)-- SD卡识别数据传输过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。