DSP芯片解密技術(shù)之EEPROM編程算法

來源:IC解密特性的基礎(chǔ)上,才能為芯片解密選擇最安全可靠、最合理的解密方案。(注:以DSPIC30F系列芯片解密為例)   一、數(shù)據(jù)EEPROM 編程   與程序存儲器類似, EEPROM 存儲塊(block)是通過讀表和寫表操作訪問的。因為EEPROM存儲器只有16 位寬,所以其操作不需要使用TBLWTH 和TBLRDH 指令。數(shù)據(jù)EEPROM 的編程和擦除步驟與閃存程序存儲器類似,區(qū)別在于數(shù)據(jù)EEPROM 為快速數(shù)據(jù)存取進行了優(yōu)化。在數(shù)據(jù)EEPROM 上可以執(zhí)行以下編程操作:   擦除一個字   擦除一行(16 個字)   編程一個字   編程一行(16 個字)   在正常操作中(整個VDD 工作范圍) ,數(shù)據(jù)EEPROM 可讀寫。與閃存程序存儲器不同,在EEPROM 編程或擦除操作時,正常程序執(zhí)行不會停止。EEPROM 擦除和編程操作是通過NVMCON 和NVMKEY 寄存器執(zhí)行的。編程軟件負責(zé)等待操作完成。軟件可以使用以下三種方法之一檢測EEPROM 擦除或編程操作的完成時間:   用軟件查詢WR 位(NVMCON<15>)。當(dāng)操作完成時WR 位會被清零。   用軟件查詢NVMIF 位(IFS0<12>)。當(dāng)操作完成時NVMIF 位會被置1。   允許NVM 中斷。當(dāng)操作完成時, CPU 會被中斷。ISR 可以處理更多的編程操作。   二、EEPROM 單字編程算法   1. 擦除一個EEPROM 字。   設(shè)置NVMCON 寄存器以擦除一個EEPROM 字。   將要擦除的字的地址寫入TBLPAG 和NVMADR 寄存器。   將NVMIF 狀態(tài)位清零并允許NVM 中斷(可選)。   將密鑰序列寫入NVMKEY。   將WR 位置1。這將開始擦除周期。   查詢WR 位或等待NVM 中斷。   2. 將數(shù)據(jù)字寫入數(shù)據(jù)EEPROM 寫鎖存器。   3. 將數(shù)據(jù)字編程入EEPROM。   設(shè)置NVMCON 寄存器以編程一個EEPROM 字。   將NVMIF 狀態(tài)位清零并允許NVM 中斷(可選)。   將密鑰序列寫入NVMKEY。   將WR 位置1。這將開始編程周期。   查詢WR 位或等待NVM 中斷。   三、EEPROM 行編程算法   如果需要將多個字編程入EEPROM,每次擦除并編程16 個字(1 行)會比較快。向EEPROM編程16 個字的過程如下:   1. 讀一行數(shù)據(jù)EEPROM (16 個字)并以數(shù)據(jù)“鏡像”方式保存到數(shù)據(jù)RAM。要修改的EEPROM 部分必須處于偶數(shù)16 字地址邊界內(nèi)。   2. 使用新數(shù)據(jù)更新數(shù)據(jù)鏡像。   3. 擦除EEPROM 行。   設(shè)置NVMCON 寄存器以擦除EEPROM 的一行。   將NVMIF 狀態(tài)位清零并允許NVM 中斷(可選)。   將密鑰序列寫入NVMKEY。   將WR 位置1。這將開始擦除周期。   查詢WR 位或等待NVM 中斷。   4. 將16 個數(shù)據(jù)字寫入數(shù)據(jù)EEPROM 寫鎖存器。   5. 將一行數(shù)據(jù)編程到數(shù)據(jù)EEPROM。   設(shè)置NVMCON 寄存器以編程EEPROM 的一行。   將NVMIF 狀態(tài)位清零并允許NVM 中斷(可選)。   將密鑰序列寫入NVMKEY。   將WR 位置1。這將開始編程周期。   查詢WR 位或等待NVM 中斷。