非易失性存储器 (NVM) 中的某些存储器位置可使用 OTP(一次性可编程)进行编程。存储器空间分为两组:出厂空间和客户空间。出厂空间存储正常运行所必需的器件配置。主机无法访问该空间。客户空间包含主机系统可以针对其应用配置自定义的默认器件设置。该空间可由主机读取和编程。
进行 OTP 编程时,请遵循以下过程:
- 解锁 OTP 编程。
- 将以下数据写入 OTP_PROG_UNLOCK1A 至 OTP_PROG_UNLOCK1D:
- OTP_PROG_UNLOCK1A <- 数据 0x02
- OTP_PROG_UNLOCK1B <- 数据 0xB7
- OTP_PROG_UNLOCK1C <- 数据 0x78
- OTP_PROG_UNLOCK1D <- 数据 0xBC
- 使用以下数据再次对 OTP_PROG_UNLOCK2A 至 OTP_PROG_UNLOCK2D 寄存器进行写入。
- OTP_PROG_UNLOCK2A <- 数据 0x7E
- OTP_PROG_UNLOCK2B <- 数据 0x12
- OTP_PROG_UNLOCK2C <- 数据 0x08
- OTP_PROG_UNLOCK2D <- 数据 0x6F
注: 必须按顺序(即 A、B、C,然后是 D)对每个寄存器块进行写入,其间不得进行其他写入或读取。最佳做法是使用相同的写入命令进行更新。如果尝试不按顺序进行任何寄存器更新,或者在写入之间对其他寄存器进行写入/读取,则必须按顺序全部重新执行。
- 检查以确认 OTP 解锁程序成功。
- 读取以确认 OTP_PROG_STAT[UNLOCK] = 1。
注: 允许在步骤 1 之后发出读取命令,但发出 [PROG_GO] 必须是解锁程序之后的下一个写入命令。
- 选择适当的 OTP 页面并开始 OTP 编程。
- 要对 page1 进行编程,请设置 OTP_PROG_CTRL[PAGESEL][PROG_GO] = 0x01,或
- 要对 page2 进行编程,请设置 OTP_PROG_CTRL[PAGESEL][PROG_GO] = 0x03。
- 等待 tPROG,让 OTP 编程完成。
- 检查以确保 OTP 编程期间没有错误。OTP 编程成功后,以下位应该为“1”。
- OTP_PROG_STAT[DONE] = 1,OTP 编程完成。在此寄存器中不得设置任何其他位。
- 如果对第 1 页进行了编程,则 OTP_CUST*_STAT*[PROGOK]、[TRY]、[OVOK] 和 [UVOK] 位应为“1”。其他位应为“0”。
- 如果对第 2 页进行了编程,则 OTP_CUST1_STAT[LOADED]、[PROGOK]、[TRY]、[OVOK] 和 [UVOK] 位应为“1”。OTP_CUST*_STAT 中的其他位应为“0”。
- 发出数字复位以在寄存器中重新加载已更新的 OTP 值。
- CONTROL1[SOFT_RESET] = 1
在编程期间,器件在实际对 OTP 进行编程之前执行编程电压稳定性测试。如果编程电压未通过稳定性测试,则器件不会设置 OTP_CUST*_STAT[TRY] 位,从而使客户能够再次尝试对该页面进行编程。
如果主机错误地选择了用于编程的页面,则会设置 OTP_PROG_STAT[PROGERR] 位。这表明所选页面不可进行编程。选择正确的页面并重试编程。