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