MCUXpresso_MIMXRT1052xxxxB/docs/MCUXpresso SDK API Referenc.../a00058.html

771 lines
41 KiB
HTML

<!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">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>MCUXpresso SDK API Reference Manual: OCOTP: On Chip One-Time Programmable controller.</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="fs_logo.gif"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">MCUXpresso SDK API Reference Manual
&#160;<span id="projectnumber">Rev 2.15.000</span>
</div>
<div id="projectbrief">NXP Semiconductors</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>API&#160;Reference</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('a00058.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">OCOTP: On Chip One-Time Programmable controller.</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<p>The MCUXpresso SDK provides a peripheral driver for the OCOTP module of MCUXpresso SDK devices.</p>
<p>This section contains information describing the requirements for the on-chip eFuse OTP controller along with details about the block functionality and implementation.</p>
<h1><a class="anchor" id="OCOTPFunc"></a>
OCOTP function group</h1>
<p>The OCOTP driver support operaing API to allow read and write the fuse map.</p>
<h2><a class="anchor" id="OCOTPInit"></a>
Initialization and de-initialization</h2>
<p>The funciton <a class="el" href="a00058.html#ga54480b3c489116b8cb76053b16f02c89" title="Initializes OCOTP controller. ">OCOTP_Init()</a> is to initialize the OCOTP with peripheral base address and source clock frequency.</p>
<p>The function <a class="el" href="a00058.html#gaafffa3b5fe3f1f69f077e88ba5a7e107" title="De-initializes OCOTP controller. ">OCOTP_Deinit()</a> is to de-initialize the OCOTP controller with peripheral base address.</p>
<h2><a class="anchor" id="OCOTPReadWrite"></a>
Read and Write operation</h2>
<p>The function <a class="el" href="a00058.html#ga7a7b1cd03383fafde15157a06fdda557" title="Reload the shadow register. ">OCOTP_ReloadShadowRegister()</a> is to reload the value from the fuse map. this API should be called firstly before reading the register.</p>
<p>The <a class="el" href="a00058.html#gaecc991ccf4be0c49286fb13cba97e389" title="Read the fuse shadow register with the fuse addess. ">OCOTP_ReadFuseShadowRegister()</a> is to read the value from a given address, if operation is success, a known value will be return, othwise, a value of 0xBADABADA will be returned.</p>
<p>The function <a class="el" href="a00058.html#ga43636ab96125958c9a14fe82c176e33e" title="Write the fuse shadow register with the fuse addess and data. ">OCOTP_WriteFuseShadowRegister()</a> will write a specific value to a known address. please check the return status o make sure whether the access to register is success.</p>
<h1><a class="anchor" id="OCOTPExample"></a>
OCOTP example</h1>
<p>This example shows how to get the controller version using API. Due to the eFuse is One-Time programmable, example will only print the information of OCOTP controller version. If more operations are needed, please using the API to implement the write and read operation.</p>
<p>Refer to the driver examples codes located at &lt;SDK_ROOT&gt;/boards/&lt;BOARD&gt;/driver_examples/ocotp </p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:a00459"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a00459">_ocotp_timing</a></td></tr>
<tr class="memdesc:a00459"><td class="mdescLeft">&#160;</td><td class="mdescRight">OCOTP timing structure. <a href="a00058.html#a00459">More...</a><br/></td></tr>
<tr class="separator:a00459"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga8f3dfc0636f2758f21ed76d4e7196c4f"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="a00058.html#a00459">_ocotp_timing</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ga8f3dfc0636f2758f21ed76d4e7196c4f">ocotp_timing_t</a></td></tr>
<tr class="memdesc:ga8f3dfc0636f2758f21ed76d4e7196c4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">OCOTP timing structure. <a href="#ga8f3dfc0636f2758f21ed76d4e7196c4f">More...</a><br/></td></tr>
<tr class="separator:ga8f3dfc0636f2758f21ed76d4e7196c4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga1be3860693af99a6c1da72580097294c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br/>
&#160;&#160;<a class="el" href="a00058.html#gga1be3860693af99a6c1da72580097294ca6133e2fb03bd09bc490982251048c8de">kStatus_OCOTP_AccessError</a> = MAKE_STATUS(kStatusGroup_SDK_OCOTP, 0),
<br/>
&#160;&#160;<a class="el" href="a00058.html#gga1be3860693af99a6c1da72580097294ca6c5aa99c2965029cf80feaf36cd0763a">kStatus_OCOTP_CrcFail</a> = MAKE_STATUS(kStatusGroup_SDK_OCOTP, 1),
<br/>
&#160;&#160;<a class="el" href="a00058.html#gga1be3860693af99a6c1da72580097294caa1a3a69603c6973128021852a03cf9ce">kStatus_OCOTP_ReloadError</a>,
<br/>
&#160;&#160;<a class="el" href="a00058.html#gga1be3860693af99a6c1da72580097294cae3aafd3ae27db94a954965038445d240">kStatus_OCOTP_ProgramFail</a> = MAKE_STATUS(kStatusGroup_SDK_OCOTP, 3),
<br/>
&#160;&#160;<a class="el" href="a00058.html#gga1be3860693af99a6c1da72580097294ca3a38a5c2c3c0f0146c9b773e855812a6">kStatus_OCOTP_Locked</a> = MAKE_STATUS(kStatusGroup_SDK_OCOTP, 4)
<br/>
}</td></tr>
<tr class="memdesc:ga1be3860693af99a6c1da72580097294c"><td class="mdescLeft">&#160;</td><td class="mdescRight">_ocotp_status Error codes for the OCOTP driver. <a href="a00058.html#ga1be3860693af99a6c1da72580097294c">More...</a><br/></td></tr>
<tr class="separator:ga1be3860693af99a6c1da72580097294c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga54480b3c489116b8cb76053b16f02c89"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ga54480b3c489116b8cb76053b16f02c89">OCOTP_Init</a> (OCOTP_Type *base, uint32_t srcClock_Hz)</td></tr>
<tr class="memdesc:ga54480b3c489116b8cb76053b16f02c89"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes OCOTP controller. <a href="#ga54480b3c489116b8cb76053b16f02c89">More...</a><br/></td></tr>
<tr class="separator:ga54480b3c489116b8cb76053b16f02c89"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaafffa3b5fe3f1f69f077e88ba5a7e107"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#gaafffa3b5fe3f1f69f077e88ba5a7e107">OCOTP_Deinit</a> (OCOTP_Type *base)</td></tr>
<tr class="memdesc:gaafffa3b5fe3f1f69f077e88ba5a7e107"><td class="mdescLeft">&#160;</td><td class="mdescRight">De-initializes OCOTP controller. <a href="#gaafffa3b5fe3f1f69f077e88ba5a7e107">More...</a><br/></td></tr>
<tr class="separator:gaafffa3b5fe3f1f69f077e88ba5a7e107"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa3040092099624ec476dd81bd022712c"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#gaa3040092099624ec476dd81bd022712c">OCOTP_CheckBusyStatus</a> (OCOTP_Type *base)</td></tr>
<tr class="memdesc:gaa3040092099624ec476dd81bd022712c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checking the BUSY bit in CTRL register. <a href="#gaa3040092099624ec476dd81bd022712c">More...</a><br/></td></tr>
<tr class="separator:gaa3040092099624ec476dd81bd022712c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf0ee0166ccd35b0273d468b7eb72c954"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#gaf0ee0166ccd35b0273d468b7eb72c954">OCOTP_CheckErrorStatus</a> (OCOTP_Type *base)</td></tr>
<tr class="memdesc:gaf0ee0166ccd35b0273d468b7eb72c954"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checking the ERROR bit in CTRL register. <a href="#gaf0ee0166ccd35b0273d468b7eb72c954">More...</a><br/></td></tr>
<tr class="separator:gaf0ee0166ccd35b0273d468b7eb72c954"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad9294be0c39be4dfaa1eea436ac85171"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#gad9294be0c39be4dfaa1eea436ac85171">OCOTP_ClearErrorStatus</a> (OCOTP_Type *base)</td></tr>
<tr class="memdesc:gad9294be0c39be4dfaa1eea436ac85171"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear the error bit if this bit is set. <a href="#gad9294be0c39be4dfaa1eea436ac85171">More...</a><br/></td></tr>
<tr class="separator:gad9294be0c39be4dfaa1eea436ac85171"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7a7b1cd03383fafde15157a06fdda557"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00272.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ga7a7b1cd03383fafde15157a06fdda557">OCOTP_ReloadShadowRegister</a> (OCOTP_Type *base)</td></tr>
<tr class="memdesc:ga7a7b1cd03383fafde15157a06fdda557"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reload the shadow register. <a href="#ga7a7b1cd03383fafde15157a06fdda557">More...</a><br/></td></tr>
<tr class="separator:ga7a7b1cd03383fafde15157a06fdda557"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaecc991ccf4be0c49286fb13cba97e389"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#gaecc991ccf4be0c49286fb13cba97e389">OCOTP_ReadFuseShadowRegister</a> (OCOTP_Type *base, uint32_t address)</td></tr>
<tr class="memdesc:gaecc991ccf4be0c49286fb13cba97e389"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the fuse shadow register with the fuse addess. <a href="#gaecc991ccf4be0c49286fb13cba97e389">More...</a><br/></td></tr>
<tr class="separator:gaecc991ccf4be0c49286fb13cba97e389"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa1b0f813fa5ca43225d71d9218c48a28"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00272.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#gaa1b0f813fa5ca43225d71d9218c48a28">OCOTP_ReadFuseShadowRegisterExt</a> (OCOTP_Type *base, uint32_t address, uint32_t *data, uint8_t fuseWords)</td></tr>
<tr class="memdesc:gaa1b0f813fa5ca43225d71d9218c48a28"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the fuse shadow register from the fuse addess. <a href="#gaa1b0f813fa5ca43225d71d9218c48a28">More...</a><br/></td></tr>
<tr class="separator:gaa1b0f813fa5ca43225d71d9218c48a28"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga43636ab96125958c9a14fe82c176e33e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00272.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ga43636ab96125958c9a14fe82c176e33e">OCOTP_WriteFuseShadowRegister</a> (OCOTP_Type *base, uint32_t address, uint32_t data)</td></tr>
<tr class="memdesc:ga43636ab96125958c9a14fe82c176e33e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write the fuse shadow register with the fuse addess and data. <a href="#ga43636ab96125958c9a14fe82c176e33e">More...</a><br/></td></tr>
<tr class="separator:ga43636ab96125958c9a14fe82c176e33e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4f837c7b4a66ffe3153f2975fd5c6388"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00272.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ga4f837c7b4a66ffe3153f2975fd5c6388">OCOTP_WriteFuseShadowRegisterWithLock</a> (OCOTP_Type *base, uint32_t address, uint32_t data, bool lock)</td></tr>
<tr class="memdesc:ga4f837c7b4a66ffe3153f2975fd5c6388"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write the fuse shadow register and lock it. <a href="#ga4f837c7b4a66ffe3153f2975fd5c6388">More...</a><br/></td></tr>
<tr class="separator:ga4f837c7b4a66ffe3153f2975fd5c6388"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga38c12a5cb815d9330cd8f2c04e8e1ec5"><td class="memItemLeft" align="right" valign="top">static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ga38c12a5cb815d9330cd8f2c04e8e1ec5">OCOTP_GetVersion</a> (OCOTP_Type *base)</td></tr>
<tr class="memdesc:ga38c12a5cb815d9330cd8f2c04e8e1ec5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OCOTP controller version from the register. <a href="#ga38c12a5cb815d9330cd8f2c04e8e1ec5">More...</a><br/></td></tr>
<tr class="separator:ga38c12a5cb815d9330cd8f2c04e8e1ec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
Driver version</h2></td></tr>
<tr class="memitem:ga211ad512cb6afc3a8649a61c4f887dd5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ga211ad512cb6afc3a8649a61c4f887dd5">FSL_OCOTP_DRIVER_VERSION</a>&#160;&#160;&#160;(<a class="el" href="a00272.html#ga812138aa3315b0c6953c1a26130bcc37">MAKE_VERSION</a>(2, 1, 3))</td></tr>
<tr class="memdesc:ga211ad512cb6afc3a8649a61c4f887dd5"><td class="mdescLeft">&#160;</td><td class="mdescRight">OCOTP driver version. <a href="#ga211ad512cb6afc3a8649a61c4f887dd5">More...</a><br/></td></tr>
<tr class="separator:ga211ad512cb6afc3a8649a61c4f887dd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<hr/><h2 class="groupheader">Data Structure Documentation</h2>
<a name="a00459" id="a00459"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct _ocotp_timing</td>
</tr>
</table>
</div><div class="memdoc">
<div class="textblock"><p>Note that, these value are used for calcalating the read/write timings. And the values should statisfy below rules:</p>
<p>Tsp_rd=(WAIT+1)/ipg_clk_freq should be &gt;= 150ns; Tsp_pgm=(RELAX+1)/ipg_clk_freq should be &gt;= 100ns; Trd = ((STROBE_READ+1)- 2*(RELAX_READ+1)) /ipg_clk_freq, The Trd is required to be larger than 40 ns. Tpgm = ((STROBE_PROG+1)- 2*(RELAX_PROG+1)) /ipg_clk_freq; The Tpgm should be configured within the range of 9000 ns &lt; Tpgm &lt; 11000 ns; </p>
</div><table class="memberdecls">
<tr><td colspan="2"><h3>Data Fields</h3></td></tr>
<tr class="memitem:a209b71517255bb7c7de795f2aa940d74"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a209b71517255bb7c7de795f2aa940d74">wait</a></td></tr>
<tr class="memdesc:a209b71517255bb7c7de795f2aa940d74"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait time value to fill in the TIMING register. <a href="#a209b71517255bb7c7de795f2aa940d74">More...</a><br/></td></tr>
<tr class="separator:a209b71517255bb7c7de795f2aa940d74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afe864c7e56ce16eea8845349a8246a73"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#afe864c7e56ce16eea8845349a8246a73">relax</a></td></tr>
<tr class="memdesc:afe864c7e56ce16eea8845349a8246a73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Relax time value to fill in the TIMING register. <a href="#afe864c7e56ce16eea8845349a8246a73">More...</a><br/></td></tr>
<tr class="separator:afe864c7e56ce16eea8845349a8246a73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6dc87b120b1b5ef51f7aa07b9d21f37b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a6dc87b120b1b5ef51f7aa07b9d21f37b">strobe_prog</a></td></tr>
<tr class="memdesc:a6dc87b120b1b5ef51f7aa07b9d21f37b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Storbe program time value to fill in the TIMING register. <a href="#a6dc87b120b1b5ef51f7aa07b9d21f37b">More...</a><br/></td></tr>
<tr class="separator:a6dc87b120b1b5ef51f7aa07b9d21f37b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebc7d26f1553dd924b5868a66ec8e417"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#aebc7d26f1553dd924b5868a66ec8e417">strobe_read</a></td></tr>
<tr class="memdesc:aebc7d26f1553dd924b5868a66ec8e417"><td class="mdescLeft">&#160;</td><td class="mdescRight">Storbe read time value to fill in the TIMING register. <a href="#aebc7d26f1553dd924b5868a66ec8e417">More...</a><br/></td></tr>
<tr class="separator:aebc7d26f1553dd924b5868a66ec8e417"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h4 class="groupheader">Field Documentation</h4>
<a class="anchor" id="a209b71517255bb7c7de795f2aa940d74"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t _ocotp_timing::wait</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="afe864c7e56ce16eea8845349a8246a73"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t _ocotp_timing::relax</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a6dc87b120b1b5ef51f7aa07b9d21f37b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t _ocotp_timing::strobe_prog</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="aebc7d26f1553dd924b5868a66ec8e417"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t _ocotp_timing::strobe_read</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
</div>
</div>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="ga211ad512cb6afc3a8649a61c4f887dd5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define FSL_OCOTP_DRIVER_VERSION&#160;&#160;&#160;(<a class="el" href="a00272.html#ga812138aa3315b0c6953c1a26130bcc37">MAKE_VERSION</a>(2, 1, 3))</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="ga8f3dfc0636f2758f21ed76d4e7196c4f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="a00058.html#a00459">_ocotp_timing</a> <a class="el" href="a00058.html#ga8f3dfc0636f2758f21ed76d4e7196c4f">ocotp_timing_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Note that, these value are used for calcalating the read/write timings. And the values should statisfy below rules:</p>
<p>Tsp_rd=(WAIT+1)/ipg_clk_freq should be &gt;= 150ns; Tsp_pgm=(RELAX+1)/ipg_clk_freq should be &gt;= 100ns; Trd = ((STROBE_READ+1)- 2*(RELAX_READ+1)) /ipg_clk_freq, The Trd is required to be larger than 40 ns. Tpgm = ((STROBE_PROG+1)- 2*(RELAX_PROG+1)) /ipg_clk_freq; The Tpgm should be configured within the range of 9000 ns &lt; Tpgm &lt; 11000 ns; </p>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga1be3860693af99a6c1da72580097294c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">anonymous enum</td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="gga1be3860693af99a6c1da72580097294ca6133e2fb03bd09bc490982251048c8de"></a>kStatus_OCOTP_AccessError</em>&nbsp;</td><td class="fielddoc">
<p>eFuse and shadow register access error. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="gga1be3860693af99a6c1da72580097294ca6c5aa99c2965029cf80feaf36cd0763a"></a>kStatus_OCOTP_CrcFail</em>&nbsp;</td><td class="fielddoc">
<p>CRC check failed. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="gga1be3860693af99a6c1da72580097294caa1a3a69603c6973128021852a03cf9ce"></a>kStatus_OCOTP_ReloadError</em>&nbsp;</td><td class="fielddoc">
<p>Error happens during reload shadow register. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="gga1be3860693af99a6c1da72580097294cae3aafd3ae27db94a954965038445d240"></a>kStatus_OCOTP_ProgramFail</em>&nbsp;</td><td class="fielddoc">
<p>Fuse programming failed. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="gga1be3860693af99a6c1da72580097294ca3a38a5c2c3c0f0146c9b773e855812a6"></a>kStatus_OCOTP_Locked</em>&nbsp;</td><td class="fielddoc">
<p>Fuse is locked and cannot be programmed. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga54480b3c489116b8cb76053b16f02c89"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void OCOTP_Init </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>srcClock_Hz</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
<tr><td class="paramname">srcClock_Hz</td><td>source clock frequency in unit of Hz. When the macro FSL_FEATURE_OCOTP_HAS_TIMING_CTRL is defined as 0, this parameter is not used, application could pass in 0 in this case. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaafffa3b5fe3f1f69f077e88ba5a7e107"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void OCOTP_Deinit </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>upon successful execution, error status otherwise. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaa3040092099624ec476dd81bd022712c"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool OCOTP_CheckBusyStatus </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checking this BUSY bit will help confirm if the OCOTP controller is ready for access.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">true</td><td>for bit set and false for cleared. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaf0ee0166ccd35b0273d468b7eb72c954"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool OCOTP_CheckErrorStatus </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">true</td><td>for bit set and false for cleared. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gad9294be0c39be4dfaa1eea436ac85171"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void OCOTP_ClearErrorStatus </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga7a7b1cd03383fafde15157a06fdda557"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00272.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> OCOTP_ReloadShadowRegister </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function will help reload the shadow register without reseting the OCOTP module. Please make sure the OCOTP has been initialized before calling this API.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base addess. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Reload success. </td></tr>
<tr><td class="paramname">kStatus_OCOTP_ReloadError</td><td>Reload failed. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaecc991ccf4be0c49286fb13cba97e389"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t OCOTP_ReadFuseShadowRegister </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>address</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="deprecated"><dt><b><a class="el" href="a00309.html#_deprecated000011">Deprecated:</a></b></dt><dd>Use <a class="el" href="a00058.html#gaa1b0f813fa5ca43225d71d9218c48a28">OCOTP_ReadFuseShadowRegisterExt</a> instead of this function.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
<tr><td class="paramname">address</td><td>the fuse address to be read from. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The read out data. </dd></dl>
</div>
</div>
<a class="anchor" id="gaa1b0f813fa5ca43225d71d9218c48a28"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00272.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> OCOTP_ReadFuseShadowRegisterExt </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>fuseWords</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function reads fuse from <code>address</code>, how many words to read is specified by the parameter <code>fuseWords</code>. This function could read at most OCOTP_READ_FUSE_DATA_COUNT fuse word one time.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
<tr><td class="paramname">address</td><td>the fuse address to be read from. </td></tr>
<tr><td class="paramname">data</td><td>Data array to save the readout fuse value. </td></tr>
<tr><td class="paramname">fuseWords</td><td>How many words to read. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Read success. </td></tr>
<tr><td class="paramname">kStatus_Fail</td><td>Error occurs during read. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga43636ab96125958c9a14fe82c176e33e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00272.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> OCOTP_WriteFuseShadowRegister </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Please make sure the wrtie address is not locked while calling this API.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
<tr><td class="paramname">address</td><td>the fuse address to be written. </td></tr>
<tr><td class="paramname">data</td><td>the value will be writen to fuse address. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">write</td><td>status, kStatus_Success for success and kStatus_Fail for failed. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga4f837c7b4a66ffe3153f2975fd5c6388"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00272.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> OCOTP_WriteFuseShadowRegisterWithLock </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lock</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Please make sure the wrtie address is not locked while calling this API.</p>
<p>Some OCOTP controller supports ECC mode and redundancy mode (see reference mananual for more details). OCOTP controller will auto select ECC or redundancy mode to program the fuse word according to fuse map definition. In ECC mode, the 32 fuse bits in one word can only be written once. In redundancy mode, the word can be written more than once as long as they are different fuse bits. Set parameter <code>lock</code> as true to force use ECC mode.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
<tr><td class="paramname">address</td><td>The fuse address to be written. </td></tr>
<tr><td class="paramname">data</td><td>The value will be writen to fuse address. </td></tr>
<tr><td class="paramname">lock</td><td>Lock or unlock write fuse shadow register operation. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Program and reload success. </td></tr>
<tr><td class="paramname">kStatus_OCOTP_Locked</td><td>The eFuse word is locked and cannot be programmed. </td></tr>
<tr><td class="paramname">kStatus_OCOTP_ProgramFail</td><td>eFuse word programming failed. </td></tr>
<tr><td class="paramname">kStatus_OCOTP_ReloadError</td><td>eFuse word programming success, but error happens during reload the values. </td></tr>
<tr><td class="paramname">kStatus_OCOTP_AccessError</td><td>Cannot access eFuse word. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga38c12a5cb815d9330cd8f2c04e8e1ec5"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static uint32_t OCOTP_GetVersion </td>
<td>(</td>
<td class="paramtype">OCOTP_Type *&#160;</td>
<td class="paramname"><em>base</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>OCOTP peripheral base address. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">return</td><td>the version value. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.5-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul class="foot">
<li class="footer">&copy; 2016 NXP Semiconductors. All rights reserved.
</li>
</ul>
</div>
</body>
</html>