新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > PIC單片機該怎么加密

        PIC單片機該怎么加密

        作者: 時間:2018-07-26 來源:網絡 收藏

        見過很多初學者對PIC16系列的ID碼的讀和寫犯迷糊。說實話,這方面的資料也不怎么全。有些教材可能會涉及ID區域的介紹,可是往往是一代而過。這對初學者來說是比較容易犯錯的地方。今天有空,對相關的問題作了一些整理,分享給大家。可能有些地方說的不夠妥當,歡迎大家多多探討。

        本文引用地址:http://www.104case.com/article/201807/384124.htm

        1.什么是ID區域?

        ID區域是獨立于EEPROM,FLASH,RAM的區域。程序設計人員可以利用該區域存放軟件的版本號,編寫日期,燒錄日期,產品標識等信息。不過該區域很小PIC16系列只能存放4個字節。

        2.ID碼怎么燒錄到ID區域里面去?

        可以利用PICC自帶的宏命令IDLOC(X)來實現。具體操作如下:

        .....................................//頭文件 其它宏定義

        __IDLOC(76F4); //注意:前面是兩個下劃線。括號里面最多可以有2個字節

        void main()

        {

        ...................................//程序主體

        }

        編譯以后再用燒錄工具燒到中即可。這里要提醒一下,IDLOC(X)里面最多有2個字節的16進制數,超過部分會無效。比如你寫個987FE3,E3會丟掉。另外得說一下這兩個16進制數在ID區域是怎么放的。我們已經知道IDLOC(X)里面能又個字節,而ID區域能放4個字節。以X=76F4為例,它們是這樣放的07060F04。也就是說,在每個16進制數前加1個0。如果你寫的不是2個字節的16進制數,比如是1個字節的78。編譯器會在前面補0,那就成了0078。寫到ID區域的就是00000708

        3.ID碼怎么讀出來?

        可以通過燒錄工具跟編譯器配合讀出來。我用的是PICC跟ICD2。連好線,上電以后,在編程模式下,通過執行Read Target Device操作,然后在Configure菜單下的Id memory

        選項可以看到剛才編程的時候設置的ID碼。

        其實,多數PIC都沒有唯一ID,有人通過燒斷PIC讀出總線來實現,但設備需要自制。

        只要是市場上大量銷售的芯片,解密都不是什么麻煩事,只能盡量用新型號或者生僻的型號。

        有人用MCU內部的EEPROM這么搞過,但不是這么簡單的這么搞,對于大批量生產來說,還需要一些技巧才能比較好的處理這個問題。

        1、設置一個自檢程序,通過特殊操作(我有一個自制工裝,可以把MCU的各個相關IO強行固定在某個邏輯電平上,軟件判斷邏輯組合,必須符合一個特定組合才能進入特殊操作啟動代碼,UART接受工裝的數據,數據傳入EEPROM要被擦寫的次數和位置等)。

        2、進入自檢后,MCU瘋狂的擦寫EEPROM中設定的某個位置(適當提高一點VCC電壓以加快失效),最多擦寫200萬次后停止操作,一般MCU自帶的EEPROM擦寫次數都不到100萬次,EEPROM某個字節在0XAA和0X55之間不斷的被循環擦寫。

        3、這個擦寫的時間還是比較長的,一般要數十分鐘以上,我一般放在產品通電老化階段進行這個自檢程序(產品一般要在老化房4~6個小時候通電老化時間,自檢程序兼容這個時間執行,避免產生新的工時損失)

        4、擦寫過程中在RAM中記錄EEPROM該字節失效時的操作次數,并存入到EEPROM其他字節中。

        5、產品正常銷售中,執行APP用戶程序,繼續不斷的擦寫那個失效字節,如果不能擦寫,則說明加密成功,否則有另一個糾錯程序就不講了,各位可以自行想辦法。



        關鍵詞: 通信 單片機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 苏尼特右旗| 海盐县| 乐亭县| 饶阳县| 香港 | 左贡县| 四平市| 南充市| 通化县| 荥阳市| 资源县| 永和县| 卢湾区| 潍坊市| 来凤县| 永新县| 资源县| 河源市| 宜宾县| 茂名市| 芜湖县| 呼伦贝尔市| 绍兴县| 榆社县| 乌鲁木齐市| 北票市| 临漳县| 金昌市| 浦北县| 牡丹江市| 正定县| 阳东县| 通河县| 凤山县| 勃利县| 南召县| 兴文县| 崇州市| 丹寨县| 宽甸| 西乡县|