寬總線選擇/取消
選擇寬總線(4位總線寬度)操作模式可以使用AcMD6選擇/取消選擇。默認總線上電或GO IDLE (CMDO)后的寬度為1位總線寬度。
要改變母線寬度需要滿足兩個條件:
a)卡處于“傳輸狀態”。
b)卡未鎖定被鎖定的卡將響應ACMD6為非法命令。
2GB卡
要制作2GByte卡,最大塊長度(READ BL LEN- write BL LEN)應設置為1024字節。但是,CMD16設置的塊長度最多為512字節,以保持與512字節最大塊長度卡(小于等于2GByte卡)的一致性。
數據讀取
當沒有數據傳輸時,通過上拉使數據總線電平高。傳輸的數據塊由起始位(低1位或低4位)和連續數據流組成。數據流包含有效載荷數據(如果使用off-card ECC is used,則包含糾錯位)。數據流以endl位結束(1位或4位HIGH).
數據傳輸與時鐘信號同步。面向塊的數據傳輸的有效載荷由1位或4位CRC校驗和保護。關閉電源可能會中斷SD存儲卡的讀取操作。SDl存儲卡確保在主機發出的除寫或擦除操作外的所有情況下,即使在突然關閉或刪除的情況下,數據也不會被破壞。如果發生BLOCK_LEN_ERROR或ADDRESS ERROR,并且沒有進行數據傳輸,則拒絕讀取命令。
塊讀取
塊讀取是面向塊的數據傳輸。數據傳輸的基本單位是一個塊,其最大大小始終為512字節。較小的塊,其起始和結束地址完全包含在512字節邊界內,可以傳輸。
CMD16設置的塊長度可以設置為512字節,與READ_BL_LEN無關。CRC被附加到每個塊的末尾,以確保數據傳輸的完整性。CMD17 (READ_SINGLE_BLOCK)發起一個塊讀取,完成傳輸后,卡返回到傳輸狀態。CMD18 (READ_MULTIPLE_BLOCK)啟動幾個連續塊的傳輸。塊將持續傳輸,直到發出停止傳輸命令(CMD12)。l由于串行命令傳輸,stop命令有執行延遲。數據傳輸在stop命令結束位之后停止。
當使用CMD18讀取用戶區的最后一塊時,即使順序正確,主機也應該忽略可能發生的OUT_OF_RANGE錯誤。
如果主機使用的部分塊的累積長度不是塊對齊的,并且不允許塊錯位,卡應該在第一個錯位塊的開始處檢測到塊錯位,在狀態寄存器中設置ADDRESS_ERROR錯誤位,中止傳輸,并在Data State中等待停止命令。
下方圖格定義了當局部塊訪問被啟用時的卡片行為。
如果不對齊的塊是命令的第一個數據塊(即在對命令的實際響應中報告了i.e.ADDRESS_ERROR),則不傳輸數據,卡保持在TRAN狀態。
*1:“當前塊欄”大小由CMD16設置或更改。如果value小于或等于512字節(與Misalign和Partial選項沒有關系),則設置無錯誤。
*2:當Blocklen大小數據范圍超過512字節的塊邊界時,卡片輸出數據直到512字節的塊邊界,此時數據無效,也可能出現CRC錯誤。卡將在下一個命令響應中發送“ADDRESS_ERROR”。主機應該發出CMD12來恢復。
數據寫入
數據傳輸格式與數據讀取格式類似。對于面向塊的寫數據傳輸,CRC校驗位被添加到每個數據塊中。在寫操作之前,卡對每個接收到的數據塊執行1位或4位CRC奇偶校驗。通過這種機制,可以防止寫入錯誤傳輸的數據。如果發生BLOCK_LEN_ERROR或ADDRESS_ERROR,并且沒有進行數據傳輸,則拒絕寫命令。
塊的寫入
在塊寫入(CMD24 - 27,42,56 (w))期間,一個或多個數據塊從主機傳輸到卡,主機在每個塊的末尾附加1或4位CRC。無論WRITE_BL_LEN設置為1k還是2k字節,支持塊寫的卡都要求CMD16設置的block Length為512字節。下方表格定義了當部分塊訪問被禁用(WRITE_BL_PARTIAL = 0)時卡的行為。
*1:“當前塊欄”大小由CMD16設置或更改。如果value小于512字節(與Misalign和Partial選項沒有關系),則設置無錯誤。然后在寫命令執行時測試“當前Blocklen”大小。
*2:如果當前的Blocklen不是這個值,卡在寫命令響應上指示“BLOcK_LEN_ERROR”。
*3:如果起始地址不是這個值,卡將在寫命令響應中發送“ADDRESS_ERROR”。
如果允許WRITE_BL_PARTIAL(=1),那么也可以使用更小的塊,最高分辨率為一個字節。如果CRC失敗,卡應在DAT線上指示失敗€;傳輸的數據將被丟棄而不被寫入,所有進一步傳輸的塊(在多個塊中)將被寫入模式)將被忽略。
為了提高寫操作的速度,建議使用多個塊寫命令,而不是連續的單個寫命令。如果主機使用的部分塊的累計長度沒有塊對齊,并且不允許塊錯位(CSD參數WRITE_BLK_MISALIGN未設置),則卡應在第一個錯位塊開始之前檢測到塊錯位錯誤并中止編程。
卡應該在狀態寄存器中設置ADDRESS_ERROR錯誤位,同時忽略所有進一步的數據傳輸,在Receive-data-State中等待停止命令。
注意,第一個數據塊對于寫命令是不對齊的(即在寫命令的實際響應中報告i.e.ADDRESS_ERROR),卡保持在tran狀態,沒有數據被編程。如果主機試圖在寫保護區域上寫,寫操作也會被終止。然而,在這種情況下,卡應該設置WP_VIOLATION位。
CSD寄存器的編程不需要先前的塊長度設置。傳輸的數據也受CRC保護。如果CSD寄存器的一部分存儲在ROM中,那么這個不可改變的部分應與接收緩沖區的相應部分相匹配。如果匹配失敗,那么卡將報告一個錯誤,并且不會更改任何寄存器內容。
有些卡可能需要很長且不可預測的時間來寫入數據塊。在接收到數據塊并完成CRC檢查后,如果寫緩沖區已滿并且無法接受來自新WRITE_BLOCK命令的新數據,則卡將開始寫入并保持DATO低電平。主機可以在任何時候用SEND_STATUS命令(CMD13)輪詢卡片的狀態,卡片將用它的狀態進行響應。狀態位READY_FOR_DATA表示卡是否可以接受新數據,或者寫過程是否仍在進行中。
主機可以通過發出CMD7(選擇不同的卡)來取消卡的選擇,這將使卡進入斷開狀態并釋放數據線而不中斷寫操作。當重新選擇卡時,如果編程仍在進行中并且寫緩沖區不可用,它將通過將DAT拉到低來重新激活忙指示。
實際上,主機可以同時對多張卡進行寫操作,并有互留過程。交錯過程可以通過在其他卡忙時單獨訪問每個卡來完成。這個過程可以通過適當的CMD和DATO-3線操作(斷開忙卡)來完成。
審核編輯 黃宇
-
存儲
+關注
關注
13文章
4353瀏覽量
86169 -
SD NAND
+關注
關注
0文章
84瀏覽量
1293
發布評論請先 登錄
相關推薦
評論