MCUXpresso_LPC55S69/docs/MCUXpresso SDK API Referenc.../a00264.html

296 lines
16 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: PUF: Physical Unclonable Function</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('a00264.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="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> </div>
<div class="headertitle">
<div class="title">PUF: Physical Unclonable Function</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 Physical Unclonable Function (PUF) module of MCUXpresso SDK devices. The PUF controller provides a secure key storage without injecting or provisioning device unique PUF root key.</p>
<p>Blocking synchronous APIs are provided for generating the activation code, intrinsic key generation, storing and reconstructing keys using PUF hardware. The PUF operations are complete (and results are made availabe for further usage) when a function returns. When called, these functions do not return until an PUF operation is complete. These functions use main CPU for simple polling loops to determine operation complete or error status. The driver functions are not re-entrant. These functions provide typical interface to upper layer or application software.</p>
<h1><a class="anchor" id="PUFInit"></a>
PUF Driver Initialization and deinitialization</h1>
<p>PUF Driver is initialized by calling the PUF_Init() function, it resets the PUF module, enables it's clock and enables power to PUF SRAM. PUF Driver is deinitialized by calling the PUF_Deinit() function, it disables PUF module clock, asserts peripheral reset and disables power to PUF SRAM.</p>
<h1><a class="anchor" id="PUFRtos"></a>
Comments about API usage in RTOS</h1>
<p>PUF operations provided by this driver are not re-entrant. Thus, application software shall ensure the PUF module operation is not requested from different tasks or interrupt service routines while an operation is in progress.</p>
<h1><a class="anchor" id="PUFIsr"></a>
Comments about API usage in interrupt handler</h1>
<p>All APIs can be used from interrupt handler although execution time shall be considered (interrupt latency of equal and lower priority interrupts increases).</p>
<h1><a class="anchor" id="PUFEx"></a>
PUF Driver Examples</h1>
<h2><a class="anchor" id="PUFSimpleEx"></a>
Simple examples</h2>
<p>Refer to the driver examples codes located at &lt;SDK_ROOT&gt;/boards/&lt;BOARD&gt;/driver_examples/puf </p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga3bdc651e62070fc7cdb52c3f1197fc84"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#ga3bdc651e62070fc7cdb52c3f1197fc84">PUF_GET_KEY_CODE_SIZE_FOR_KEY_SIZE</a>(x)&#160;&#160;&#160;((160u + (((((x) &lt;&lt; 3) + 255u) &gt;&gt; 8) &lt;&lt; 8)) &gt;&gt; 3)</td></tr>
<tr class="memdesc:ga3bdc651e62070fc7cdb52c3f1197fc84"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get Key Code size in bytes from key size in bytes at compile time. <a href="#ga3bdc651e62070fc7cdb52c3f1197fc84">More...</a><br/></td></tr>
<tr class="separator:ga3bdc651e62070fc7cdb52c3f1197fc84"><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:ga5905e02be9ed347f883ea4d694eb0baa"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00264.html#ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d">_puf_key_slot</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#ga5905e02be9ed347f883ea4d694eb0baa">puf_key_slot_t</a></td></tr>
<tr class="memdesc:ga5905e02be9ed347f883ea4d694eb0baa"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF key slot. <a href="#ga5905e02be9ed347f883ea4d694eb0baa">More...</a><br/></td></tr>
<tr class="separator:ga5905e02be9ed347f883ea4d694eb0baa"><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:ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d">_puf_key_slot</a> { <br/>
&#160;&#160;<a class="el" href="a00264.html#gga68d4d5d0fdfb5ceb3c1fdbcfb92e427dabc4b46985695e9640df2093f937be7f2">kPUF_KeySlot0</a> = 0U,
<br/>
&#160;&#160;<a class="el" href="a00264.html#gga68d4d5d0fdfb5ceb3c1fdbcfb92e427dad944437798712d481221671c3cd08212">kPUF_KeySlot1</a> = 1U
<br/>
}</td></tr>
<tr class="memdesc:ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF key slot. <a href="a00264.html#ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d">More...</a><br/></td></tr>
<tr class="separator:ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaf8fd5f0e57d456151c951e0f3715fc4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"></td></tr>
<tr class="memdesc:gaaf8fd5f0e57d456151c951e0f3715fc4"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF status return codes. <a href="a00264.html#gaaf8fd5f0e57d456151c951e0f3715fc4">More...</a><br/></td></tr>
<tr class="separator:gaaf8fd5f0e57d456151c951e0f3715fc4"><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:ga7e9f1791013e2efc9bddbb202db774af"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#ga7e9f1791013e2efc9bddbb202db774af">FSL_PUF_DRIVER_VERSION</a>&#160;&#160;&#160;(<a class="el" href="a00242.html#ga812138aa3315b0c6953c1a26130bcc37">MAKE_VERSION</a>(2, 1, 6))</td></tr>
<tr class="memdesc:ga7e9f1791013e2efc9bddbb202db774af"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF driver version. <a href="#ga7e9f1791013e2efc9bddbb202db774af">More...</a><br/></td></tr>
<tr class="separator:ga7e9f1791013e2efc9bddbb202db774af"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="ga7e9f1791013e2efc9bddbb202db774af"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define FSL_PUF_DRIVER_VERSION&#160;&#160;&#160;(<a class="el" href="a00242.html#ga812138aa3315b0c6953c1a26130bcc37">MAKE_VERSION</a>(2, 1, 6))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Version 2.1.6.</p>
<p>Current version: 2.1.6</p>
<p>Change log:</p>
<ul>
<li>2.0.0<ul>
<li>Initial version.</li>
</ul>
</li>
<li>2.0.1<ul>
<li>Fixed puf_wait_usec function optimization issue.</li>
</ul>
</li>
<li>2.0.2<ul>
<li>Add PUF configuration structure and support for PUF SRAM controller. Remove magic constants.</li>
</ul>
</li>
<li>2.0.3<ul>
<li>Fix MISRA C-2012 issue.</li>
</ul>
</li>
<li>2.1.0<ul>
<li>Align driver with PUF SRAM controller registers on LPCXpresso55s16.</li>
<li>Update initizalition logic .</li>
</ul>
</li>
<li>2.1.1<ul>
<li>Fix ARMGCC build warning .</li>
</ul>
</li>
<li>2.1.2<ul>
<li>Update: Add automatic big to little endian swap for user (pre-shared) keys destinated to secret hardware bus (PUF key index 0).</li>
</ul>
</li>
<li>2.1.3<ul>
<li>Fix MISRA C-2012 issue.</li>
</ul>
</li>
<li>2.1.4<ul>
<li>Replace register uint32_t ticksCount with volatile uint32_t ticksCount in puf_wait_usec() to prevent optimization out delay loop.</li>
</ul>
</li>
<li>2.1.5<ul>
<li>Use common SDK delay in puf_wait_usec()</li>
</ul>
</li>
<li>2.1.6<ul>
<li>Changed wait time in PUF_Init(), when initialization fails it will try PUF_Powercycle() with shorter time. If this shorter time will also fail, initialization will be tried with worst case time as before. </li>
</ul>
</li>
</ul>
</div>
</div>
<a class="anchor" id="ga3bdc651e62070fc7cdb52c3f1197fc84"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PUF_GET_KEY_CODE_SIZE_FOR_KEY_SIZE</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">x</td><td>)</td>
<td>&#160;&#160;&#160;((160u + (((((x) &lt;&lt; 3) + 255u) &gt;&gt; 8) &lt;&lt; 8)) &gt;&gt; 3)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="ga5905e02be9ed347f883ea4d694eb0baa"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef enum <a class="el" href="a00264.html#ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d">_puf_key_slot</a> <a class="el" href="a00264.html#ga5905e02be9ed347f883ea4d694eb0baa">puf_key_slot_t</a></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="a00264.html#ga68d4d5d0fdfb5ceb3c1fdbcfb92e427d">_puf_key_slot</a></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="gga68d4d5d0fdfb5ceb3c1fdbcfb92e427dabc4b46985695e9640df2093f937be7f2"></a>kPUF_KeySlot0</em>&nbsp;</td><td class="fielddoc">
<p>PUF key slot 0. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="gga68d4d5d0fdfb5ceb3c1fdbcfb92e427dad944437798712d481221671c3cd08212"></a>kPUF_KeySlot1</em>&nbsp;</td><td class="fielddoc">
<p>PUF key slot 1. </p>
</td></tr>
</table>
</div>
</div>
<a class="anchor" id="gaaf8fd5f0e57d456151c951e0f3715fc4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">anonymous enum</td>
</tr>
</table>
</div><div class="memdoc">
</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>