回覆列表
  • 1 # 使用者58965548962

    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長度。

  • 中秋節和大豐收的關聯?
  • 有一首歌叫不要什麼不要浪?