空閑之余研究 手頭有兩張SD卡插上電腦能識別到 提示格式化 但格式化失敗
用DiskGenius 打開顯示扇區錯誤 經研究應該是 某些設備上的加密卡
根據下面資料 編寫的代碼 不能清除 請有經驗的前輩 給與指導 萬分感謝
資料1
卡擦除
使用CMD16設置Block長度為1;
發送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
發送命令數據:0x08,0xFF,0xFF;
使用CMD16恢復原Block長度。
資料2
加密并上鎖 給SD卡加密并上鎖后,SD卡在沒有解鎖的情況下將不能被讀寫4:根據圖2要上鎖的命令為Bit2=1,設置密碼的命令為Bit0-1,其它的位設置為O,即命令碼為Ox05。在SD卡接受CMD42命令字前需要降低SPI的通信速度,這樣才能更好的接受加密指令,SD卡在讀寫數據時塊長度(block)為512Byte,但在寫入密碼前應通過CMD16命令字設置block長度為密碼長度(PWD LEN)加上兩個Byte即PWD LEN+2,在加密操作完成后恢復數據塊長度512Byte。以設置密碼為“123456”為例,加密并加鎖的關鍵代碼如下: SPI_SetSpeed (Low)://設置SPI為低速通信模式 SD_SendCmd(CMD16, Ox08, Oxff);//設置blcok為8 SD_SendCmd (CMD42, Oxffffff, Ox95):11寫入命令 SD;SPI_WriteByte (Oxfe)://數據命令盾牌 SD SPI_ WriteByte(Ox05)://設置密碼,并給卡加鎖 SD_SPI_WriteByte (Ox06);//密碼長度 SD_SPI_WriteByte (Ox31);//寫入密碼123456 SD_SPI_ Wri'teByte (Ox32); SD_SPI:WriteByte (Ox33); SD_SPI-WriteByte( Ox34); SD SPI_ WriteByte(Ox35); SD SPI- WriteByte(Ox36); SD SPI_WriteByte(Oxff)://寫兩字節的CRC校驗 SD SPI WriteByte(Oxff) SD SendCmd (CMD16, Ox200, Oxff)://恢復block SPI_SetSpeed (High);//恢復SPI為高速通信模式
這里是根據參考資料編寫的代碼 unsigned char SD_cmd42()
{
unsigned char time,temp;
unsigned char cmd16[] = {0x50,0x00,0x00,0x00,0x01,0x01};
unsigned char cmd42[] = {0x6a,0x00,0x00,0x00,0x00,0x95};
SD_CS=0;
time=0;
do
{
temp=SD_Write_Cmd(cmd16);//寫入CMD16
temp=SD_Write_Cmd(cmd42);//寫入CMD42
SD_spi_write(0xfe); //起始令牌
SD_spi_write(0x08); //解除鎖命令碼
SD_spi_write(0xff); //crc
SD_spi_write(0xff); //crc
time++;
delay(5000); //延時便于觀察循環次數
LED_4 = ~LED_4;//
if(time==200) //循環200次
{
LED_R = 0; //錯誤點亮紅led 和第四個led
LED_4 = 0;
return 1; //結束程序并返回1 寫入失敗
}
}while(temp!=0x00);//響應r1 這里不確定是不是0x00 知道的請告知下
LED_4 = 0;//正常點亮第四個led
SD_CS=1;
SD_spi_write(0xff); //按照SD卡的操作時序在這里補8個時鐘
return 0;//返回0,
}
|