多塊寫操作之前的預擦除設置
設置預擦除的寫塊數量(ACMD23)將使后續的多塊寫操作比不使用ACMD23的相同操作更快。主機將使用這個命令來定義在下一次寫操作中要發送多少個寫塊。如果主機將在所有數據塊發送到卡之前終止寫操作(使用停止傳輸),則剩余寫塊的內容是未定義的(可以被擦除或仍然有舊數據)。
如果主機發送的寫塊數量超過ACMD23中定義的數量,卡將逐個擦除塊(當接收到新數據時)。“Multiple block Write”操作完成后,該數值將復位為默認值1。建議在CMD25之前使用此命令,有些卡對于多寫塊操作會更快。
注意,如果主機想要使用預擦除特性,則應該在WRITE命令之前發送ACMD23。否則,在執行其他命令(例如:Security Application commands)時,可能會自動清除pre-erase-count。
發送寫塊數使用
Pipeline機制進行數據緩沖區管理的系統,在某些情況下,如果在多塊寫入操作中發生錯誤,則無法確定哪個塊是最后一個被寫入閃存的。卡將用寫入良好的塊的數量響應ACMD22。
擦掉
為了提高數據吞吐量,需要同時擦除多個寫塊。這些寫塊的識別是通過ERASE_WR_BLK_START (CMD32)、ERASE_WR_BLK_END (CMD33)命令完成的。
主機應該遵循以下命令順序:ERASE WR_BLK_START、ERASE_WR_BLK_END和ERASE (CMD38)。
如果收到順序錯誤的擦除(CMD38)或地址設置(CMD32, 33)命令,卡將在狀態寄存器中設置ERASE_SEQ_ERROR位,并重置整個序列。如果收到亂序命令(SEND_STATUS除外),卡將在狀態寄存器中設置ERASE_RESET狀態位,重置擦除順序,執行最后一條命令。
如果擦除范圍包括寫保護扇區,則保留寫保護扇區,只擦除非保護扇區。應該設置狀態寄存器中的WP_ERASE_SKIP狀態位。地址設置命令中的地址字段是以字節為單位的寫塊地址。卡將忽略WRITE_BL_LEN(參見CSD)大小以下的所有LSB。
如上所述,對于塊寫入,卡將通過保持低DATo來指示擦除正在進行中。實際擦除時間可能相當長,并且主機可能發出CMD7來取消卡的選擇或執行卡的斷開,如上面的塊寫入部分所述。擦除操作后卡上的數據要么是“0”,要么是“1”,這取決于卡的供應商。
SCR寄存器位DATA_STAT_AFTER_ERASE(位55)定義它是'0'還是'1'。
寫保護管理
SD存儲卡支持以下三種寫保護方式:
機械寫保護開關(僅主機負責)、卡內部寫保護(卡方責任)、密碼保護卡鎖操作。
卡的內部寫保護(可選)
卡片數據可以防止擦除或寫入。制造商或內容提供商可以通過在CSD中設置永久或臨時寫保護位,對整個卡進行永久寫保護。對于通過在CSD中設置WP_GRP_ENABLE位來支持扇區組寫保護的卡,可以保護部分數據(以CSD中指定的WP_GRP_SIZE扇區為單位),并且可以由應用程序更改寫保護。
SET WRITE_PROT命令用來設置地址寫保護組的寫保護CLR_WRITE_PROT命令用于清除指定地址寫保護組的寫保護。SEND_WRITE_PROT命令類似于單個塊讀取命令。卡發送一個包含32個寫保護位(代表從指定地址開始的32個寫保護組)的數據塊,后跟16個CRC位。寫保護命令中的地址字段為組地址,單位為字節。該卡將忽略所有低于組大小的LSB。Password Card Lock保護將在下面的章節中介紹。
注意:SDHC和SDXC卡不支持寫保護,也不響應寫保護命令(CMD28、CMD29和CMD30)。
卡片鎖定/解鎖操作
一般密碼保護功能使主機能夠在提供密碼的同時鎖定卡片,稍后將用于解鎖卡片。密碼及其大小分別保存在128位PWD和8位PWD_LEN寄存器中。這些寄存器是非易失性的,因此電源周期不會擦除它們。
鎖定卡響應(并執行)“基本”命令類(O類)、l ACMD41、CMD16和“鎖定卡”命令類中的所有命令。因此,允許主機進行復位、初始化、選擇、查詢狀態等操作,但不允許訪問卡上的數據。如果之前設置過密碼(PWD LEN值不是0),上電后卡將自動鎖定。與現有的CSD寄存器寫命令類似,lock/unlock命令只能在“傳輸狀態”下使用。這意味著它不包括地址參數,卡必須在使用前進行選擇。
card lock/unlock命令具有普通單塊寫命令的結構和總線事務類型。傳輸的數據塊包括命令所需的所有信息(密碼設置模式、PWD本身、卡鎖/解鎖等)。命令數據塊的結構如下表所示。注意:物理規范版本2.00及以后的主機在發布CMD42時需要將保留位(Bit7-4)設置為0。
ERASE: 1定義強制擦除操作。在字節0中,第3位將被設置為1(所有其他位將被設置為1)該命令的所有其他字節將被卡忽略。
LOCK/UNLOCK: 1=鎖定卡片。0=解鎖卡(注意,將此位與SET_PWD一起設置是有效的,但不允許與CLR_PWD一起設置)。
CLR_PWD: 1=清除 PWD。SET_PWD: 1=設置新密碼為
PWDPWDS_LEN:定義以下密碼長度(以字節為單位)。在修改密碼的情況下,該字段包括舊密碼和新密碼的總長度。密碼長度不超過16個字節。在修改密碼的情況下,舊密碼和新密碼的總長度最多為32字節。
PASSWORD DATA:設置新密碼時,包含新密碼。在修改密碼的情況下,它包含舊密碼和新密碼。
數據塊大小由主機在發送卡片鎖/解鎖命令之前定義。塊長度應設置為大于或等于lock/unlock命令所需的數據結構。
在下面的解釋中,通過CMD16更改塊大小并不是lock/unlock命令的強制要求。因為在DDR50模式下,塊長度總是偶數,所以CMD42的塊長度應該總是四舍五入到一個偶數的大小。如果在CMD42之前使用CMD16來設置塊長度,它應該總是指定一個偶數長度。
強制擦除
在用戶忘記密碼(PWD內容)的情況下,可以擦除所有卡數據內容以及PWD內容。此操作稱為強制擦除。選擇一張卡(CMD7),如果之前沒有選擇的話。定義塊長度(CMD16)為1字節(8位卡鎖定/解鎖命令)。
發送卡片鎖/解鎖命令,并在數據線上發送相應的一個字節的數據塊,包括16位CRC。數據塊應該指示模式ERASE (ERASE位應該是唯一設置的位)。
如果數據字段中沒有設置唯一的ERASE位,則在狀態寄存器中設置LOCK_UNLOCK_FAILED錯誤位,并拒絕擦除請求。
如果該命令被接受,那么所有的卡片內容將被擦除,包括PWD和PWD LEN寄存器內容,鎖定的卡將被解鎖。在未鎖定的卡上強制擦除將失敗,并且在狀態寄存器中設置LOCK_UNLOCK_FAILED錯誤位。
強制擦除鎖定卡
強制擦除與寫保護的關系如下表所示。強制擦除不會擦除安全區域。在擦除過程中,該卡保持鎖定狀態,待所有用戶區擦除完成后,該卡變為解鎖狀態。同樣,在執行擦除時,該卡應保持“臨時寫保護”和“組寫保護”,并在所有用戶區擦除完成后清除“寫保護”。在擦除錯誤發生的情況下,如果錯誤扇區的數據被破壞,卡可以繼續強制擦除。
審核編輯 黃宇
-
存儲
+關注
關注
13文章
4337瀏覽量
85993 -
SD NAND
+關注
關注
0文章
84瀏覽量
1280
發布評論請先 登錄
相關推薦
評論