DSP芯片解密技术之EEPROM编程算法

来源:IC解密特性的基础上,才能为芯片解密选择最安全可靠、最合理的解密方案。(注:以DSPIC30F系列芯片解密为例)   一、数据EEPROM 编程   与程序存储器类似, EEPROM 存储块(block)是通过读表和写表操作访问的。因为EEPROM存储器只有16 位宽,所以其操作不需要使用TBLWTH 和TBLRDH 指令。数据EEPROM 的编程和擦除步骤与闪存程序存储器类似,区别在于数据EEPROM 为快速数据存取进行了优化。在数据EEPROM 上可以执行以下编程操作:   擦除一个字   擦除一行(16 个字)   编程一个字   编程一行(16 个字)   在正常操作中(整个VDD 工作范围) ,数据EEPROM 可读写。与闪存程序存储器不同,在EEPROM 编程或擦除操作时,正常程序执行不会停止。EEPROM 擦除和编程操作是通过NVMCON 和NVMKEY 寄存器执行的。编程软件负责等待操作完成。软件可以使用以下三种方法之一检测EEPROM 擦除或编程操作的完成时间:   用软件查询WR 位(NVMCON<15>)。当操作完成时WR 位会被清零。   用软件查询NVMIF 位(IFS0<12>)。当操作完成时NVMIF 位会被置1。   允许NVM 中断。当操作完成时, CPU 会被中断。ISR 可以处理更多的编程操作。   二、EEPROM 单字编程算法   1. 擦除一个EEPROM 字。   设置NVMCON 寄存器以擦除一个EEPROM 字。   将要擦除的字的地址写入TBLPAG 和NVMADR 寄存器。   将NVMIF 状态位清零并允许NVM 中断(可选)。   将密钥序列写入NVMKEY。   将WR 位置1。这将开始擦除周期。   查询WR 位或等待NVM 中断。   2. 将数据字写入数据EEPROM 写锁存器。   3. 将数据字编程入EEPROM。   设置NVMCON 寄存器以编程一个EEPROM 字。   将NVMIF 状态位清零并允许NVM 中断(可选)。   将密钥序列写入NVMKEY。   将WR 位置1。这将开始编程周期。   查询WR 位或等待NVM 中断。   三、EEPROM 行编程算法   如果需要将多个字编程入EEPROM,每次擦除并编程16 个字(1 行)会比较快。向EEPROM编程16 个字的过程如下:   1. 读一行数据EEPROM (16 个字)并以数据“镜像”方式保存到数据RAM。要修改的EEPROM 部分必须处于偶数16 字地址边界内。   2. 使用新数据更新数据镜像。   3. 擦除EEPROM 行。   设置NVMCON 寄存器以擦除EEPROM 的一行。   将NVMIF 状态位清零并允许NVM 中断(可选)。   将密钥序列写入NVMKEY。   将WR 位置1。这将开始擦除周期。   查询WR 位或等待NVM 中断。   4. 将16 个数据字写入数据EEPROM 写锁存器。   5. 将一行数据编程到数据EEPROM。   设置NVMCON 寄存器以编程EEPROM 的一行。   将NVMIF 状态位清零并允许NVM 中断(可选)。   将密钥序列写入NVMKEY。   将WR 位置1。这将开始编程周期。   查询WR 位或等待NVM 中断。