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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

相關文章

《【SDIO】SDIO、SD卡、FatFs文件系統相關文章索引》

1. SD卡操作模式

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

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

2. SD卡識別模式

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

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

2.1 SD卡Reset

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

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

2.2 SD卡操作條件的確認

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

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

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

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

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


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

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

OCR中的Busy Bit設置為:

  • 0:表示該SD卡仍處于初始化狀態
  • 1:表示該SD卡初始化已經完成

主機反復發出ACMD41,直到Busy Bit設置為1。SD卡只在第一個ACMD41檢查OCR中的Operational ConditionsHCS位。當重復ACMD41時,主機不得發出除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

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

3. SD卡數據傳輸模式

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

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

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

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


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

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

下面總結各種數據傳輸模式之間的關系:

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

4. 參考資料

SDIO參考的資料如下:

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

總結

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

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