總線傳輸保護
總線上傳輸的每條SD卡命令都受到CRC位的保護。在SPI模式下,SD存儲卡提供了CRC ON模式,使具有可靠數據鏈路的系統能夠排除實現CRC生成和驗證功能所需的硬件或固件。在CRC OFF模式下,命令的CRC位被定義為“不關心”發送端,而被接收端忽略。
缺省情況下,SPI接口初始化為CRC OFF模式。然而,用于將卡切換到SPI模式的RESET命令(CMD0)在SD模式下被卡接收,因此應該有一個有效的CRC字段。
由于CMD0沒有參數,所有字段的內容(包括CRC字段)都是常量,不需要在運行時計算。
有效的復位命令為:Ox40, Ox0, Ox0, Ox0, Ox0, ox95卡進入SPI模式后,將根據CMD59設置對包括CMD0在內的所有命令進行CRC檢查。
主機可以使用CRC_ON_OFF命令(CMD59)打開和關閉CRC選項。
主機應在發出ACMD41之前啟用CRC驗證。始終啟用CMD8 CRC校驗。
主機應在CMD8參數中設置正確的CRC。
如果檢測到CRC錯誤,無論命令索引如何,卡都會在R1響應中返回CRC錯誤。
數據讀取
SPI模式支持單塊讀取和多塊讀取操作(SD Memory Card協議中的CMD17或CMD18)。
在接收到一個有效的讀命令后,卡將用一個響應令牌和一個數據令牌進行響應,參考下圖。
在標準容量卡的情況下,數據令牌中的大小由set BLOCKLEN (CMD16)設置的塊長度決定。
對于SDHC和SDXC卡,無論cmd16設置的塊長度如何,塊長度都固定為512字節。
最大塊長度為512字節,與CSD中定義的READ_BL_LEN無關。
如果在標準容量卡中啟用部分塊訪問(即CSD參數READ BL partial等于1),塊長度可以是1到512字節之間的任何數字。
起始地址可以是卡有效地址范圍內的任意字節地址。但是,每個塊應包含在單個物理卡扇區中。
如果禁用部分塊訪問,則只支持512字節的數據長度。SDHC和SDXC卡只支持512字節的塊長度。起始地址應與塊邊界對齊。
在數據檢索錯誤的情況下,卡將不傳輸任何數據。相反,一個特殊的數據錯誤令牌將被發送到主機。
下圖顯示了一個以錯誤令牌而不是數據塊結束的數據讀取操作。
數據寫入
SPI模式支持單塊和多塊寫命令。在接收到有效的寫命令(SD存儲卡協議中的CMD24或CMD25)后,卡將使用響應令牌進行響應,并等待主機發送數據塊。
CRC后綴、塊長度和起始地址限制(CSD參數WRITE BL PARTIAL控制部分塊寫選項和WRITE_BL_LEN除外)與讀操作相同,參考下圖
每個數據塊都有一個“開始塊”標記的前綴(一個字節)。在接收到數據塊后,卡將使用數據響應令牌進行響應。如果接收到的數據塊沒有錯誤,將對其進行編程。
只要卡在忙編程,所有連續的忙令牌流將被發送到主機(有效地保持低數據輸出線)。
一旦編程操作完成,主機應該使用SEND_STATUS命令(CMD13)檢查編程的結果。一些錯誤(例如地址超出范圍,違反寫保護等)僅在編程期間檢測到。
在數據塊上執行并通過數據響應令牌與主機通信的唯一驗證檢查是CRC和一般寫錯誤指示。
在多塊寫操作中,停止傳輸將通過在下一個塊的開始處發送' stop Tran'令牌而不是'Start Block'令牌來完成。
如果出現寫錯誤指示(在數據響應上),主機將使用SEND_NUM_WR_BLOCKS (ACMD22)來獲取寫好的寫塊的數量。
當卡忙時,重置CS信號不會終止編程過程。卡將釋放數據輸出線(三狀態)并繼續編程。
如果在編程完成之前重新選擇卡,則DataOut線將被強制返回低電平,并且所有命令將被拒絕。
重置存儲卡(使用CMDO用于SD存儲卡)將終止任何掛起的或正在進行的編程。這可能會破壞卡上的數據格式。預防是主機的責任
擦寫保護管理
SPI模式的擦寫保護管理過程與SD模式的擦寫保護管理過程相同。
當卡擦除或更改預定義扇區列表的寫保護位時,它將處于忙狀態并使DataOut線保持低電平。
下圖說明了使用和不使用忙信令的“無數據”總線事務。
審核編輯 黃宇
-
SPI
+關注
關注
17文章
1701瀏覽量
91345 -
總線
+關注
關注
10文章
2869瀏覽量
87995 -
SD NAND
+關注
關注
0文章
81瀏覽量
1219
發布評論請先 登錄
相關推薦
評論