非易失性存儲(chǔ)器 (NVM) 中的某些存儲(chǔ)器位置可使用 OTP(一次性可編程)進(jìn)行編程。存儲(chǔ)器空間分為兩組:出廠空間和客戶空間。出廠空間存儲(chǔ)正常運(yùn)行所必需的器件配置。主機(jī)無(wú)法訪問(wèn)該空間。客戶空間包含主機(jī)系統(tǒng)可以針對(duì)應(yīng)用配置自定義的默認(rèn)器件設(shè)置。該空間可由主機(jī)讀取和編程。
進(jìn)行 OTP 編程時(shí),請(qǐng)遵循以下過(guò)程:
- 解鎖 OTP 編程。
- 將以下數(shù)據(jù)寫(xiě)入 OTP_PROG_UNLOCK1A 至 OTP_PROG_UNLOCK1D:
- OTP_PROG_UNLOCK1A <- 數(shù)據(jù) 0x02
- OTP_PROG_UNLOCK1B <- 數(shù)據(jù) 0xB7
- OTP_PROG_UNLOCK1C <- 數(shù)據(jù) 0x78
- OTP_PROG_UNLOCK1D <- 數(shù)據(jù) 0xBC
- 使用以下數(shù)據(jù)再次對(duì) OTP_PROG_UNLOCK2A 至 OTP_PROG_UNLOCK2D 寄存器進(jìn)行寫(xiě)入。
- OTP_PROG_UNLOCK2A <- 數(shù)據(jù) 0x7E
- OTP_PROG_UNLOCK2B <- 數(shù)據(jù) 0x12
- OTP_PROG_UNLOCK2C <- 數(shù)據(jù) 0x08
- OTP_PROG_UNLOCK2D <- 數(shù)據(jù) 0x6F
注: 必須按順序(即 A、B、C,然后是 D)對(duì)每個(gè)寄存器塊進(jìn)行寫(xiě)入,其間不得進(jìn)行其他寫(xiě)入或讀取。最佳做法是使用相同的寫(xiě)入命令進(jìn)行更新。如果嘗試不按順序進(jìn)行任何寄存器更新,或者在寫(xiě)入之間對(duì)其他寄存器進(jìn)行寫(xiě)入/讀取,則必須按順序全部重新執(zhí)行。
- 檢查以確認(rèn) OTP 解鎖程序成功。
- 讀取以確認(rèn) OTP_PROG_STAT[UNLOCK] = 1。
注: 允許在步驟 1 之后發(fā)出讀取命令,但發(fā)出 [PROG_GO] 必須是解鎖程序之后的下一個(gè)寫(xiě)入命令。
- 選擇適當(dāng)?shù)?OTP 頁(yè)面并開(kāi)始 OTP 編程。
- 要對(duì) page1 進(jìn)行編程,請(qǐng)?jiān)O(shè)置 OTP_PROG_CTRL[PAGESEL][PROG_GO] = 0x01,或
- 要對(duì) page2 進(jìn)行編程,請(qǐng)?jiān)O(shè)置 OTP_PROG_CTRL[PAGESEL][PROG_GO] = 0x03。
- 等待 tPROG,讓 OTP 編程完成。
- 檢查以確保 OTP 編程期間沒(méi)有錯(cuò)誤。OTP 編程成功后,以下位應(yīng)該為“1”。
- OTP_PROG_STAT[DONE] = 1,OTP 編程完成。在此寄存器中不得設(shè)置任何其他位。
- 如果對(duì)第 1 頁(yè)進(jìn)行了編程,則 OTP_CUST*_STAT*[PROGOK]、[TRY]、[OVOK] 和 [UVOK] 位應(yīng)為“1”。其他位應(yīng)為“0”。
- 如果對(duì)第 2 頁(yè)進(jìn)行了編程,則 OTP_CUST1_STAT[LOADED]、[PROGOK]、[TRY]、[OVOK] 和 [UVOK] 位應(yīng)為“1”。OTP_CUST*_STAT 中的其他位應(yīng)為“0”。
- 發(fā)出數(shù)字復(fù)位以在寄存器中重新加載已更新的 OTP 值。
- CONTROL1[SOFT_RESET] = 1
在編程期間,器件在實(shí)際對(duì) OTP 進(jìn)行編程之前執(zhí)行編程電壓穩(wěn)定性測(cè)試。如果編程電壓未通過(guò)穩(wěn)定性測(cè)試,則器件不會(huì)設(shè)置 OTP_CUST*_STAT[TRY] 位,從而使客戶能夠再次嘗試對(duì)該頁(yè)面進(jìn)行編程。
如果主機(jī)錯(cuò)誤地選擇了用于編程的頁(yè)面,則會(huì)設(shè)置 OTP_PROG_STAT[PROGERR] 位。這表明所選頁(yè)面不可進(jìn)行編程。選擇正確的頁(yè)面并重試編程。