時鐘控制
主機可以使用SD Memory Card總線時鐘信號將卡切換到節能模式或控制總線上的數據流(以避免欠運行或過運行)。主機不允許降低時鐘頻率或關閉時鐘。
例如,在具有512字節數據緩沖區的主機希望將數據傳輸到具有1kbyte寫塊的卡的情況下。因此,為了保持所有數據的連續傳輸,從卡的角度來看,到卡的時鐘應該在第一個512字節之后停止。然后,主機將用另一個512字節填充其內部緩沖區。在主機中寫塊的后半部分準備好后,它將通過重新啟動時鐘電源繼續向卡傳輸數據。這樣,卡就不能識別數據傳輸中的任何中斷。有一些限制是HOST應該考慮的:
總線頻率可隨時更改(受最大數據傳輸頻率和規范文件定義的識別頻率的限制.
上述豁免是ACMD41 (SD_APP_OP_COND)。發出ACMD41命令后,由主機執行以下1)或2)程序,直到卡準備就緒。
1)發出100 KHz-400 KHz頻率范圍內的連續時鐘。如果主機想要停止時鐘,則通過ACMD41命令以小于50 ms的間隔輪詢忙位。

這是一個明顯的要求,時鐘應該運行的卡輸出數據或響應令牌。在最后一次SD存儲卡總線事務之后,要求主機在關閉時鐘之前提供8(eight)個時鐘周期供卡完成操作。以下是各種總線事務的列表:沒有回應的命令。
8個時鐘主機命令結束位之后。帶有響應的命令。
8個時鐘在卡響應結束位之后。讀數據事務。
8個時鐘在最后一個數據塊的結束位之后。寫數據事務。
8人時鐘在CRC狀態令牌之后。允許主機關閉“忙”卡的時鐘。
無論主機時鐘如何,卡都將完成編程操作。但是,主機應該為卡提供一個時鐘邊緣來關閉它的忙音信號。如果沒有時鐘邊緣,卡(除非先前通過取消選擇命令cmd7斷開連接)將永遠迫使DAT線向下。
CRC (Cyclic Redundancy Code)
CRC旨在保護SD存儲卡命令、響應和數據傳輸,防止SD存儲卡總線上的傳輸錯誤。為每個命令生成一個CRC,并檢查CMD行上的每個響應。對于數據塊,每個傳輸的塊生成一個CRC。生成并檢查CRC,如下所述。
CRC7
CRC7檢查用于所有命令、除類型R3之外的所有響應以及CSD和CID寄存器。CRC7是一個7位值,計算方法如下:
第一個位是對應的位串(命令、響應、CID或CSD)的最左邊的位多項式的階n是CRC保護位的個數減少1。命令和響應(n = 39)需要保護的比特數為40,CSD和CID (n = 119)需要保護的比特數為120。

CRC7例子
命令/響應的CRC部分被保留。

CRC16
在使用一條DAT線路的情況下,CRC16用于塊傳輸模式下的有效負載保護。CRC校驗和是一個16位的值,計算方法如下:

第一個位是相應塊的第一個數據位。多項式的度n表示數據塊的位數減少1
(例如,塊長度為512字節時為e.g.n =4095)。發生器多項式G(x)是一個標準的CCITT多項式。代碼的最小距離為d-4,用于負載長度為2048字節(n <= 16383)。在單數據線模式和寬總線模式下應使用相同的CRC16方法在寬總線模式下,CRC16在每條線路上分別完成。

CRC16例子
512字節的0xFF data-->CRC16=0x7FA1
錯誤條件
CRC與非法命令
所有命令都由CRC (cvclic redundancy check)位保護。如果地址卡的CRC檢查失敗,則該卡不響應,命令不執行。卡不改變它的狀態,并且在狀態寄存器中設置了COM CRC ERROR位。同樣,如果接收到非法命令,卡將不改變其狀態,不響應,并在狀態寄存器中設置ILLEGAL_COMMAND錯誤位。狀態圖中只顯示非錯誤狀態分支。下表給出了完整的狀態轉換描述。
非法命令有不同的類型:屬于卡不支持的類的命令(如:只讀卡中的寫入命令)。
當前狀態下不允許的命令(如:CMD2處于傳輸狀態)。
未定義的命令(如:CMD5)。


審核編輯 黃宇
-
存儲
+關注
關注
13文章
4787瀏覽量
90056 -
crc
+關注
關注
0文章
205瀏覽量
30830 -
SD NAND
+關注
關注
0文章
112瀏覽量
1826
發布評論請先 登錄
ESP32 驅動瀚海微SD NAND 完整方案 + FAT/FAT32 驅動核心區別
芯源循環冗余校驗(CRC)功能
瀚海微SD NAND/TF卡數據損壞與校驗錯誤(含CRC錯誤、數據比對失敗)問題解析
瀚海微SD NAND/TF卡數據讀寫超時(Data Transfer Timeout)問題深度解析
解鎖存儲密碼:SD NAND、TF卡、SD卡的應用全景
瀚海微SD NAND/TF卡:賦能全場景數據存儲,定義高效安全新基準
瀚海微SD NAND/TF卡——數據世界的全能搭檔
瀚海微SD NAND存儲功能描述(12)時鐘控制和CRC
評論