SD卡具有安全加密功能,內建128bit加密位,在加密狀態下,使用者需提供密碼才可以訪問卡內的資料。
在卡上電時,若卡包含密碼,卡自動進入鎖定狀態,讀寫命令均返回錯誤,以保護卡內容不被讀出及修改。
密碼設定功能由CMD42實現,其資料包中包括該命令中所有的資訊。
Byte
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Erase
Card
Lock/UnLock
ClrPwd
SetPwd
1
Psw_Length
2
Pwd
Data
PwdLen+1
擦除:此位置1時,卡的密碼和內容會被強制擦除,在遺忘密碼時可使用此功能。
鎖定/解鎖:此位置1時,表示命令結束後狀態為鎖定,為0,表示卡解鎖。
清除密碼:此位置1,表示清除卡的舊密碼,此時資料中必須包含舊密碼的正確內容。
加密:此位置1,表示設定卡的新密碼,資料中必須包含新密碼內容;更改密碼時,新密碼緊跟隨舊密碼內容。
注:在CMD42命令之前,首先要使卡工作在傳輸狀態,在SD模式下可使用CMD7進行狀態轉換,在SPI模式下,可使用初始化序列進行狀態切換。
在任意刻,主機可以透過CMD13命令讀取卡的內部狀態,判斷其鎖定狀態。定義如下:
[if
!vml]
圖略
[endif]
bit0置1表示卡處於鎖定狀態。
1、設定密碼
使用CMD16設定Block長度為密碼長度為PWD_LEN+2;
傳送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
傳送命令資料:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;
使用CMD16恢復原Block長度。
2、清除密碼
使用CMD16設定Block長度為PWD_LEN+2;
傳送命令資料:0x02,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;
3、卡的鎖定、解鎖
傳送命令資料:0x04,LEN,密碼[LEN]……,0xFF,0xFF;
4、修改密碼
使用CMD16設定Block長度為OLD_PWD_LEN+NEW_PWD_LEN+2;
傳送命令資料:0x05,LEN,舊密碼[n],新密碼[m]……,0xFF,0xFF;
5、卡擦除
使用CMD16設定Block長度為1;
傳送命令資料:0x08,0xFF,0xFF;
SD卡具有安全加密功能,內建128bit加密位,在加密狀態下,使用者需提供密碼才可以訪問卡內的資料。
在卡上電時,若卡包含密碼,卡自動進入鎖定狀態,讀寫命令均返回錯誤,以保護卡內容不被讀出及修改。
密碼設定功能由CMD42實現,其資料包中包括該命令中所有的資訊。
Byte
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Erase
Card
Lock/UnLock
ClrPwd
SetPwd
1
Psw_Length
2
Pwd
Data
PwdLen+1
擦除:此位置1時,卡的密碼和內容會被強制擦除,在遺忘密碼時可使用此功能。
鎖定/解鎖:此位置1時,表示命令結束後狀態為鎖定,為0,表示卡解鎖。
清除密碼:此位置1,表示清除卡的舊密碼,此時資料中必須包含舊密碼的正確內容。
加密:此位置1,表示設定卡的新密碼,資料中必須包含新密碼內容;更改密碼時,新密碼緊跟隨舊密碼內容。
注:在CMD42命令之前,首先要使卡工作在傳輸狀態,在SD模式下可使用CMD7進行狀態轉換,在SPI模式下,可使用初始化序列進行狀態切換。
在任意刻,主機可以透過CMD13命令讀取卡的內部狀態,判斷其鎖定狀態。定義如下:
[if
!vml]
圖略
[endif]
bit0置1表示卡處於鎖定狀態。
1、設定密碼
使用CMD16設定Block長度為密碼長度為PWD_LEN+2;
傳送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
傳送命令資料:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;
使用CMD16恢復原Block長度。
2、清除密碼
使用CMD16設定Block長度為PWD_LEN+2;
傳送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
傳送命令資料:0x02,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;
使用CMD16恢復原Block長度。
3、卡的鎖定、解鎖
使用CMD16設定Block長度為PWD_LEN+2;
傳送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
傳送命令資料:0x04,LEN,密碼[LEN]……,0xFF,0xFF;
使用CMD16恢復原Block長度。
4、修改密碼
使用CMD16設定Block長度為OLD_PWD_LEN+NEW_PWD_LEN+2;
傳送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
傳送命令資料:0x05,LEN,舊密碼[n],新密碼[m]……,0xFF,0xFF;
使用CMD16恢復原Block長度。
5、卡擦除
使用CMD16設定Block長度為1;
傳送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
傳送命令資料:0x08,0xFF,0xFF;
使用CMD16恢復原Block長度。