PIC單片機該怎么加密
見(jiàn)過(guò)很多初學(xué)者對PIC16系列單片機的ID碼的讀和寫(xiě)犯迷糊。說(shuō)實(shí)話(huà),這方面的資料也不怎么全。有些教材可能會(huì )涉及ID區域的介紹,可是往往是一代而過(guò)。這對初學(xué)者來(lái)說(shuō)是比較容易犯錯的地方。今天有空,對相關(guān)的問(wèn)題作了一些整理,分享給大家??赡苡行┑胤秸f(shuō)的不夠妥當,歡迎大家多多探討。
本文引用地址:http://dyxdggzs.com/article/201807/384124.htm1.什么是ID區域?
ID區域是獨立于EEPROM,FLASH,RAM的區域。程序設計人員可以利用該區域存放軟件的版本號,編寫(xiě)日期,燒錄日期,產(chǎn)品標識等信息。不過(guò)該區域很小PIC16系列只能存放4個(gè)字節。
2.ID碼怎么燒錄到ID區域里面去?
可以利用PICC自帶的宏命令I(lǐng)DLOC(X)來(lái)實(shí)現。具體操作如下:
.....................................//頭文件 其它宏定義
__IDLOC(76F4); //注意:前面是兩個(gè)下劃線(xiàn)。括號里面最多可以有2個(gè)字節
void main()
{
...................................//程序主體
}
編譯以后再用燒錄工具燒到單片機中即可。這里要提醒一下,IDLOC(X)里面最多有2個(gè)字節的16進(jìn)制數,超過(guò)部分會(huì )無(wú)效。比如你寫(xiě)個(gè)987FE3,E3會(huì )丟掉。另外得說(shuō)一下這兩個(gè)16進(jìn)制數在ID區域是怎么放的。我們已經(jīng)知道IDLOC(X)里面能又個(gè)字節,而ID區域能放4個(gè)字節。以X=76F4為例,它們是這樣放的07060F04。也就是說(shuō),在每個(gè)16進(jìn)制數前加1個(gè)0。如果你寫(xiě)的不是2個(gè)字節的16進(jìn)制數,比如是1個(gè)字節的78。編譯器會(huì )在前面補0,那就成了0078。寫(xiě)到ID區域的就是00000708
3.ID碼怎么讀出來(lái)?
可以通過(guò)燒錄工具跟編譯器配合讀出來(lái)。我用的是PICC跟ICD2。連好線(xiàn),單片機上電以后,在編程模式下,通過(guò)執行Read Target Device操作,然后在Configure菜單下的Id memory
選項可以看到剛才編程的時(shí)候設置的ID碼。
其實(shí),多數PIC都沒(méi)有唯一ID,有人通過(guò)燒斷PIC讀出總線(xiàn)來(lái)實(shí)現,但設備需要自制。
只要是市場(chǎng)上大量銷(xiāo)售的芯片,解密都不是什么麻煩事,只能盡量用新型號或者生僻的型號。
有人用MCU內部的EEPROM這么搞過(guò),但不是這么簡(jiǎn)單的這么搞,對于大批量生產(chǎn)來(lái)說(shuō),還需要一些技巧才能比較好的處理這個(gè)問(wèn)題。
1、設置一個(gè)自檢程序,通過(guò)特殊操作(我有一個(gè)自制工裝,可以把MCU的各個(gè)相關(guān)IO強行固定在某個(gè)邏輯電平上,軟件判斷邏輯組合,必須符合一個(gè)特定組合才能進(jìn)入特殊操作啟動(dòng)代碼,UART接受工裝的通信數據,通信數據傳入EEPROM要被擦寫(xiě)的次數和位置等)。
2、進(jìn)入自檢后,MCU瘋狂的擦寫(xiě)EEPROM中設定的某個(gè)位置(適當提高一點(diǎn)VCC電壓以加快失效),最多擦寫(xiě)200萬(wàn)次后停止操作,一般MCU自帶的EEPROM擦寫(xiě)次數都不到100萬(wàn)次,EEPROM某個(gè)字節在0XAA和0X55之間不斷的被循環(huán)擦寫(xiě)。
3、這個(gè)擦寫(xiě)的時(shí)間還是比較長(cháng)的,一般要數十分鐘以上,我一般放在產(chǎn)品通電老化階段進(jìn)行這個(gè)自檢程序(產(chǎn)品一般要在老化房4~6個(gè)小時(shí)候通電老化時(shí)間,自檢程序兼容這個(gè)時(shí)間執行,避免產(chǎn)生新的工時(shí)損失)
4、擦寫(xiě)過(guò)程中在RAM中記錄EEPROM該字節失效時(shí)的操作次數,并存入到EEPROM其他字節中。
5、產(chǎn)品正常銷(xiāo)售中,執行APP用戶(hù)程序,繼續不斷的擦寫(xiě)那個(gè)失效字節,如果不能擦寫(xiě),則說(shuō)明加密成功,否則有另一個(gè)糾錯程序就不講了,各位可以自行想辦法。
評論