<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta name="copyright" content="(C) Copyright 2026" />
<meta name="DC.rights.owner" content="(C) Copyright 2026" />
<meta name="generator" content="DITA-OT" /><meta name="DC.type" content="task" />
<meta name="DC.title" content="OTP memory programming" />
<meta name="abstract" content="Although the One Time Programmable (OTP) memory is one time programmable, any bit still in a 1 state can be reprogrammed into a 0 state. To avoid deliberate or accidental modification of the OTP memory data, a protection mechanism is provided." />
<meta name="description" content="Although the One Time Programmable (OTP) memory is one time programmable, any bit still in a 1 state can be reprogrammed into a 0 state. To avoid deliberate or accidental modification of the OTP memory data, a protection mechanism is provided." />
<meta name="DC.relation" scheme="URI" content="../../APP/nan_043/intro.html" />
<meta name="prodname" content="nRF7002" />
<meta name="prodname" content="nRF7001" />
<meta name="prodname" content="nRF7000" />
<meta name="prodname" content="nrf70-series" />
<meta name="prodname" content="application-notes" />
<meta name="DC.format" content="XHTML" />
<meta name="DC.identifier" content="otp_programming" />
<link rel="stylesheet" type="text/css" href="../../commonltr.css" />
<title>OTP memory programming</title>
</head>
<body id="otp_programming">

<div class="productversion"><span>nRF7002</span></div><div id="headerlinks"><span class="copyURL"><a href="#" id="theURL">Copy URL</a></span></div>
 <h1 class="title topictitle1" id="ariaid-title1">OTP memory programming</h1>

 
 
 <div class="body taskbody"><p class="shortdesc">Although the <a href="../../dita_common/glossary/glossary.html#otp" title="A type of non-volatile memory that permits data to be written to memory only once."><dfn class="term abbreviated-form">One Time Programmable (OTP) memory</dfn></a> is one time programmable, any bit still in
    a <span class="keyword value">1</span> state can be reprogrammed into a <span class="keyword value">0</span> state. To avoid deliberate
    or accidental modification of the OTP memory data, a protection mechanism is provided. </p>
<div class="section context">The following table shows how the protection mechanism controls access to the OTP memory
      through the register REGION.PROTECT.
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="otp_programming__table_egg_rgm_hwb" class="table" frame="border" border="1" rules="all"><caption><span class="tablecap"><span class="table--title-label">Table 1. </span>Protection mechanism</span></caption><colgroup><col style="width:25%" /><col style="width:25%" /><col style="width:25%" /><col style="width:25%" /></colgroup><thead class="thead" style="text-align:left;">
            <tr class="row">
              <th class="entry cellrowborder" style="vertical-align:top;" id="d1739e69">OTP memory access state (REGION.PROTECT)</th>

              <th class="entry cellrowborder" style="vertical-align:top;" id="d1739e72">Disabled (0xFFFFFFFF)</th>

              <th class="entry cellrowborder" style="vertical-align:top;" id="d1739e75">Enabled (0x50FA50FA)</th>

              <th class="entry cellrowborder" style="vertical-align:top;" id="d1739e78">Protected (0x00000000)</th>

            </tr>

          </thead>
<tbody class="tbody">
            <tr class="row">
              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e69 ">CALIB.x</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e72 ">No access</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e75 ">Read/write access</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e78 ">Read-only access</td>

            </tr>

            <tr class="row">
              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e69 ">MAC.x</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e72 ">No access</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e75 ">Read/write access</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e78 ">Read-only access</td>

            </tr>

            <tr class="row">
              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e69 ">QSPI.x</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e72 ">No access</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e75 ">Read/write access</td>

              <td class="entry cellrowborder" style="vertical-align:top;" headers="d1739e78 ">No access</td>

            </tr>

          </tbody>
</table>
</div>
<p class="p">Devices are shipped with the OTP memory access in the disabled state. The Wi-Fi® Radio test sample includes
        commands for programming the OTP memory. The following steps are required:</p>
</div>

  <ol class="ol steps" id="otp_programming__steps_ld3_3k3_dwb"><li class="li step">
        <span class="ph cmd">Set the protection registers (REGION.PROTECT[0..3]) to <span class="keyword value">0x50FA50FA</span> to
          enable read/write access of the remaining OTP memory locations with the Wi-Fi Radio test command
            <code class="ph codeph">wifi_radio_ficr_prog otp_write_params 0x100 0x50FA50FA</code>.</span>
      </li>
<li class="li step">
        <span class="ph cmd">Reboot the device to finish enabling read/write access to the OTP memory.</span>
      </li>
<li class="li step">
        <span class="ph cmd">Update the OTP memory registers described in various steps in <a class="xref" href="production_line.html" title="This section provides a summary of recommended and optional steps.">Production line operations</a>.</span>
      </li>
<li class="li step">
        <span class="ph cmd">Set the OTP memory to protected state with the Wi-Fi Radio test command <code class="ph codeph">wifi_radio_ficr_prog
            otp_write_params 0x100 0x00000000</code>.</span>
      </li>
</ol>

  <div class="section postreq" id="otp_programming__postreq_gmt_1m3_dwb">Updates to the OTP memory are no longer possible. If needed,
      enabling protection can be deferred. Programmed values will take effect even without
      protection enabled.<div class="note" id="otp_programming__note_hqm_sts_2wb"><span class="notetitle">Note:</span> Whenever an OTP memory register is updated, the
        corresponding bit in the register REGION_DEFAULTS must be updated to instruct the firmware
        to utilize the value programmed into the OTP memory, and not the firmware-based default
        value. When using the Wi-Fi Radio
        test sample to program the individual OTP memory locations, setting the appropriate bit in
        the register REGION_DEFAULTS is done automatically. </div>
<p class="p">Use the Wi-Fi Radio test command
          <code class="ph codeph">wifi_radio_ficr_prog otp_read_params</code> to confirm the state of OTP memory.
        This reports the value of all OTP memory registers, including the register REGION_DEFAULTS,
        except for the QSPI encryption keys which cannot be read. Alternatively, use the Wi-Fi Radio test command
          <code class="ph codeph">wifi_radio_ficr_prog otp_get_status</code> to indicate which registers have been
        programmed without reporting the actual values. </p>
</div>
</div>

<div class="related-links">
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a class="link" href="../../APP/nan_043/intro.html" title="This document provides information about steps needed for nRF70 Series device commissioning (production line) and characterization (product development) purposes.">nRF70 Series Device Commissioning and Characterization</a></div>
</div>
</div></body>
</html>