<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>i.MX RT Crossover MCUsのトピックRe: Timing for burning fuses in RT106x</title>
    <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848005#M1776</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Just to wrap this up, this is the code I currently use:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;//------------------------------------------------------------------------------&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// Burn BT_FUSE_SEL and FORCE_INTERNAL_BOOT fuses&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;//------------------------------------------------------------------------------&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;setFuses&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// Write Fuses, burn BT_FUSE_SEL (disable BT_CFG_xx pins) and burn FORCE_INTERNAL_BOOT (so that BOOT_MODE0 and BOOT_MODE1 inputs does not matter any more)&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// Value at the start of line is [xx] which is number of nS at 132 MHz with the timing values below&lt;/SPAN&gt;

 &lt;SPAN class="comment token"&gt;// [151] WAIT = tSP_RD=(WAIT+1)/ipg_clk_freq, should be &amp;gt;= 150 ns&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [106] RELAX = tSP_PGM=tHP_PGM=(RELAX+1)/ipg_clk_freq, should be &amp;gt;= 100ns&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [10015] STROBE_PROG = tPGM = [(STROBE_PROG+1) – 2×(RELAX_PROG+1)] / ipg_clk_freq (The tPGM should be configured within the range of 9000 ns &amp;lt; tPGM &amp;lt; 11000 ns, while its recommended value is 10000 ns)&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [45]  STROBE_READ = tRD= [(STROBE_READ+1) – 2×(RELAX_READ+1)] / ipg_clk_freq (The tRD is required to be larger than 40 ns)&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [15.2] TIMING2.RELAX_READ = (RELAX_READ+1) / ipg_clk_freq, should be &amp;gt;= 10 ns.&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [1000] TIMING2.RELAX_PROG = tSP_PG_AVDD = tHP_PG_AVDD = (RELAX_PROG+1)/ipg_clk_freq, should be &amp;gt;= 1000 ns.&lt;/SPAN&gt;
 
 &lt;SPAN class="comment token"&gt;// In TIMING2, RELAX_READ is set to 0x01 (1) and RELAX_PROG is 0x92 (131)&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// (At default, RELAX_READ is 0x03 (3) and RELAX_PROG is 0x92 (146))&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// For 132 MHz:&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// TIMING_WAIT = 150ns * 132MHz - 1 = 18,8 =&amp;gt; 19&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX = 100ns * 132MHz - 1 = 12,2 =&amp;gt; 13&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX_READ = 10ns * 132MHz -1 = 0,32 =&amp;gt; 1&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX_PROG = 1000ns * 132MHz - 1 = 131&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// STROBE_PROG = 10us * 132MHz + 2 * (RELAX_PROG + 1) - 1 = 10us * 132MHz + 2 * (131 + 1) - 1 = 1583&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// STROBE_READ = 40ns * 132MHz + 2 * (RELAX_READ + 1) - 1 = 40ns * 132MHz + 2 * (1 + 1) - 1 = 8,28 =&amp;gt; 9&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// For 150 MHz:&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// TIMING_WAIT = 150ns * 150MHz - 1 = 21,5 =&amp;gt; 22&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX = 100ns * 150MHz - 1 = 14,0 =&amp;gt; 14&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX_READ = 10ns * 150MHz - 1 = 0,5 =&amp;gt; 1&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX_PROG = 1000ns * 150MHz - 1 = 149&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// STROBE_PROG = 10us * 150MHz + 2 * (RELAX_PROG + 1) - 1 = 10us * 150MHz + 2 * (131 + 1) - 1 = 1763&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// STROBE_READ = 40ns * 150MHz + 2 * (RELAX_READ + 1) - 1 = 40ns * 150MHz + 2 * (1 + 1) - 1 = 11,0 =&amp;gt; 11&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// If BT_FUSE_SEL (bit 4) is not set already then burn it (and FORCE_INTERNAL_BOOT)&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;!&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SRC&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SBMR2 &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; SRC_SBMR2_BT_FUSE_SEL_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// Based on ipg_clk = 132 MHz =&amp;gt; 1/f = 7.576 nS&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; timing &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING_STROBE_PROG&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1583&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING_RELAX&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;13&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING_STROBE_READ&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;9&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING_WAIT&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;19&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//ipg_clk=132MHz, Calculation described at Chapter 22.4.3 (Rev.2) OTP Read/Write Timing Parameters&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; timing2 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING2_RELAX_READ&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING2_RELAX_PROG&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;131&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// Based on ipg_clk = 150 MHz =&amp;gt; 1/f = 6.67 nS&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// int timing = OCOTP_TIMING_STROBE_PROG(1763) | OCOTP_TIMING_RELAX(14) | OCOTP_TIMING_STROBE_READ(11) | OCOTP_TIMING_WAIT(22); // ipg_clk=150MHz, Calculation described at Chapter 22.4.3 OTP Read/Write Timing Parameters&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// int timing2 = OCOTP_TIMING2_RELAX_READ(1) | OCOTP_TIMING2_RELAX_PROG(131);&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// &lt;/SPAN&gt;
  OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;TIMING &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; timing&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;TIMING2 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; timing2&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CTRL &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;OCOTP_CTRL_BUSY_SHIFT&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;||&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CTRL &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;OCOTP_CTRL_ERROR_SHIFT&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// Check that HW_OCOTP_CTRL[BUSY] and HW_OCOTP_CTRL[ERROR]are clear&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; ocotp_ctrl &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CTRL&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  ocotp_ctrl &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;~&lt;/SPAN&gt;OCOTP_CTRL_ADDR_MASK&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  ocotp_ctrl &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_CTRL_ADDR&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;6&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// Set address 6&lt;/SPAN&gt;
  ocotp_ctrl &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;~&lt;/SPAN&gt;OCOTP_CTRL_WR_UNLOCK_MASK &lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  ocotp_ctrl &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_CTRL_WR_UNLOCK&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0x3E77&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// WR_UNLOCK sequence&lt;/SPAN&gt;
  OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CTRL &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ocotp_ctrl&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// Write ADDR and unlock&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;//OCOTP-&amp;gt;DATA = (long)((1&amp;lt;&amp;lt;4)|(1&amp;lt;&amp;lt;16));// burn both BT_FUSE_SEL (1&amp;lt;&amp;lt;4) and FORCE_INTERNAL_BOOT (1&amp;lt;&amp;lt;16)&lt;/SPAN&gt;
  OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;DATA &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;4&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// burn only BT_FUSE_SEL (1&amp;lt;&amp;lt;4)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 05 Sep 2019 16:52:39 GMT</pubDate>
    <dc:creator>carstengroen</dc:creator>
    <dc:date>2019-09-05T16:52:39Z</dc:date>
    <item>
      <title>Timing for burning fuses in RT106x</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848001#M1772</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Looking at this question:&amp;nbsp;&lt;A href="https://community.nxp.com/thread/478430" rel="nofollow noopener noreferrer" target="_blank"&gt;How to burn BT_FUSE_SEL on RT1050&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;there is some code that should enable burning of the BT_FUSE_SEL and FORCE_INTERNAL_BOOT fuses. However, when I try and do the re-calculation for ipg_clk of 150 MHz, I stumpled upon what I think is an error in the original code ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a feeling that the timings above are not correct (or, very likely, I'm misunderstanding the numbers/calculations) ?&lt;/P&gt;&lt;P&gt;From the comments in the code from the link above, they are calculated for ipg_clk of 132 MHz, but if I calculate the resulting timing values using formulas in the Users Manual for 132 MHz also,&lt;/P&gt;&lt;P&gt;I get the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;// Value at the start of line is [xx] which is number of nS at 132 MHz&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;// Timing values at 132 MHz: &lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int timing = OCOTP_TIMING_STROBE_PROG(1325) | OCOTP_TIMING_RELAX(2) | OCOTP_TIMING_STROBE_READ(11) | OCOTP_TIMING_WAIT(24); // ipg_clk=132MHz, Calculation described at Chapter 22.4.3 OTP Read/Write Timing Parameters&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;// [189]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAIT = tSP_RD=(WAIT+1)/ipg_clk_freq, should be &amp;gt;= 150 ns&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;// [22.7]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RELAX = tSP_PGM=tHP_PGM=(RELAX+1)/ipg_clk_freq, should be &amp;gt;= 100ns&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;// [7818]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STROBE_PROG = tPGM = [(STROBE_PROG+1) – 2×(RELAX_PROG+1)] / ipg_clk_freq (The tPGM should be configured within the range of 9000 ns &amp;lt; tPGM &amp;lt; 11000 ns, while its recommended value is 10000 ns)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;// [30.3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STROBE_READ = tRD= [(STROBE_READ+1) – 2×(RELAX_READ+1)] / ipg_clk_freq (The tRD is required to be larger than 40 ns)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;// [30.7]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIMING2.RELAX_READ = (RELAX_READ+1) / ipg_clk_freq, should be &amp;gt;= 10 ns.&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;// [1113]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIMING2.RELAX_PROG = tSP_PG_AVDD = tHP_PG_AVDD = (RELAX_PROG+1)/ipg_clk_freq, should be &amp;gt;= 1000 ns.&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;// At default, RELAX_READ is 0x03 (3) and RELAX_PROG is 0x92 (146)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;


&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Using the numbers above, I get:&lt;/P&gt;&lt;P&gt;189 nS for the WAIT (must be &amp;gt;= 150 nS) so ok.&lt;/P&gt;&lt;P&gt;22.7 nS for the RELAX (must be &amp;gt;= 100 nS) so NOT ok&lt;/P&gt;&lt;P&gt;7818 nS for the STROBE_PROG (must be &amp;gt;9000 and &amp;lt;11000) so NOT ok&lt;/P&gt;&lt;P&gt;30.3 nS for STROBE_READ (must be &amp;gt; 40 nS) so NOT ok.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have checked the RELAX_READ and RELAX_PROG in TIMING2 register, and they are 3 and 146.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Am I totally mis-calculating this, or is there something wrong in the original code ?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Jan 2019 17:48:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848001#M1772</guid>
      <dc:creator>carstengroen</dc:creator>
      <dc:date>2019-01-02T17:48:52Z</dc:date>
    </item>
    <item>
      <title>Re: Timing for burning fuses in RT106x</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848002#M1773</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Anyone ?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 Jan 2019 09:46:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848002#M1773</guid>
      <dc:creator>carstengroen</dc:creator>
      <dc:date>2019-01-04T09:46:48Z</dc:date>
    </item>
    <item>
      <title>Re: Timing for burning fuses in RT106x</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848003#M1774</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Carsten, you are absolutely right, my values of thread &lt;A _jive_internal="true" class="link-titled" href="https://community.nxp.com/thread/478430?commentID=1097911&amp;amp;et=watches.email.thread#comment" title="https://community.nxp.com/message/1097911?commentID=1097911&amp;amp;et=watches.email.thread#comment-1097911"&gt;https://community.nxp.com/message/1097911?commentID=1097911&amp;amp;et=watches.email.thread#comment-1097911&lt;/A&gt; are not longer correct since they have changed the value tRELAX from &amp;gt;16,2ns to &amp;gt;=100ns in reference manual. As I calculated the values, I used i.MX RT1050 Processor Reference Manual Rev 0.&lt;/P&gt;&lt;P&gt;The values concerning refenence manual Rev.2 (if I have calculated them correctly) should be:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //TIMING_WAIT = 150ns * 132MHz - 1 = 18,8 =&amp;gt; 19&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//RELAX = 100ns * 132MHz - 1 = 12,2 =&amp;gt; 13&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//RELAX_READ = 10ns * 132MHz -1 = 0,32 =&amp;gt; 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//RELAX_PROG = 1000ns * 132MHz - 1 = 131&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//STROBE_PROG = 10us * 132MHz + 2 * (RELAX_PROG + 1) - 1 = 10us * 132MHz + 2 * (131 + 1) - 1 = 1583&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//STROBE_READ = 40ns * 132MHz + 2 * (RELAX_READ + 1) - 1 = 40ns * 132MHz + 2 * (1 + 1) - 1 = 8,28 =&amp;gt; 9&lt;BR /&gt;&amp;nbsp; int timing = OCOTP_TIMING_STROBE_PROG(1583) | OCOTP_TIMING_RELAX(13) | OCOTP_TIMING_STROBE_READ(9) |OCOTP_TIMING_WAIT(19); //ipg_clk=132MHz, Calculation described at Chapter 22.4.3 (Rev.2) OTP Read/Write Timing Parameters&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please let me know if you are getting same results.&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;Martin&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 08 Jan 2019 06:57:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848003#M1774</guid>
      <dc:creator>mali</dc:creator>
      <dc:date>2019-01-08T06:57:31Z</dc:date>
    </item>
    <item>
      <title>Re: Timing for burning fuses in RT106x</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848004#M1775</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks a lot Martin!&lt;/P&gt;&lt;P&gt;I was afraid I was seriously mistaken, happy I was not wrong &lt;IMG alt="Smiley Happy" class="emoticon emoticon-smileyhappy" id="smileyhappy" src="https://community.nxp.com/i/smilies/16x16_smiley-happy.png" title="Smiley Happy" /&gt;&lt;/P&gt;&lt;P&gt;I confirm the numbers above from you, fits perfectly with mine also.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have changed my comments to this:&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// Write Fuses, burn BT_FUSE_SEL (disable BT_CFG_xx pins) and burn FORCE_INTERNAL_BOOT (so that BOOT_MODE0 and BOOT_MODE1 inputs does not matter any more)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// Value at the start of line is [xx] which is number of nS at 132 MHz&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// Timing values at 132 MHz: &lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// int timing = OCOTP_TIMING_STROBE_PROG(1583) | OCOTP_TIMING_RELAX(13) | OCOTP_TIMING_STROBE_READ(9) |OCOTP_TIMING_WAIT(19); //ipg_clk=132MHz, Calculation described at Chapter 22.4.3 (Rev.2) OTP Read/Write Timing Parameters&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// [151]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WAIT = tSP_RD=(WAIT+1)/ipg_clk_freq, should be &amp;gt;= 150 ns&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// [106]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RELAX = tSP_PGM=tHP_PGM=(RELAX+1)/ipg_clk_freq, should be &amp;gt;= 100ns&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// [10015]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;STROBE_PROG = tPGM = [(STROBE_PROG+1) – 2×(RELAX_PROG+1)] / ipg_clk_freq (The tPGM should be configured within the range of 9000 ns &amp;lt; tPGM &amp;lt; 11000 ns, while its recommended value is 10000 ns)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// [45]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;STROBE_READ = tRD= [(STROBE_READ+1) – 2×(RELAX_READ+1)] / ipg_clk_freq (The tRD is required to be larger than 40 ns)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// [15.2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TIMING2.RELAX_READ = (RELAX_READ+1) / ipg_clk_freq, should be &amp;gt;= 10 ns.&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// [1000]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TIMING2.RELAX_PROG = tSP_PG_AVDD = tHP_PG_AVDD = (RELAX_PROG+1)/ipg_clk_freq, should be &amp;gt;= 1000 ns.&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// In TIMING2, RELAX_READ is set to 0x01 (1) and RELAX_PROG is 0x92 (131)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;// (At default, RELAX_READ is 0x03 (3) and RELAX_PROG is 0x92 (146))&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I will update the numbers for 150 MHz ipg_clk shortly and give it a try (once I get some extra boards manufactured so I don't risk messing my testboard up &lt;IMG alt="Smiley Wink" class="emoticon emoticon-smileywink" id="smileywink" src="https://community.nxp.com/i/smilies/16x16_smiley-wink.png" title="Smiley Wink" /&gt;)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 14:15:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848004#M1775</guid>
      <dc:creator>carstengroen</dc:creator>
      <dc:date>2020-11-02T14:15:19Z</dc:date>
    </item>
    <item>
      <title>Re: Timing for burning fuses in RT106x</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848005#M1776</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Just to wrap this up, this is the code I currently use:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;//------------------------------------------------------------------------------&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// Burn BT_FUSE_SEL and FORCE_INTERNAL_BOOT fuses&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;//------------------------------------------------------------------------------&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;setFuses&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// Write Fuses, burn BT_FUSE_SEL (disable BT_CFG_xx pins) and burn FORCE_INTERNAL_BOOT (so that BOOT_MODE0 and BOOT_MODE1 inputs does not matter any more)&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// Value at the start of line is [xx] which is number of nS at 132 MHz with the timing values below&lt;/SPAN&gt;

 &lt;SPAN class="comment token"&gt;// [151] WAIT = tSP_RD=(WAIT+1)/ipg_clk_freq, should be &amp;gt;= 150 ns&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [106] RELAX = tSP_PGM=tHP_PGM=(RELAX+1)/ipg_clk_freq, should be &amp;gt;= 100ns&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [10015] STROBE_PROG = tPGM = [(STROBE_PROG+1) – 2×(RELAX_PROG+1)] / ipg_clk_freq (The tPGM should be configured within the range of 9000 ns &amp;lt; tPGM &amp;lt; 11000 ns, while its recommended value is 10000 ns)&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [45]  STROBE_READ = tRD= [(STROBE_READ+1) – 2×(RELAX_READ+1)] / ipg_clk_freq (The tRD is required to be larger than 40 ns)&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [15.2] TIMING2.RELAX_READ = (RELAX_READ+1) / ipg_clk_freq, should be &amp;gt;= 10 ns.&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// [1000] TIMING2.RELAX_PROG = tSP_PG_AVDD = tHP_PG_AVDD = (RELAX_PROG+1)/ipg_clk_freq, should be &amp;gt;= 1000 ns.&lt;/SPAN&gt;
 
 &lt;SPAN class="comment token"&gt;// In TIMING2, RELAX_READ is set to 0x01 (1) and RELAX_PROG is 0x92 (131)&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// (At default, RELAX_READ is 0x03 (3) and RELAX_PROG is 0x92 (146))&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// For 132 MHz:&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// TIMING_WAIT = 150ns * 132MHz - 1 = 18,8 =&amp;gt; 19&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX = 100ns * 132MHz - 1 = 12,2 =&amp;gt; 13&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX_READ = 10ns * 132MHz -1 = 0,32 =&amp;gt; 1&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX_PROG = 1000ns * 132MHz - 1 = 131&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// STROBE_PROG = 10us * 132MHz + 2 * (RELAX_PROG + 1) - 1 = 10us * 132MHz + 2 * (131 + 1) - 1 = 1583&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// STROBE_READ = 40ns * 132MHz + 2 * (RELAX_READ + 1) - 1 = 40ns * 132MHz + 2 * (1 + 1) - 1 = 8,28 =&amp;gt; 9&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// For 150 MHz:&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// TIMING_WAIT = 150ns * 150MHz - 1 = 21,5 =&amp;gt; 22&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX = 100ns * 150MHz - 1 = 14,0 =&amp;gt; 14&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX_READ = 10ns * 150MHz - 1 = 0,5 =&amp;gt; 1&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// RELAX_PROG = 1000ns * 150MHz - 1 = 149&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// STROBE_PROG = 10us * 150MHz + 2 * (RELAX_PROG + 1) - 1 = 10us * 150MHz + 2 * (131 + 1) - 1 = 1763&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// STROBE_READ = 40ns * 150MHz + 2 * (RELAX_READ + 1) - 1 = 40ns * 150MHz + 2 * (1 + 1) - 1 = 11,0 =&amp;gt; 11&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;// If BT_FUSE_SEL (bit 4) is not set already then burn it (and FORCE_INTERNAL_BOOT)&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;!&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SRC&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SBMR2 &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; SRC_SBMR2_BT_FUSE_SEL_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// Based on ipg_clk = 132 MHz =&amp;gt; 1/f = 7.576 nS&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; timing &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING_STROBE_PROG&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1583&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING_RELAX&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;13&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING_STROBE_READ&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;9&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING_WAIT&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;19&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//ipg_clk=132MHz, Calculation described at Chapter 22.4.3 (Rev.2) OTP Read/Write Timing Parameters&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; timing2 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING2_RELAX_READ&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_TIMING2_RELAX_PROG&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;131&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// Based on ipg_clk = 150 MHz =&amp;gt; 1/f = 6.67 nS&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// int timing = OCOTP_TIMING_STROBE_PROG(1763) | OCOTP_TIMING_RELAX(14) | OCOTP_TIMING_STROBE_READ(11) | OCOTP_TIMING_WAIT(22); // ipg_clk=150MHz, Calculation described at Chapter 22.4.3 OTP Read/Write Timing Parameters&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// int timing2 = OCOTP_TIMING2_RELAX_READ(1) | OCOTP_TIMING2_RELAX_PROG(131);&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;// &lt;/SPAN&gt;
  OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;TIMING &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; timing&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;TIMING2 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; timing2&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CTRL &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;OCOTP_CTRL_BUSY_SHIFT&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;||&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CTRL &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;OCOTP_CTRL_ERROR_SHIFT&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// Check that HW_OCOTP_CTRL[BUSY] and HW_OCOTP_CTRL[ERROR]are clear&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; ocotp_ctrl &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CTRL&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  ocotp_ctrl &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;~&lt;/SPAN&gt;OCOTP_CTRL_ADDR_MASK&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  ocotp_ctrl &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_CTRL_ADDR&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;6&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// Set address 6&lt;/SPAN&gt;
  ocotp_ctrl &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;~&lt;/SPAN&gt;OCOTP_CTRL_WR_UNLOCK_MASK &lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  ocotp_ctrl &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OCOTP_CTRL_WR_UNLOCK&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0x3E77&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// WR_UNLOCK sequence&lt;/SPAN&gt;
  OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CTRL &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ocotp_ctrl&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// Write ADDR and unlock&lt;/SPAN&gt;
  &lt;SPAN class="comment token"&gt;//OCOTP-&amp;gt;DATA = (long)((1&amp;lt;&amp;lt;4)|(1&amp;lt;&amp;lt;16));// burn both BT_FUSE_SEL (1&amp;lt;&amp;lt;4) and FORCE_INTERNAL_BOOT (1&amp;lt;&amp;lt;16)&lt;/SPAN&gt;
  OCOTP&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;DATA &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;4&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// burn only BT_FUSE_SEL (1&amp;lt;&amp;lt;4)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Sep 2019 16:52:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Timing-for-burning-fuses-in-RT106x/m-p/848005#M1776</guid>
      <dc:creator>carstengroen</dc:creator>
      <dc:date>2019-09-05T16:52:39Z</dc:date>
    </item>
  </channel>
</rss>

