SLUSDQ4 April 2019 BQ79606A-Q1
There are two pages of OTP memory available for customer use. To write the NVM, first the desired page is selected using the OTP_PROG_CTRL[PAGESEL] bit. The page must be valid to burn. A valid page is one where the OTP_CUST*_STAT1[FREE] or OTP_CUST*_STAT1[RETRY] is '1'. A page with the OTP_CUST*_STAT1[FREE] bit set has never had programming attempted. A page with OTP_CUST*_STAT1[RETRY] bit set has had programming attempted, but an undervoltage error in VPROG occurred and programming was not completed. The status bits in OTP_CUST*_STAT2 indicate the programming history of the page. During programming, if an OV or UV event occurs, the OTP_CUST*_STAT2[UV*OK] and OTP_CUST*_STAT2[OV*OK] bits are set to indicate the VPROG under and over voltage condition during the programing attempts. In addition, the UVERR, OVERR, SUVERR, and SOVERR bits on the OTP_PROG_STAT register indicates if there is VPROG error during programming and stability test.
To start the burn process, use the OTP_PROG_CTRL[PAGESEL] bits to select the page for programming. Next, connect a supply with voltage VPROG to VPROG. This voltage is monitored internally during programming. Programming is aborted when a high/low voltage is connected while a burn is attempted. Once the voltage is connected, the four OTP_PROG_UNLOCK* registers must be written. The registers are separated into two blocks (OTP_PROG_UNLOCK1* and OTP_PROG_UNLOCK2*) with four consecutive registers each (A, B, C, D). Each block of registers must be written in order (i.e. 1,2,3, then 4) with no other writes or reads between. The best practice is to use the same Write command to update. Any attempt to update the registers out of sequence, or if another register is written/read between writes, the entire sequence must be redone. OTP_PROG_UNLOCK1A-OTP_PROG_UNLOCK1D must be written to 0x02B778BC. OTP_PROG_UNLOCK2A-OTP_PROG_UNLOCK2D must be written to 0x7E12086F. Any reads done on the OTP_PROG_UNLOCK* registers result in an all '0' response. Once these registers are written correctly, the OTP_PROG_STAT[UNLOCK] bit is set to signal the host that the OTP burn function is unlocked and enabled. Once the OTP is unlocked, the next write clears the lock condition. Reads can be done after unlocking the OTP (such as confirming the OTP_PROG_STAT[UNLOCK] bit is set). The write following the final unlock command must be to OTP_PROG_CTRL[PROG_GO] to start the programming procedure. A successful program results in the OTP_CUST_STAT1[PROGOK] bit being set and the page is available for loading.
When the OTP programming is enabled, the VPROG voltage is tested in a voltage stability test. The voltage stability test lasts for 300us and checks the voltage for overvoltage and undervoltage conditions. If an overvoltage condition exists, the OTP_PROG_STAT[SOVERR] is set. If an undervoltage condition exists, the OTP_PROG_STAT[SUVERR] is set. If either condition exists during the test, the programming is terminated. Note that this will not set the OTP_CUST*_STAT2[TRY1] (Meaning there are still two chances to burn the OTP).
Now, If the voltage is good during the stability test, programming proceeds. Once programming is completed, the OTP_PROG_STAT[DONE] bit is set. If any OV or UV errors occurred during the programming, the OTP_PROG_STAT[OVERR] or OTP_PROG_STAT[UVERR] bit (depending on which type of error) is set. If, after the first attempt at programming, the status shows an undervoltage error occured (OTP_CUST*_STAT2[TRY1], OTP_CUST*_STAT2[OV1OK] is '1' and OTP_CUST*_STAT2[UV1OK] is '0'), it is possible to retry the burn on that page with EXACTLY the same data only one more time. Note that, when the first attempt to program OTP failed, the user get only one more chance to burn properly the OTP.
If the host incorrectly selected a page for programming, the OTP_PROG_STAT[PROGERR] bit is set. This indicates that the selected page was not available to be programmed. Select the correct page and retry the programming.