多塊寫操作之前的預擦除設置
設置預擦除的寫塊數量(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文章
4404瀏覽量
86445 -
SD NAND
+關注
關注
0文章
85瀏覽量
1318
發布評論請先 登錄
相關推薦
瀚海微SD NAND之SD 協議(29)硬件接口

瀚海微SD NAND存儲功能描述(28)RCA Registers

瀚海微SD NAND存儲功能描述(25)SD Registers

瀚海微SD NAND存儲功能描述(21)數據讀寫

瀚海微SD NAND存儲功能描述(15)命令類b

瀚海微SD NAND存儲功能描述(14)命令類a

瀚海微SD NAND存儲功能描述(13)讀寫擦除超時

瀚海微SD NAND存儲功能描述(11)命令系統CMD8

瀚海微SD NAND存儲功能描述(9)切換功能

瀚海微SD NAND應用之SD協議存儲功能描述2 初始化命令

評論