数据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 位置,这将开始擦除周期。 查询WR 位或等待NVM 中断。 4 将16 个数据字写入数据EEPROM 写锁存器。 5 将一行数据编程到数据EEPROM。 设置NVMCON 寄存器以编程EEPROM的一行。 将NVMIF状态位清零并允许NVM中断(可选)。 将密钥序列写入NVMKEY。 将WR 位置1,这将开始编程周期。 查询WR 位或等待NVM 中断。