]> begriffs open source - cmsis/blob - main/Driver/group__nand__interface__gr.html
Update documentation for branch main
[cmsis] / main / Driver / group__nand__interface__gr.html
1 <!-- HTML header for doxygen 1.9.6-->
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
4 <head>
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=11"/>
7 <meta name="viewport" content="width=device-width, initial-scale=1"/>
8 <title>CMSIS-Driver: NAND Interface</title>
9 <link href="doxygen.css" rel="stylesheet" type="text/css" />
10 <script type="text/javascript" src="jquery.js"></script>
11 <script type="text/javascript" src="dynsections.js"></script>
12 <script type="text/javascript" src="tabs.js"></script>
13 <script type="text/javascript" src="footer.js"></script>
14 <script type="text/javascript" src="navtree.js"></script>
15 <link href="navtree.css" rel="stylesheet" type="text/css"/>
16 <script type="text/javascript" src="resize.js"></script>
17 <script type="text/javascript" src="navtreedata.js"></script>
18 <script type="text/javascript" src="navtree.js"></script>
19 <link href="search/search.css" rel="stylesheet" type="text/css"/>
20 <script type="text/javascript" src="search/searchdata.js"></script>
21 <script type="text/javascript" src="search/search.js"></script>
22 <script type="text/javascript">
23 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
24   $(document).ready(function() { init_search(); });
25 /* @license-end */
26 </script>
27 <script type="text/javascript" src="darkmode_toggle.js"></script>
28 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
29 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
30 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
31 <link href="extra_tabs.css" rel="stylesheet" type="text/css"/>
32 <link href="version.css" rel="stylesheet" type="text/css"/>
33 <script type="text/javascript" src="../../version.js"></script>
34 </head>
35 <body>
36 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
37 <div id="titlearea">
38 <table cellspacing="0" cellpadding="0">
39  <tbody>
40  <tr style="height: 55px;">
41   <td id="projectlogo" style="padding: 1.5em;"><img alt="Logo" src="cmsis_logo_white_small.png"/></td>
42   <td style="padding-left: 1em; padding-bottom: 1em;padding-top: 1em;">
43    <div id="projectname">CMSIS-Driver
44    &#160;<span id="projectnumber"><script type="text/javascript">
45      <!--
46      writeHeader.call(this);
47      writeVersionDropdown.call(this, "CMSIS-Driver");
48      //-->
49     </script>
50    </span>
51    </div>
52    <div id="projectbrief">Peripheral Interface for Middleware and Application Code</div>
53   </td>
54    <td>        <div id="MSearchBox" class="MSearchBoxInactive">
55         <span class="left">
56           <span id="MSearchSelect"                onmouseover="return searchBox.OnSearchSelectShow()"                onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
57           <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
58                onfocus="searchBox.OnSearchFieldFocus(true)" 
59                onblur="searchBox.OnSearchFieldFocus(false)" 
60                onkeyup="searchBox.OnSearchFieldChange(event)"/>
61           </span><span class="right">
62             <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
63           </span>
64         </div>
65 </td>
66   <!--END !PROJECT_NAME-->
67  </tr>
68  </tbody>
69 </table>
70 </div>
71 <!-- end header part -->
72 <div id="CMSISnav" class="tabs1">
73   <ul class="tablist">
74     <script type="text/javascript">
75       writeComponentTabs.call(this);
76     </script>
77   </ul>
78 </div>
79 <script type="text/javascript">
80   writeSubComponentTabs.call(this);
81 </script>
82 <!-- Generated by Doxygen 1.9.6 -->
83 <script type="text/javascript">
84 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
85 var searchBox = new SearchBox("searchBox", "search/",'.html');
86 /* @license-end */
87 </script>
88 </div><!-- top -->
89 <div id="side-nav" class="ui-resizable side-nav-resizable">
90   <div id="nav-tree">
91     <div id="nav-tree-contents">
92       <div id="nav-sync" class="sync"></div>
93     </div>
94   </div>
95   <div id="splitbar" style="-moz-user-select:none;" 
96        class="ui-resizable-handle">
97   </div>
98 </div>
99 <script type="text/javascript">
100 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
101 $(document).ready(function(){initNavTree('group__nand__interface__gr.html',''); initResizable(); });
102 /* @license-end */
103 </script>
104 <div id="doc-content">
105 <!-- window showing the filter options -->
106 <div id="MSearchSelectWindow"
107      onmouseover="return searchBox.OnSearchSelectShow()"
108      onmouseout="return searchBox.OnSearchSelectHide()"
109      onkeydown="return searchBox.OnSearchSelectKey(event)">
110 </div>
111
112 <!-- iframe showing the search results (closed by default) -->
113 <div id="MSearchResultsWindow">
114 <div id="MSearchResults">
115 <div class="SRPage">
116 <div id="SRIndex">
117 <div id="SRResults"></div>
118 <div class="SRStatus" id="Loading">Loading...</div>
119 <div class="SRStatus" id="Searching">Searching...</div>
120 <div class="SRStatus" id="NoMatches">No Matches</div>
121 </div>
122 </div>
123 </div>
124 </div>
125
126 <div class="header">
127   <div class="summary">
128 <a href="#groups">Content</a> &#124;
129 <a href="#nested-classes">Data Structures</a> &#124;
130 <a href="#typedef-members">Typedefs</a> &#124;
131 <a href="#func-members">Functions</a>  </div>
132   <div class="headertitle"><div class="title">NAND Interface</div></div>
133 </div><!--header-->
134 <div class="contents">
135
136 <p>Driver API for NAND Flash Device Interface (Driver_NAND.h).  
137 <a href="#details">More...</a></p>
138 <table class="memberdecls">
139 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="groups" name="groups"></a>
140 Content</h2></td></tr>
141 <tr class="memitem:group__nand__execution__status"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__execution__status.html">NAND Status Error Codes</a></td></tr>
142 <tr class="memdesc:group__nand__execution__status"><td class="mdescLeft">&#160;</td><td class="mdescRight">Negative values indicate errors (NAND has specific codes in addition to common <a class="el" href="group__execution__status.html">Status Error Codes</a>). <br /></td></tr>
143 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
144 <tr class="memitem:group__NAND__events"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NAND__events.html">NAND Events</a></td></tr>
145 <tr class="memdesc:group__NAND__events"><td class="mdescLeft">&#160;</td><td class="mdescRight">The NAND driver generates call back events that are notified via the function <a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a>. <br /></td></tr>
146 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
147 <tr class="memitem:group__nand__driver__flag__codes"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__driver__flag__codes.html">NAND Flags</a></td></tr>
148 <tr class="memdesc:group__nand__driver__flag__codes"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify Flag codes. <br /></td></tr>
149 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
150 <tr class="memitem:group__nand__control__gr"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__control__gr.html">NAND Control Codes</a></td></tr>
151 <tr class="memdesc:group__nand__control__gr"><td class="mdescLeft">&#160;</td><td class="mdescRight">Many parameters of the NAND driver are configured using the <a class="el" href="group__nand__interface__gr.html#ga83061d6d53ffb148853efbc87a864607">ARM_NAND_Control</a> function. <br /></td></tr>
152 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
153 <tr class="memitem:group__nand__driver__ecc__codes"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__driver__ecc__codes.html">NAND ECC Codes</a></td></tr>
154 <tr class="memdesc:group__nand__driver__ecc__codes"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify ECC codes. <br /></td></tr>
155 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
156 <tr class="memitem:group__nand__driver__seq__exec__codes"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__driver__seq__exec__codes.html">NAND Sequence Execution Codes</a></td></tr>
157 <tr class="memdesc:group__nand__driver__seq__exec__codes"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify execution codes. <br /></td></tr>
158 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
159 </table><table class="memberdecls">
160 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
161 Data Structures</h2></td></tr>
162 <tr class="memitem:structARM__NAND__STATUS"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__STATUS">ARM_NAND_STATUS</a></td></tr>
163 <tr class="memdesc:structARM__NAND__STATUS"><td class="mdescLeft">&#160;</td><td class="mdescRight">NAND Status.  <a href="group__nand__interface__gr.html#structARM__NAND__STATUS">More...</a><br /></td></tr>
164 <tr class="separator:structARM__NAND__STATUS"><td class="memSeparator" colspan="2">&#160;</td></tr>
165 <tr class="memitem:structARM__DRIVER__NAND"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a></td></tr>
166 <tr class="memdesc:structARM__DRIVER__NAND"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access structure of the NAND Driver.  <a href="group__nand__interface__gr.html#structARM__DRIVER__NAND">More...</a><br /></td></tr>
167 <tr class="separator:structARM__DRIVER__NAND"><td class="memSeparator" colspan="2">&#160;</td></tr>
168 <tr class="memitem:structARM__NAND__CAPABILITIES"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a></td></tr>
169 <tr class="memdesc:structARM__NAND__CAPABILITIES"><td class="mdescLeft">&#160;</td><td class="mdescRight">NAND Driver Capabilities.  <a href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">More...</a><br /></td></tr>
170 <tr class="separator:structARM__NAND__CAPABILITIES"><td class="memSeparator" colspan="2">&#160;</td></tr>
171 <tr class="memitem:structARM__NAND__ECC__INFO"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a></td></tr>
172 <tr class="memdesc:structARM__NAND__ECC__INFO"><td class="mdescLeft">&#160;</td><td class="mdescRight">NAND ECC (Error Correction Code) Information.  <a href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">More...</a><br /></td></tr>
173 <tr class="separator:structARM__NAND__ECC__INFO"><td class="memSeparator" colspan="2">&#160;</td></tr>
174 </table><table class="memberdecls">
175 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
176 Typedefs</h2></td></tr>
177 <tr class="memitem:ga09f4cf2f2df0bb690bce38b13d77e50f"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga09f4cf2f2df0bb690bce38b13d77e50f">ARM_NAND_SignalEvent_t</a>) (uint32_t dev_num, uint32_t event)</td></tr>
178 <tr class="memdesc:ga09f4cf2f2df0bb690bce38b13d77e50f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a> : Signal NAND Event.  <br /></td></tr>
179 <tr class="separator:ga09f4cf2f2df0bb690bce38b13d77e50f"><td class="memSeparator" colspan="2">&#160;</td></tr>
180 </table><table class="memberdecls">
181 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
182 Functions</h2></td></tr>
183 <tr class="memitem:ga01255fd4f15e7fa4751c7ea59648ef5a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga01255fd4f15e7fa4751c7ea59648ef5a">ARM_NAND_GetVersion</a> (void)</td></tr>
184 <tr class="memdesc:ga01255fd4f15e7fa4751c7ea59648ef5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get driver version.  <br /></td></tr>
185 <tr class="separator:ga01255fd4f15e7fa4751c7ea59648ef5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
186 <tr class="memitem:ga9f2609975c2008d21b9ae28f15daf147"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga9f2609975c2008d21b9ae28f15daf147">ARM_NAND_GetCapabilities</a> (void)</td></tr>
187 <tr class="memdesc:ga9f2609975c2008d21b9ae28f15daf147"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get driver capabilities.  <br /></td></tr>
188 <tr class="separator:ga9f2609975c2008d21b9ae28f15daf147"><td class="memSeparator" colspan="2">&#160;</td></tr>
189 <tr class="memitem:ga74ad34718a595e7a4375b90f33e72750"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga74ad34718a595e7a4375b90f33e72750">ARM_NAND_Initialize</a> (<a class="el" href="group__nand__interface__gr.html#ga09f4cf2f2df0bb690bce38b13d77e50f">ARM_NAND_SignalEvent_t</a> cb_event)</td></tr>
190 <tr class="memdesc:ga74ad34718a595e7a4375b90f33e72750"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize the NAND Interface.  <br /></td></tr>
191 <tr class="separator:ga74ad34718a595e7a4375b90f33e72750"><td class="memSeparator" colspan="2">&#160;</td></tr>
192 <tr class="memitem:gaa788b638ab696b166fee2f4a4bc8d97a"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#gaa788b638ab696b166fee2f4a4bc8d97a">ARM_NAND_Uninitialize</a> (void)</td></tr>
193 <tr class="memdesc:gaa788b638ab696b166fee2f4a4bc8d97a"><td class="mdescLeft">&#160;</td><td class="mdescRight">De-initialize the NAND Interface.  <br /></td></tr>
194 <tr class="separator:gaa788b638ab696b166fee2f4a4bc8d97a"><td class="memSeparator" colspan="2">&#160;</td></tr>
195 <tr class="memitem:ga9c9975637980b5d42db7baba0191fda1"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga9c9975637980b5d42db7baba0191fda1">ARM_NAND_PowerControl</a> (<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td></tr>
196 <tr class="memdesc:ga9c9975637980b5d42db7baba0191fda1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control the NAND interface power.  <br /></td></tr>
197 <tr class="separator:ga9c9975637980b5d42db7baba0191fda1"><td class="memSeparator" colspan="2">&#160;</td></tr>
198 <tr class="memitem:ga11adcbaaace09746581a36befbd563c9"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga11adcbaaace09746581a36befbd563c9">ARM_NAND_DevicePower</a> (uint32_t voltage)</td></tr>
199 <tr class="memdesc:ga11adcbaaace09746581a36befbd563c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set device power supply voltage.  <br /></td></tr>
200 <tr class="separator:ga11adcbaaace09746581a36befbd563c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
201 <tr class="memitem:ga1987e65a4e756d748db86332c9fb1cec"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga1987e65a4e756d748db86332c9fb1cec">ARM_NAND_WriteProtect</a> (uint32_t dev_num, bool enable)</td></tr>
202 <tr class="memdesc:ga1987e65a4e756d748db86332c9fb1cec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control WPn (Write Protect).  <br /></td></tr>
203 <tr class="separator:ga1987e65a4e756d748db86332c9fb1cec"><td class="memSeparator" colspan="2">&#160;</td></tr>
204 <tr class="memitem:ga1c0cba87cb7b706ad5986dc67c831ad1"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga1c0cba87cb7b706ad5986dc67c831ad1">ARM_NAND_ChipEnable</a> (uint32_t dev_num, bool enable)</td></tr>
205 <tr class="memdesc:ga1c0cba87cb7b706ad5986dc67c831ad1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control CEn (Chip Enable).  <br /></td></tr>
206 <tr class="separator:ga1c0cba87cb7b706ad5986dc67c831ad1"><td class="memSeparator" colspan="2">&#160;</td></tr>
207 <tr class="memitem:ga43011066306bd716b580e6aa9a80cf65"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga43011066306bd716b580e6aa9a80cf65">ARM_NAND_GetDeviceBusy</a> (uint32_t dev_num)</td></tr>
208 <tr class="memdesc:ga43011066306bd716b580e6aa9a80cf65"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get Device Busy pin state.  <br /></td></tr>
209 <tr class="separator:ga43011066306bd716b580e6aa9a80cf65"><td class="memSeparator" colspan="2">&#160;</td></tr>
210 <tr class="memitem:ga9f70b89ba478eadfe7f5dee7453a4fb7"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga9f70b89ba478eadfe7f5dee7453a4fb7">ARM_NAND_SendCommand</a> (uint32_t dev_num, uint8_t cmd)</td></tr>
211 <tr class="memdesc:ga9f70b89ba478eadfe7f5dee7453a4fb7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Send command to NAND device.  <br /></td></tr>
212 <tr class="separator:ga9f70b89ba478eadfe7f5dee7453a4fb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
213 <tr class="memitem:ga00e195031e03d364db7595858a7e76f3"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga00e195031e03d364db7595858a7e76f3">ARM_NAND_SendAddress</a> (uint32_t dev_num, uint8_t addr)</td></tr>
214 <tr class="memdesc:ga00e195031e03d364db7595858a7e76f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Send address to NAND device.  <br /></td></tr>
215 <tr class="separator:ga00e195031e03d364db7595858a7e76f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
216 <tr class="memitem:gae1899a20ef107400c8bf84fad477a8ce"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#gae1899a20ef107400c8bf84fad477a8ce">ARM_NAND_ReadData</a> (uint32_t dev_num, void *data, uint32_t cnt, uint32_t mode)</td></tr>
217 <tr class="memdesc:gae1899a20ef107400c8bf84fad477a8ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read data from NAND device.  <br /></td></tr>
218 <tr class="separator:gae1899a20ef107400c8bf84fad477a8ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
219 <tr class="memitem:ga1fa497dd51a86fc308e946b4419fd006"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga1fa497dd51a86fc308e946b4419fd006">ARM_NAND_WriteData</a> (uint32_t dev_num, const void *data, uint32_t cnt, uint32_t mode)</td></tr>
220 <tr class="memdesc:ga1fa497dd51a86fc308e946b4419fd006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write data to NAND device.  <br /></td></tr>
221 <tr class="separator:ga1fa497dd51a86fc308e946b4419fd006"><td class="memSeparator" colspan="2">&#160;</td></tr>
222 <tr class="memitem:ga8a0108dba757a4610475151144b52825"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga8a0108dba757a4610475151144b52825">ARM_NAND_ExecuteSequence</a> (uint32_t dev_num, uint32_t code, uint32_t cmd, uint32_t addr_col, uint32_t addr_row, void *data, uint32_t data_cnt, uint8_t *status, uint32_t *count)</td></tr>
223 <tr class="memdesc:ga8a0108dba757a4610475151144b52825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Execute sequence of operations.  <br /></td></tr>
224 <tr class="separator:ga8a0108dba757a4610475151144b52825"><td class="memSeparator" colspan="2">&#160;</td></tr>
225 <tr class="memitem:ga00832861f018db0d8368900b099ecd30"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga00832861f018db0d8368900b099ecd30">ARM_NAND_AbortSequence</a> (uint32_t dev_num)</td></tr>
226 <tr class="memdesc:ga00832861f018db0d8368900b099ecd30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Abort sequence execution.  <br /></td></tr>
227 <tr class="separator:ga00832861f018db0d8368900b099ecd30"><td class="memSeparator" colspan="2">&#160;</td></tr>
228 <tr class="memitem:ga83061d6d53ffb148853efbc87a864607"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga83061d6d53ffb148853efbc87a864607">ARM_NAND_Control</a> (uint32_t dev_num, uint32_t control, uint32_t arg)</td></tr>
229 <tr class="memdesc:ga83061d6d53ffb148853efbc87a864607"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control NAND Interface.  <br /></td></tr>
230 <tr class="separator:ga83061d6d53ffb148853efbc87a864607"><td class="memSeparator" colspan="2">&#160;</td></tr>
231 <tr class="memitem:ga4578642f37a556b58b0bba0ad5d42641"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__STATUS">ARM_NAND_STATUS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ga4578642f37a556b58b0bba0ad5d42641">ARM_NAND_GetStatus</a> (uint32_t dev_num)</td></tr>
232 <tr class="memdesc:ga4578642f37a556b58b0bba0ad5d42641"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get NAND status.  <br /></td></tr>
233 <tr class="separator:ga4578642f37a556b58b0bba0ad5d42641"><td class="memSeparator" colspan="2">&#160;</td></tr>
234 <tr class="memitem:gac21425454d586ef48fdfc35e7bd78947"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#gac21425454d586ef48fdfc35e7bd78947">ARM_NAND_InquireECC</a> (int32_t index, <a class="el" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a> *info)</td></tr>
235 <tr class="memdesc:gac21425454d586ef48fdfc35e7bd78947"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inquire about available ECC.  <br /></td></tr>
236 <tr class="separator:gac21425454d586ef48fdfc35e7bd78947"><td class="memSeparator" colspan="2">&#160;</td></tr>
237 <tr class="memitem:gaf4ce80b0fd6717de7ddfb1cfaf7dd754"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a> (uint32_t dev_num, uint32_t event)</td></tr>
238 <tr class="memdesc:gaf4ce80b0fd6717de7ddfb1cfaf7dd754"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signal NAND event.  <br /></td></tr>
239 <tr class="separator:gaf4ce80b0fd6717de7ddfb1cfaf7dd754"><td class="memSeparator" colspan="2">&#160;</td></tr>
240 </table>
241 <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
242 <p>Driver API for NAND Flash Device Interface (Driver_NAND.h). </p>
243 <p><b>NAND</b> devices are a type of non-volatile storage and do not require power to hold data. Wikipedia offers more information about the <a href="https://en.wikipedia.org/wiki/Flash_memory#ARM_NAND_memories" target="_blank"><b>Flash Memories</b></a>, including NAND.</p>
244 <p><b>Block Diagram</b></p>
245 <p>&#160;</p>
246 <div class="image">
247 <img src="NAND_Schematics.png" alt=""/>
248 <div class="caption">
249 Simplified NAND Flash Schematic</div></div>
250  <p>&#160;</p>
251 <p><b>NAND API</b></p>
252 <p>The following header files define the Application Programming Interface (API) for the NAND interface:</p><ul>
253 <li><b>Driver_NAND.h</b> : Driver API for NAND Flash Device Interface</li>
254 </ul>
255 <p>The driver implementation is a typical part of the Device Family Pack (DFP) that supports the peripherals of the microcontroller family.</p>
256 <p>NAND Flash is organized in pages, grouped into blocks as the smallest erasable unit. The addressing of data is achieved by <code>byte_address = block * block_size + page_in_block * page_size + offset_in_page</code>. In terms of this NAND API blocks and pages are referred to as <code>row</code> and the byte offset within the page as <code>col</code>. Thus one can calculate the <code>byte_address = row * page_size + col</code>. The parameters <code>page_size</code> and <code>block_size</code> are device specific and must be handled by the driver user appropriately.</p>
257 <p><b>Driver Functions</b></p>
258 <p>The driver functions are published in the access struct as explained in <a class="el" href="theoryOperation.html#DriverFunctions">Common Driver Functions</a></p><ul>
259 <li><a class="el" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> : access struct for NAND driver functions</li>
260 </ul>
261 <p><a class="anchor" id="nand_example"></a><b>Example Code:</b></p>
262 <div class="fragment"><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="Driver__NAND_8h.html">Driver_NAND.h</a>&quot;</span></div>
263 <div class="line"> </div>
264 <div class="line"><span class="comment">/* ONFI commands */</span></div>
265 <div class="line"><span class="preprocessor">#define ONFI_CMD_READ_1ST               0x00   </span><span class="comment">///&lt; Read 1st Cycle</span></div>
266 <div class="line"><span class="preprocessor">#define ONFI_CMD_PROGRAM_2ND            0x10   </span><span class="comment">///&lt; Page Program 2nd Cycle</span></div>
267 <div class="line"><span class="preprocessor">#define ONFI_CMD_READ_2ND               0x30   </span><span class="comment">///&lt; Read 2nd Cycle</span></div>
268 <div class="line"><span class="preprocessor">#define ONFI_CMD_PROGRAM_1ST            0x80   </span><span class="comment">///&lt; Page Program 1st Cycle</span></div>
269 <div class="line"><span class="preprocessor">#define ONFI_CMD_RESET                  0xFF   </span><span class="comment">///&lt; Reset Command</span></div>
270 <div class="line"> </div>
271 <div class="line"><span class="comment">/* NAND Signal Event callback function */</span></div>
272 <div class="line"><span class="keyword">volatile</span> uint32_t NAND_Events;</div>
273 <div class="line"><span class="keywordtype">void</span> NAND_SignalEventCallback (uint32_t dev_num, uint32_t event) {</div>
274 <div class="line">  <span class="keywordflow">if</span> (dev_num == 0) {</div>
275 <div class="line">    NAND_Events |= event;</div>
276 <div class="line">  }</div>
277 <div class="line">  <span class="keywordflow">else</span> {</div>
278 <div class="line">    <span class="comment">// ..</span></div>
279 <div class="line">  }</div>
280 <div class="line">}</div>
281 <div class="line"> </div>
282 <div class="line"><span class="comment">/* NAND device Power ON */</span></div>
283 <div class="line"><span class="keywordtype">void</span> PowerOn (<a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> *drv, uint32_t dev_num) {</div>
284 <div class="line">  <a class="code hl_struct" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a> capabilities;</div>
285 <div class="line"> </div>
286 <div class="line">  <span class="comment">// Query drivers capabilities</span></div>
287 <div class="line">  capabilities = drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a56a1554cd7d22db9722b57158199375a">GetCapabilities</a>();</div>
288 <div class="line"> </div>
289 <div class="line">  <span class="comment">// Initialize NAND device</span></div>
290 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a3512517305771fb33b97f35995651a6c">Initialize</a> (NAND_SignalEventCallback);</div>
291 <div class="line"> </div>
292 <div class="line">  <span class="comment">// Power-on NAND driver</span></div>
293 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a24ebae5c6011631f76027f9a16eaf5ce">PowerControl</a> (<a class="code hl_enumvalue" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e">ARM_POWER_FULL</a>);</div>
294 <div class="line"> </div>
295 <div class="line">  <span class="comment">// Turn ON device power</span></div>
296 <div class="line">  uint32_t volt = 0U;</div>
297 <div class="line"> </div>
298 <div class="line">  <span class="keywordflow">if</span> (capabilities.<a class="code hl_variable" href="group__nand__interface__gr.html#a35cfa22b2140b109fe24b97c42d5a5ed">vcc</a>)      { volt |= <a class="code hl_define" href="Driver__NAND_8h.html#ad15355d67bc239ff49cceac69c2024b3">ARM_NAND_POWER_VCC_3V3</a>;  }</div>
299 <div class="line">  <span class="keywordflow">if</span> (capabilities.<a class="code hl_variable" href="group__nand__interface__gr.html#a0e7d3b9258d468492b22de55d855a06e">vcc_1v8</a>)  { volt |= <a class="code hl_define" href="Driver__NAND_8h.html#aa7b9d5a71125b745caba5c1d7aff6385">ARM_NAND_POWER_VCC_1V8</a>;  }</div>
300 <div class="line">  <span class="keywordflow">if</span> (capabilities.<a class="code hl_variable" href="group__nand__interface__gr.html#ab1cdfce6eb051bed7b904e0fd1719afa">vccq</a>)     { volt |= <a class="code hl_define" href="Driver__NAND_8h.html#a6d5a8a33a0fdaaff2e57e1ac53c984c2">ARM_NAND_POWER_VCCQ_3V3</a>; }</div>
301 <div class="line">  <span class="keywordflow">if</span> (capabilities.<a class="code hl_variable" href="group__nand__interface__gr.html#a1896a7548bb6fab285f23cc0d0b23d7d">vccq_1v8</a>) { volt |= <a class="code hl_define" href="Driver__NAND_8h.html#a653d9b4d7bee173beb49d8fec0469476">ARM_NAND_POWER_VCCQ_1V8</a>; }</div>
302 <div class="line"> </div>
303 <div class="line">  <span class="keywordflow">if</span> (volt != 0U) {  </div>
304 <div class="line">    drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#ab0d47822a67e9a3a26ff8e25116503dd">DevicePower</a> (volt);</div>
305 <div class="line">  }</div>
306 <div class="line"> </div>
307 <div class="line">  <span class="comment">// Setting bus mode</span></div>
308 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#aee024bcbc25fe704bd2d85ce1dccb8db">Control</a> (0U, <a class="code hl_define" href="Driver__NAND_8h.html#a9b063c3078e86b50d4aa892518b2e2d8">ARM_NAND_BUS_MODE</a>, <a class="code hl_define" href="group__nand__bus__mode__codes.html#gac7743aeb6411b97f9fc6a24b556f4963">ARM_NAND_BUS_SDR</a>);</div>
309 <div class="line"> </div>
310 <div class="line">  <span class="comment">// Setting bus data width</span></div>
311 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#aee024bcbc25fe704bd2d85ce1dccb8db">Control</a> (0U, <a class="code hl_define" href="Driver__NAND_8h.html#a2d3356f5b47871c465ae7136a2c533f4">ARM_NAND_BUS_DATA_WIDTH</a>, <a class="code hl_define" href="group__nand__data__bus__width__codes.html#ga578051cc193ae0b7125aec8007071d21">ARM_NAND_BUS_DATA_WIDTH_8</a>);</div>
312 <div class="line"> </div>
313 <div class="line">  <span class="comment">// Enable chip manually if needed</span></div>
314 <div class="line">  <span class="keywordflow">if</span> (capabilities.<a class="code hl_variable" href="group__nand__interface__gr.html#a2b8044d986995b183b057217643466bf">ce_manual</a>) {</div>
315 <div class="line">    drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#accb8cf48aaaa2b5a5ddc981d7190ab85">ChipEnable</a> (dev_num, <span class="keyword">true</span>);</div>
316 <div class="line">  }</div>
317 <div class="line"> </div>
318 <div class="line">  <span class="comment">// Send ONFI Reset command */</span></div>
319 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a4e799428ec20f3a111d525bda2a665d3">SendCommand</a> (dev_num, ONFI_CMD_RESET);</div>
320 <div class="line">}</div>
321 <div class="line"> </div>
322 <div class="line"><span class="comment">/* NAND device Power OFF */</span></div>
323 <div class="line"><span class="keywordtype">void</span> PowerOff (<a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> *drv, uint32_t dev_num) {</div>
324 <div class="line">  <a class="code hl_struct" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a> capabilities;</div>
325 <div class="line"> </div>
326 <div class="line">  <span class="comment">// Query drivers capabilities</span></div>
327 <div class="line">  capabilities = drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a56a1554cd7d22db9722b57158199375a">GetCapabilities</a>();</div>
328 <div class="line"> </div>
329 <div class="line">  <span class="comment">// Disable chip manually if needed</span></div>
330 <div class="line">  <span class="keywordflow">if</span> (capabilities.<a class="code hl_variable" href="group__nand__interface__gr.html#a2b8044d986995b183b057217643466bf">ce_manual</a>) {</div>
331 <div class="line">    drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#accb8cf48aaaa2b5a5ddc981d7190ab85">ChipEnable</a> (0U, <span class="keyword">false</span>);</div>
332 <div class="line">  }</div>
333 <div class="line"> </div>
334 <div class="line">  <span class="comment">// Switch OFF gracefully</span></div>
335 <div class="line">  uint32_t volt = 0U;</div>
336 <div class="line"> </div>
337 <div class="line">  <span class="keywordflow">if</span> (capabilities.<a class="code hl_variable" href="group__nand__interface__gr.html#a35cfa22b2140b109fe24b97c42d5a5ed">vcc</a>)  { volt |= <a class="code hl_define" href="Driver__NAND_8h.html#a323c320a6195b78c2c79f5c6e85f02e1">ARM_NAND_POWER_VCC_OFF</a>;  }</div>
338 <div class="line">  <span class="keywordflow">if</span> (capabilities.<a class="code hl_variable" href="group__nand__interface__gr.html#ab1cdfce6eb051bed7b904e0fd1719afa">vccq</a>) { volt |= <a class="code hl_define" href="Driver__NAND_8h.html#aca7679e8269ee986559f4218816937c3">ARM_NAND_POWER_VCCQ_OFF</a>; }</div>
339 <div class="line">  <span class="keywordflow">if</span> (volt) {</div>
340 <div class="line">    drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#ab0d47822a67e9a3a26ff8e25116503dd">DevicePower</a> (volt);</div>
341 <div class="line">  }</div>
342 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a24ebae5c6011631f76027f9a16eaf5ce">PowerControl</a> (<a class="code hl_enumvalue" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5ab6f5becc85ebd51c3dd2524a95d2ca35">ARM_POWER_OFF</a>);</div>
343 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a5ce2b3d7a3a07099bf07d1eb253e92e3">Uninitialize</a> ();</div>
344 <div class="line">}</div>
345 <div class="line"> </div>
346 <div class="line"><span class="comment">/* Read NAND page. */</span></div>
347 <div class="line"><span class="keywordtype">void</span> ReadPage (<a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> *drv, uint32_t row, uint8_t *data, uint32_t cnt) {</div>
348 <div class="line">  uint32_t dev_num = 0;   <span class="comment">// Device number</span></div>
349 <div class="line">  uint32_t mode;</div>
350 <div class="line"> </div>
351 <div class="line">  <span class="comment">// Send Read 1st command</span></div>
352 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a4e799428ec20f3a111d525bda2a665d3">SendCommand</a> (dev_num, ONFI_CMD_READ_1ST);</div>
353 <div class="line"> </div>
354 <div class="line">  <span class="comment">// Send address (column: 2 cycles, row: 3 cycles)</span></div>
355 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a2ce82feccad9747bfd885051a3032fc2">SendAddress</a> (dev_num, 0x00);</div>
356 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a2ce82feccad9747bfd885051a3032fc2">SendAddress</a> (dev_num, 0x00);</div>
357 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a2ce82feccad9747bfd885051a3032fc2">SendAddress</a> (dev_num, (uint8_t)(row));</div>
358 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a2ce82feccad9747bfd885051a3032fc2">SendAddress</a> (dev_num, (uint8_t)(row &gt;&gt;  8));</div>
359 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a2ce82feccad9747bfd885051a3032fc2">SendAddress</a> (dev_num, (uint8_t)(row &gt;&gt; 16));</div>
360 <div class="line"> </div>
361 <div class="line">  <span class="comment">// Send Read 2nd command</span></div>
362 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a4e799428ec20f3a111d525bda2a665d3">SendCommand</a> (dev_num, ONFI_CMD_READ_2ND);</div>
363 <div class="line"> </div>
364 <div class="line">  <span class="comment">// Wait until device ready</span></div>
365 <div class="line">  <span class="keywordflow">while</span> (drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a517db927578ec5d83e78aa39793b341f">GetDeviceBusy</a>(dev_num) == 1) { ; }</div>
366 <div class="line"> </div>
367 <div class="line">  <span class="comment">// Use ECC algorithm number 2, ECC0 (ECC over main+spare)</span></div>
368 <div class="line">  mode = <a class="code hl_define" href="group__nand__driver__ecc__codes.html#gac2eb4475f12a443209165d29fe200030">ARM_NAND_ECC</a>(2) | <a class="code hl_define" href="group__nand__driver__ecc__codes.html#ga15c79a12200c16f953936635f930df1d">ARM_NAND_ECC0</a>;</div>
369 <div class="line"> </div>
370 <div class="line">  <span class="comment">// Transfer data from the NAND chip</span></div>
371 <div class="line">  <span class="keywordflow">if</span> (drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a3bc463f127739cd4b8bb9a86412c979e">ReadData</a> (dev_num, data, cnt, mode | <a class="code hl_define" href="Driver__NAND_8h.html#af40631ba62411e0ac06c3a945d608581">ARM_NAND_DRIVER_DONE_EVENT</a>) != cnt) {</div>
372 <div class="line">    <span class="comment">// Wait until driver done event received</span></div>
373 <div class="line">    <span class="keywordflow">while</span> ((NAND_Events &amp; <a class="code hl_define" href="Driver__NAND_8h.html#af40631ba62411e0ac06c3a945d608581">ARM_NAND_DRIVER_DONE_EVENT</a>) == 0) { ; }</div>
374 <div class="line">    <span class="comment">// Read page completed</span></div>
375 <div class="line"> </div>
376 <div class="line">    <span class="keywordflow">if</span> ((NAND_Events &amp; <a class="code hl_define" href="Driver__NAND_8h.html#a7bee0c32528ab991c0c064f895f80664">ARM_NAND_EVENT_ECC_ERROR</a>) != 0) {</div>
377 <div class="line">      <span class="comment">// ECC correction failed</span></div>
378 <div class="line">    }</div>
379 <div class="line">  }</div>
380 <div class="line">}</div>
381 <div class="line"> </div>
382 <div class="line"><span class="comment">/* Write NAND page (ExecuteSequence interface). */</span></div>
383 <div class="line"><span class="keywordtype">void</span> WritePage_Seq (<a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> *drv, uint32_t row, <span class="keyword">const</span> uint8_t *data, uint32_t cnt) {</div>
384 <div class="line">  uint32_t dev_num = 0;   <span class="comment">// Device number</span></div>
385 <div class="line">  uint32_t cmd;</div>
386 <div class="line">  uint32_t code;</div>
387 <div class="line">  uint32_t seq;</div>
388 <div class="line"> </div>
389 <div class="line">  <span class="comment">// Prepare commands to send</span></div>
390 <div class="line">  cmd = ONFI_CMD_PROGRAM_1ST | (ONFI_CMD_PROGRAM_2ND &lt;&lt; 8);</div>
391 <div class="line"> </div>
392 <div class="line">  <span class="comment">// Construct sequence code:</span></div>
393 <div class="line">  <span class="comment">// - Send command 1</span></div>
394 <div class="line">  <span class="comment">// - Send 2 cycles of column address and 3 cycles of row address</span></div>
395 <div class="line">  <span class="comment">// - Write data from memory to device</span></div>
396 <div class="line">  <span class="comment">// - Send command 2</span></div>
397 <div class="line">  code = <a class="code hl_define" href="group__nand__driver__seq__exec__codes.html#gaef90c96cd4f2309044d7d438c6b0930a">ARM_NAND_CODE_SEND_CMD1</a>      |</div>
398 <div class="line">         <a class="code hl_define" href="group__nand__driver__seq__exec__codes.html#ga891bcba60ebb1195ec80c00c9bec748a">ARM_NAND_CODE_SEND_ADDR_COL1</a> |</div>
399 <div class="line">         <a class="code hl_define" href="group__nand__driver__seq__exec__codes.html#ga62a3f6ddcfb9ee317655bbec9e09bc10">ARM_NAND_CODE_SEND_ADDR_COL2</a> |</div>
400 <div class="line">         <a class="code hl_define" href="group__nand__driver__seq__exec__codes.html#gadc001e69d1e81dc28a542237c6fe11ff">ARM_NAND_CODE_SEND_ADDR_ROW1</a> |</div>
401 <div class="line">         <a class="code hl_define" href="group__nand__driver__seq__exec__codes.html#ga5e55628cb59f5d7d35c529f04ebfcd10">ARM_NAND_CODE_SEND_ADDR_ROW2</a> |</div>
402 <div class="line">         <a class="code hl_define" href="group__nand__driver__seq__exec__codes.html#gaeb5d1be9c13b7ad2ad246d5db10cd419">ARM_NAND_CODE_SEND_ADDR_ROW3</a> |</div>
403 <div class="line">         <a class="code hl_define" href="group__nand__driver__seq__exec__codes.html#ga1b40fc5fbf22dc4fa8130f5836e30d12">ARM_NAND_CODE_WRITE_DATA</a>     |</div>
404 <div class="line">         <a class="code hl_define" href="group__nand__driver__seq__exec__codes.html#gacffafbbbca74f7ffa4cd3bb6b067c4ef">ARM_NAND_CODE_SEND_CMD2</a>      ;</div>
405 <div class="line"> </div>
406 <div class="line">  <span class="comment">// - Use ECC algorithm number 2, ECC0 (ECC over main+spare)</span></div>
407 <div class="line">  code |= <a class="code hl_define" href="group__nand__driver__ecc__codes.html#gac2eb4475f12a443209165d29fe200030">ARM_NAND_ECC</a>(2) | <a class="code hl_define" href="group__nand__driver__ecc__codes.html#ga15c79a12200c16f953936635f930df1d">ARM_NAND_ECC0</a>;</div>
408 <div class="line"> </div>
409 <div class="line">  <span class="comment">// Number of iterations in a sequence</span></div>
410 <div class="line">  seq = 1;</div>
411 <div class="line"> </div>
412 <div class="line">  drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a0e32c33a15408dba23342d96c2bdc895">ExecuteSequence</a> (dev_num,        <span class="comment">// Device number</span></div>
413 <div class="line">                        code,           <span class="comment">// Sequence code</span></div>
414 <div class="line">                        cmd,            <span class="comment">// Command(s)</span></div>
415 <div class="line">                        0,              <span class="comment">// Column address</span></div>
416 <div class="line">                        row,            <span class="comment">// Row address</span></div>
417 <div class="line">                        (<span class="keywordtype">void</span> *)data,   <span class="comment">// Data buffer</span></div>
418 <div class="line">                        cnt,            <span class="comment">// Number of data items (per iteration)</span></div>
419 <div class="line">                        NULL,           <span class="comment">// Device status will not be read</span></div>
420 <div class="line">                        &amp;seq);          <span class="comment">// Number of iterations</span></div>
421 <div class="line"> </div>
422 <div class="line">  <span class="comment">// Wait until done</span></div>
423 <div class="line">  <span class="keywordflow">while</span> (drv-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a4cc6c149ca86871ffcc292e4143a3792">GetStatus</a>(dev_num).<a class="code hl_variable" href="group__nand__interface__gr.html#a50c88f3c1d787773e2ac1b59533f034a">busy</a> != 0) { ; }</div>
424 <div class="line"> </div>
425 <div class="line">  <span class="comment">// Page write completed</span></div>
426 <div class="line">}</div>
427 <div class="ttc" id="aDriver__Common_8h_html_ga47d6d7c31f88f3b8ae4aaf9d8444afa5ab6f5becc85ebd51c3dd2524a95d2ca35"><div class="ttname"><a href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5ab6f5becc85ebd51c3dd2524a95d2ca35">ARM_POWER_OFF</a></div><div class="ttdeci">@ ARM_POWER_OFF</div><div class="ttdoc">Power off: no operation possible.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:64</div></div>
428 <div class="ttc" id="aDriver__Common_8h_html_ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e"><div class="ttname"><a href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e">ARM_POWER_FULL</a></div><div class="ttdeci">@ ARM_POWER_FULL</div><div class="ttdoc">Power on: full operation at maximum performance.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:66</div></div>
429 <div class="ttc" id="aDriver__NAND_8h_html"><div class="ttname"><a href="Driver__NAND_8h.html">Driver_NAND.h</a></div></div>
430 <div class="ttc" id="aDriver__NAND_8h_html_a2d3356f5b47871c465ae7136a2c533f4"><div class="ttname"><a href="Driver__NAND_8h.html#a2d3356f5b47871c465ae7136a2c533f4">ARM_NAND_BUS_DATA_WIDTH</a></div><div class="ttdeci">#define ARM_NAND_BUS_DATA_WIDTH</div><div class="ttdoc">Set Bus Data Width as specified with arg.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:82</div></div>
431 <div class="ttc" id="aDriver__NAND_8h_html_a323c320a6195b78c2c79f5c6e85f02e1"><div class="ttname"><a href="Driver__NAND_8h.html#a323c320a6195b78c2c79f5c6e85f02e1">ARM_NAND_POWER_VCC_OFF</a></div><div class="ttdeci">#define ARM_NAND_POWER_VCC_OFF</div><div class="ttdoc">VCC Power off.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:68</div></div>
432 <div class="ttc" id="aDriver__NAND_8h_html_a653d9b4d7bee173beb49d8fec0469476"><div class="ttname"><a href="Driver__NAND_8h.html#a653d9b4d7bee173beb49d8fec0469476">ARM_NAND_POWER_VCCQ_1V8</a></div><div class="ttdeci">#define ARM_NAND_POWER_VCCQ_1V8</div><div class="ttdoc">VCCQ = 1.8V.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:75</div></div>
433 <div class="ttc" id="aDriver__NAND_8h_html_a6d5a8a33a0fdaaff2e57e1ac53c984c2"><div class="ttname"><a href="Driver__NAND_8h.html#a6d5a8a33a0fdaaff2e57e1ac53c984c2">ARM_NAND_POWER_VCCQ_3V3</a></div><div class="ttdeci">#define ARM_NAND_POWER_VCCQ_3V3</div><div class="ttdoc">VCCQ = 3.3V.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:74</div></div>
434 <div class="ttc" id="aDriver__NAND_8h_html_a7bee0c32528ab991c0c064f895f80664"><div class="ttname"><a href="Driver__NAND_8h.html#a7bee0c32528ab991c0c064f895f80664">ARM_NAND_EVENT_ECC_ERROR</a></div><div class="ttdeci">#define ARM_NAND_EVENT_ECC_ERROR</div><div class="ttdoc">ECC could not correct data.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:217</div></div>
435 <div class="ttc" id="aDriver__NAND_8h_html_a9b063c3078e86b50d4aa892518b2e2d8"><div class="ttname"><a href="Driver__NAND_8h.html#a9b063c3078e86b50d4aa892518b2e2d8">ARM_NAND_BUS_MODE</a></div><div class="ttdeci">#define ARM_NAND_BUS_MODE</div><div class="ttdoc">Set Bus Mode as specified with arg.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:81</div></div>
436 <div class="ttc" id="aDriver__NAND_8h_html_aa7b9d5a71125b745caba5c1d7aff6385"><div class="ttname"><a href="Driver__NAND_8h.html#aa7b9d5a71125b745caba5c1d7aff6385">ARM_NAND_POWER_VCC_1V8</a></div><div class="ttdeci">#define ARM_NAND_POWER_VCC_1V8</div><div class="ttdoc">VCC = 1.8V.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:70</div></div>
437 <div class="ttc" id="aDriver__NAND_8h_html_aca7679e8269ee986559f4218816937c3"><div class="ttname"><a href="Driver__NAND_8h.html#aca7679e8269ee986559f4218816937c3">ARM_NAND_POWER_VCCQ_OFF</a></div><div class="ttdeci">#define ARM_NAND_POWER_VCCQ_OFF</div><div class="ttdoc">VCCQ I/O Power off.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:73</div></div>
438 <div class="ttc" id="aDriver__NAND_8h_html_ad15355d67bc239ff49cceac69c2024b3"><div class="ttname"><a href="Driver__NAND_8h.html#ad15355d67bc239ff49cceac69c2024b3">ARM_NAND_POWER_VCC_3V3</a></div><div class="ttdeci">#define ARM_NAND_POWER_VCC_3V3</div><div class="ttdoc">VCC = 3.3V.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:69</div></div>
439 <div class="ttc" id="aDriver__NAND_8h_html_af40631ba62411e0ac06c3a945d608581"><div class="ttname"><a href="Driver__NAND_8h.html#af40631ba62411e0ac06c3a945d608581">ARM_NAND_DRIVER_DONE_EVENT</a></div><div class="ttdeci">#define ARM_NAND_DRIVER_DONE_EVENT</div><div class="ttdoc">Generate ARM_NAND_EVENT_DRIVER_DONE.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:138</div></div>
440 <div class="ttc" id="agroup__nand__bus__mode__codes_html_gac7743aeb6411b97f9fc6a24b556f4963"><div class="ttname"><a href="group__nand__bus__mode__codes.html#gac7743aeb6411b97f9fc6a24b556f4963">ARM_NAND_BUS_SDR</a></div><div class="ttdeci">#define ARM_NAND_BUS_SDR</div><div class="ttdoc">Data Interface: SDR (Single Data Rate) - Traditional interface (default)</div></div>
441 <div class="ttc" id="agroup__nand__data__bus__width__codes_html_ga578051cc193ae0b7125aec8007071d21"><div class="ttname"><a href="group__nand__data__bus__width__codes.html#ga578051cc193ae0b7125aec8007071d21">ARM_NAND_BUS_DATA_WIDTH_8</a></div><div class="ttdeci">#define ARM_NAND_BUS_DATA_WIDTH_8</div><div class="ttdoc">Bus Data Width: 8 bit (default)</div></div>
442 <div class="ttc" id="agroup__nand__driver__ecc__codes_html_ga15c79a12200c16f953936635f930df1d"><div class="ttname"><a href="group__nand__driver__ecc__codes.html#ga15c79a12200c16f953936635f930df1d">ARM_NAND_ECC0</a></div><div class="ttdeci">#define ARM_NAND_ECC0</div><div class="ttdoc">Use ECC0 of selected ECC.</div></div>
443 <div class="ttc" id="agroup__nand__driver__ecc__codes_html_gac2eb4475f12a443209165d29fe200030"><div class="ttname"><a href="group__nand__driver__ecc__codes.html#gac2eb4475f12a443209165d29fe200030">ARM_NAND_ECC</a></div><div class="ttdeci">#define ARM_NAND_ECC(n)</div><div class="ttdoc">Select ECC.</div></div>
444 <div class="ttc" id="agroup__nand__driver__seq__exec__codes_html_ga1b40fc5fbf22dc4fa8130f5836e30d12"><div class="ttname"><a href="group__nand__driver__seq__exec__codes.html#ga1b40fc5fbf22dc4fa8130f5836e30d12">ARM_NAND_CODE_WRITE_DATA</a></div><div class="ttdeci">#define ARM_NAND_CODE_WRITE_DATA</div><div class="ttdoc">Write Data.</div></div>
445 <div class="ttc" id="agroup__nand__driver__seq__exec__codes_html_ga5e55628cb59f5d7d35c529f04ebfcd10"><div class="ttname"><a href="group__nand__driver__seq__exec__codes.html#ga5e55628cb59f5d7d35c529f04ebfcd10">ARM_NAND_CODE_SEND_ADDR_ROW2</a></div><div class="ttdeci">#define ARM_NAND_CODE_SEND_ADDR_ROW2</div><div class="ttdoc">Send Row Address 2.</div></div>
446 <div class="ttc" id="agroup__nand__driver__seq__exec__codes_html_ga62a3f6ddcfb9ee317655bbec9e09bc10"><div class="ttname"><a href="group__nand__driver__seq__exec__codes.html#ga62a3f6ddcfb9ee317655bbec9e09bc10">ARM_NAND_CODE_SEND_ADDR_COL2</a></div><div class="ttdeci">#define ARM_NAND_CODE_SEND_ADDR_COL2</div><div class="ttdoc">Send Column Address 2.</div></div>
447 <div class="ttc" id="agroup__nand__driver__seq__exec__codes_html_ga891bcba60ebb1195ec80c00c9bec748a"><div class="ttname"><a href="group__nand__driver__seq__exec__codes.html#ga891bcba60ebb1195ec80c00c9bec748a">ARM_NAND_CODE_SEND_ADDR_COL1</a></div><div class="ttdeci">#define ARM_NAND_CODE_SEND_ADDR_COL1</div><div class="ttdoc">Send Column Address 1.</div></div>
448 <div class="ttc" id="agroup__nand__driver__seq__exec__codes_html_gacffafbbbca74f7ffa4cd3bb6b067c4ef"><div class="ttname"><a href="group__nand__driver__seq__exec__codes.html#gacffafbbbca74f7ffa4cd3bb6b067c4ef">ARM_NAND_CODE_SEND_CMD2</a></div><div class="ttdeci">#define ARM_NAND_CODE_SEND_CMD2</div><div class="ttdoc">Send Command 2.</div></div>
449 <div class="ttc" id="agroup__nand__driver__seq__exec__codes_html_gadc001e69d1e81dc28a542237c6fe11ff"><div class="ttname"><a href="group__nand__driver__seq__exec__codes.html#gadc001e69d1e81dc28a542237c6fe11ff">ARM_NAND_CODE_SEND_ADDR_ROW1</a></div><div class="ttdeci">#define ARM_NAND_CODE_SEND_ADDR_ROW1</div><div class="ttdoc">Send Row Address 1.</div></div>
450 <div class="ttc" id="agroup__nand__driver__seq__exec__codes_html_gaeb5d1be9c13b7ad2ad246d5db10cd419"><div class="ttname"><a href="group__nand__driver__seq__exec__codes.html#gaeb5d1be9c13b7ad2ad246d5db10cd419">ARM_NAND_CODE_SEND_ADDR_ROW3</a></div><div class="ttdeci">#define ARM_NAND_CODE_SEND_ADDR_ROW3</div><div class="ttdoc">Send Row Address 3.</div></div>
451 <div class="ttc" id="agroup__nand__driver__seq__exec__codes_html_gaef90c96cd4f2309044d7d438c6b0930a"><div class="ttname"><a href="group__nand__driver__seq__exec__codes.html#gaef90c96cd4f2309044d7d438c6b0930a">ARM_NAND_CODE_SEND_CMD1</a></div><div class="ttdeci">#define ARM_NAND_CODE_SEND_CMD1</div><div class="ttdoc">Send Command 1.</div></div>
452 <div class="ttc" id="agroup__nand__interface__gr_html_a0e32c33a15408dba23342d96c2bdc895"><div class="ttname"><a href="group__nand__interface__gr.html#a0e32c33a15408dba23342d96c2bdc895">ARM_DRIVER_NAND::ExecuteSequence</a></div><div class="ttdeci">int32_t(* ExecuteSequence)(uint32_t dev_num, uint32_t code, uint32_t cmd, uint32_t addr_col, uint32_t addr_row, void *data, uint32_t data_cnt, uint8_t *status, uint32_t *count)</div><div class="ttdoc">Pointer to ARM_NAND_ExecuteSequence : Execute sequence of operations.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:412</div></div>
453 <div class="ttc" id="agroup__nand__interface__gr_html_a0e7d3b9258d468492b22de55d855a06e"><div class="ttname"><a href="group__nand__interface__gr.html#a0e7d3b9258d468492b22de55d855a06e">ARM_NAND_CAPABILITIES::vcc_1v8</a></div><div class="ttdeci">uint32_t vcc_1v8</div><div class="ttdoc">Supports 1.8 VCC Power Supply.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:374</div></div>
454 <div class="ttc" id="agroup__nand__interface__gr_html_a1896a7548bb6fab285f23cc0d0b23d7d"><div class="ttname"><a href="group__nand__interface__gr.html#a1896a7548bb6fab285f23cc0d0b23d7d">ARM_NAND_CAPABILITIES::vccq_1v8</a></div><div class="ttdeci">uint32_t vccq_1v8</div><div class="ttdoc">Supports 1.8 VCCQ I/O Power Supply.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:376</div></div>
455 <div class="ttc" id="agroup__nand__interface__gr_html_a24ebae5c6011631f76027f9a16eaf5ce"><div class="ttname"><a href="group__nand__interface__gr.html#a24ebae5c6011631f76027f9a16eaf5ce">ARM_DRIVER_NAND::PowerControl</a></div><div class="ttdeci">int32_t(* PowerControl)(ARM_POWER_STATE state)</div><div class="ttdoc">Pointer to ARM_NAND_PowerControl : Control NAND Interface Power.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:403</div></div>
456 <div class="ttc" id="agroup__nand__interface__gr_html_a2b8044d986995b183b057217643466bf"><div class="ttname"><a href="group__nand__interface__gr.html#a2b8044d986995b183b057217643466bf">ARM_NAND_CAPABILITIES::ce_manual</a></div><div class="ttdeci">uint32_t ce_manual</div><div class="ttdoc">Supports manual CEn (Chip Enable) Control.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:380</div></div>
457 <div class="ttc" id="agroup__nand__interface__gr_html_a2ce82feccad9747bfd885051a3032fc2"><div class="ttname"><a href="group__nand__interface__gr.html#a2ce82feccad9747bfd885051a3032fc2">ARM_DRIVER_NAND::SendAddress</a></div><div class="ttdeci">int32_t(* SendAddress)(uint32_t dev_num, uint8_t addr)</div><div class="ttdoc">Pointer to ARM_NAND_SendAddress : Send address to NAND device.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:409</div></div>
458 <div class="ttc" id="agroup__nand__interface__gr_html_a3512517305771fb33b97f35995651a6c"><div class="ttname"><a href="group__nand__interface__gr.html#a3512517305771fb33b97f35995651a6c">ARM_DRIVER_NAND::Initialize</a></div><div class="ttdeci">int32_t(* Initialize)(ARM_NAND_SignalEvent_t cb_event)</div><div class="ttdoc">Pointer to ARM_NAND_Initialize : Initialize NAND Interface.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:401</div></div>
459 <div class="ttc" id="agroup__nand__interface__gr_html_a35cfa22b2140b109fe24b97c42d5a5ed"><div class="ttname"><a href="group__nand__interface__gr.html#a35cfa22b2140b109fe24b97c42d5a5ed">ARM_NAND_CAPABILITIES::vcc</a></div><div class="ttdeci">uint32_t vcc</div><div class="ttdoc">Supports VCC Power Supply Control.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:373</div></div>
460 <div class="ttc" id="agroup__nand__interface__gr_html_a3bc463f127739cd4b8bb9a86412c979e"><div class="ttname"><a href="group__nand__interface__gr.html#a3bc463f127739cd4b8bb9a86412c979e">ARM_DRIVER_NAND::ReadData</a></div><div class="ttdeci">int32_t(* ReadData)(uint32_t dev_num, void *data, uint32_t cnt, uint32_t mode)</div><div class="ttdoc">Pointer to ARM_NAND_ReadData : Read data from NAND device.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:410</div></div>
461 <div class="ttc" id="agroup__nand__interface__gr_html_a4cc6c149ca86871ffcc292e4143a3792"><div class="ttname"><a href="group__nand__interface__gr.html#a4cc6c149ca86871ffcc292e4143a3792">ARM_DRIVER_NAND::GetStatus</a></div><div class="ttdeci">ARM_NAND_STATUS(* GetStatus)(uint32_t dev_num)</div><div class="ttdoc">Pointer to ARM_NAND_GetStatus : Get NAND status.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:418</div></div>
462 <div class="ttc" id="agroup__nand__interface__gr_html_a4e799428ec20f3a111d525bda2a665d3"><div class="ttname"><a href="group__nand__interface__gr.html#a4e799428ec20f3a111d525bda2a665d3">ARM_DRIVER_NAND::SendCommand</a></div><div class="ttdeci">int32_t(* SendCommand)(uint32_t dev_num, uint8_t cmd)</div><div class="ttdoc">Pointer to ARM_NAND_SendCommand : Send command to NAND device.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:408</div></div>
463 <div class="ttc" id="agroup__nand__interface__gr_html_a50c88f3c1d787773e2ac1b59533f034a"><div class="ttname"><a href="group__nand__interface__gr.html#a50c88f3c1d787773e2ac1b59533f034a">ARM_NAND_STATUS::busy</a></div><div class="ttdeci">uint32_t busy</div><div class="ttdoc">Driver busy flag.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:207</div></div>
464 <div class="ttc" id="agroup__nand__interface__gr_html_a517db927578ec5d83e78aa39793b341f"><div class="ttname"><a href="group__nand__interface__gr.html#a517db927578ec5d83e78aa39793b341f">ARM_DRIVER_NAND::GetDeviceBusy</a></div><div class="ttdeci">int32_t(* GetDeviceBusy)(uint32_t dev_num)</div><div class="ttdoc">Pointer to ARM_NAND_GetDeviceBusy : Get Device Busy pin state.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:407</div></div>
465 <div class="ttc" id="agroup__nand__interface__gr_html_a56a1554cd7d22db9722b57158199375a"><div class="ttname"><a href="group__nand__interface__gr.html#a56a1554cd7d22db9722b57158199375a">ARM_DRIVER_NAND::GetCapabilities</a></div><div class="ttdeci">ARM_NAND_CAPABILITIES(* GetCapabilities)(void)</div><div class="ttdoc">Pointer to ARM_NAND_GetCapabilities : Get driver capabilities.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:400</div></div>
466 <div class="ttc" id="agroup__nand__interface__gr_html_a5ce2b3d7a3a07099bf07d1eb253e92e3"><div class="ttname"><a href="group__nand__interface__gr.html#a5ce2b3d7a3a07099bf07d1eb253e92e3">ARM_DRIVER_NAND::Uninitialize</a></div><div class="ttdeci">int32_t(* Uninitialize)(void)</div><div class="ttdoc">Pointer to ARM_NAND_Uninitialize : De-initialize NAND Interface.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:402</div></div>
467 <div class="ttc" id="agroup__nand__interface__gr_html_ab0d47822a67e9a3a26ff8e25116503dd"><div class="ttname"><a href="group__nand__interface__gr.html#ab0d47822a67e9a3a26ff8e25116503dd">ARM_DRIVER_NAND::DevicePower</a></div><div class="ttdeci">int32_t(* DevicePower)(uint32_t voltage)</div><div class="ttdoc">Pointer to ARM_NAND_DevicePower : Set device power supply voltage.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:404</div></div>
468 <div class="ttc" id="agroup__nand__interface__gr_html_ab1cdfce6eb051bed7b904e0fd1719afa"><div class="ttname"><a href="group__nand__interface__gr.html#ab1cdfce6eb051bed7b904e0fd1719afa">ARM_NAND_CAPABILITIES::vccq</a></div><div class="ttdeci">uint32_t vccq</div><div class="ttdoc">Supports VCCQ I/O Power Supply Control.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:375</div></div>
469 <div class="ttc" id="agroup__nand__interface__gr_html_accb8cf48aaaa2b5a5ddc981d7190ab85"><div class="ttname"><a href="group__nand__interface__gr.html#accb8cf48aaaa2b5a5ddc981d7190ab85">ARM_DRIVER_NAND::ChipEnable</a></div><div class="ttdeci">int32_t(* ChipEnable)(uint32_t dev_num, bool enable)</div><div class="ttdoc">Pointer to ARM_NAND_ChipEnable : Control CEn (Chip Enable).</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:406</div></div>
470 <div class="ttc" id="agroup__nand__interface__gr_html_aee024bcbc25fe704bd2d85ce1dccb8db"><div class="ttname"><a href="group__nand__interface__gr.html#aee024bcbc25fe704bd2d85ce1dccb8db">ARM_DRIVER_NAND::Control</a></div><div class="ttdeci">int32_t(* Control)(uint32_t dev_num, uint32_t control, uint32_t arg)</div><div class="ttdoc">Pointer to ARM_NAND_Control : Control NAND Interface.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:417</div></div>
471 <div class="ttc" id="agroup__nand__interface__gr_html_structARM__DRIVER__NAND"><div class="ttname"><a href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a></div><div class="ttdoc">Access structure of the NAND Driver.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:398</div></div>
472 <div class="ttc" id="agroup__nand__interface__gr_html_structARM__NAND__CAPABILITIES"><div class="ttname"><a href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a></div><div class="ttdoc">NAND Driver Capabilities.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:369</div></div>
473 </div><!-- fragment --> <hr/><h2 class="groupheader">Data Structure Documentation</h2>
474 <a name="structARM__NAND__STATUS" id="structARM__NAND__STATUS"></a>
475 <h2 class="memtitle"><span class="permalink"><a href="#structARM__NAND__STATUS">&#9670;&#160;</a></span>ARM_NAND_STATUS</h2>
476
477 <div class="memitem">
478 <div class="memproto">
479       <table class="memname">
480         <tr>
481           <td class="memname">struct ARM_NAND_STATUS</td>
482         </tr>
483       </table>
484 </div><div class="memdoc">
485 <div class="textblock"><p>NAND Status. </p>
486 <p>Structure with information about the status of a NAND. The data fields encode flags for the driver.</p>
487 <p><b>Returned by:</b></p><ul>
488 <li><a class="el" href="group__nand__interface__gr.html#ga4578642f37a556b58b0bba0ad5d42641">ARM_NAND_GetStatus</a> </li>
489 </ul>
490 </div><table class="fieldtable">
491 <tr><th colspan="3">Data Fields</th></tr>
492 <tr><td class="fieldtype">
493 <a id="a50c88f3c1d787773e2ac1b59533f034a" name="a50c88f3c1d787773e2ac1b59533f034a"></a>uint32_t</td>
494 <td class="fieldname">
495 busy: 1</td>
496 <td class="fielddoc">
497 Driver busy flag. </td></tr>
498 <tr><td class="fieldtype">
499 <a id="a7707d2200a3bf8f49b148ffc8ded7636" name="a7707d2200a3bf8f49b148ffc8ded7636"></a>uint32_t</td>
500 <td class="fieldname">
501 ecc_error: 1</td>
502 <td class="fielddoc">
503 ECC error detected (cleared on next Read/WriteData or ExecuteSequence) </td></tr>
504 <tr><td class="fieldtype">
505 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
506 <td class="fieldname">
507 reserved: 30</td>
508 <td class="fielddoc">
509 </td></tr>
510 </table>
511
512 </div>
513 </div>
514 <a name="structARM__DRIVER__NAND" id="structARM__DRIVER__NAND"></a>
515 <h2 class="memtitle"><span class="permalink"><a href="#structARM__DRIVER__NAND">&#9670;&#160;</a></span>ARM_DRIVER_NAND</h2>
516
517 <div class="memitem">
518 <div class="memproto">
519       <table class="memname">
520         <tr>
521           <td class="memname">struct ARM_DRIVER_NAND</td>
522         </tr>
523       </table>
524 </div><div class="memdoc">
525 <div class="textblock"><p>Access structure of the NAND Driver. </p>
526 <p>The functions of the NAND driver are accessed by function pointers exposed by this structure. Refer to <a class="el" href="theoryOperation.html#DriverFunctions">Common Driver Functions</a> for overview information.</p>
527 <p>Each instance of a NAND interface provides such an access structure. The instance is identified by a postfix number in the symbol name of the access structure, for example:</p><ul>
528 <li><b>Driver_NAND0</b> is the name of the access struct of the first instance (no. 0).</li>
529 <li><b>Driver_NAND1</b> is the name of the access struct of the second instance (no. 1).</li>
530 </ul>
531 <p>A middleware configuration setting allows connecting the middleware to a specific driver instance <b>Driver_NAND<em>n</em></b>. The default is <span class="XML-Token">0</span>, which connects a middleware to the first instance of a driver. </p>
532 </div><table class="memberdecls">
533 <tr><td colspan="2"><h3>Data Fields</h3></td></tr>
534 <tr class="memitem:a30afd9cb3113c037b5f1926f5ef93b59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">GetVersion</a> )(void)</td></tr>
535 <tr class="memdesc:a30afd9cb3113c037b5f1926f5ef93b59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga01255fd4f15e7fa4751c7ea59648ef5a">ARM_NAND_GetVersion</a> : Get driver version.  <br /></td></tr>
536 <tr class="separator:a30afd9cb3113c037b5f1926f5ef93b59"><td class="memSeparator" colspan="2">&#160;</td></tr>
537 <tr class="memitem:a56a1554cd7d22db9722b57158199375a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a56a1554cd7d22db9722b57158199375a">GetCapabilities</a> )(void)</td></tr>
538 <tr class="memdesc:a56a1554cd7d22db9722b57158199375a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga9f2609975c2008d21b9ae28f15daf147">ARM_NAND_GetCapabilities</a> : Get driver capabilities.  <br /></td></tr>
539 <tr class="separator:a56a1554cd7d22db9722b57158199375a"><td class="memSeparator" colspan="2">&#160;</td></tr>
540 <tr class="memitem:a3512517305771fb33b97f35995651a6c"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a3512517305771fb33b97f35995651a6c">Initialize</a> )(<a class="el" href="group__nand__interface__gr.html#ga09f4cf2f2df0bb690bce38b13d77e50f">ARM_NAND_SignalEvent_t</a> cb_event)</td></tr>
541 <tr class="memdesc:a3512517305771fb33b97f35995651a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga74ad34718a595e7a4375b90f33e72750">ARM_NAND_Initialize</a> : Initialize NAND Interface.  <br /></td></tr>
542 <tr class="separator:a3512517305771fb33b97f35995651a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
543 <tr class="memitem:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a5ce2b3d7a3a07099bf07d1eb253e92e3">Uninitialize</a> )(void)</td></tr>
544 <tr class="memdesc:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#gaa788b638ab696b166fee2f4a4bc8d97a">ARM_NAND_Uninitialize</a> : De-initialize NAND Interface.  <br /></td></tr>
545 <tr class="separator:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
546 <tr class="memitem:a24ebae5c6011631f76027f9a16eaf5ce"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a24ebae5c6011631f76027f9a16eaf5ce">PowerControl</a> )(<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td></tr>
547 <tr class="memdesc:a24ebae5c6011631f76027f9a16eaf5ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga9c9975637980b5d42db7baba0191fda1">ARM_NAND_PowerControl</a> : Control NAND Interface Power.  <br /></td></tr>
548 <tr class="separator:a24ebae5c6011631f76027f9a16eaf5ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
549 <tr class="memitem:ab0d47822a67e9a3a26ff8e25116503dd"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ab0d47822a67e9a3a26ff8e25116503dd">DevicePower</a> )(uint32_t voltage)</td></tr>
550 <tr class="memdesc:ab0d47822a67e9a3a26ff8e25116503dd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga11adcbaaace09746581a36befbd563c9">ARM_NAND_DevicePower</a> : Set device power supply voltage.  <br /></td></tr>
551 <tr class="separator:ab0d47822a67e9a3a26ff8e25116503dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
552 <tr class="memitem:a7814b68214a9fbf6057192d470ecb83f"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a7814b68214a9fbf6057192d470ecb83f">WriteProtect</a> )(uint32_t dev_num, bool enable)</td></tr>
553 <tr class="memdesc:a7814b68214a9fbf6057192d470ecb83f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga1987e65a4e756d748db86332c9fb1cec">ARM_NAND_WriteProtect</a> : Control WPn (Write Protect).  <br /></td></tr>
554 <tr class="separator:a7814b68214a9fbf6057192d470ecb83f"><td class="memSeparator" colspan="2">&#160;</td></tr>
555 <tr class="memitem:accb8cf48aaaa2b5a5ddc981d7190ab85"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#accb8cf48aaaa2b5a5ddc981d7190ab85">ChipEnable</a> )(uint32_t dev_num, bool enable)</td></tr>
556 <tr class="memdesc:accb8cf48aaaa2b5a5ddc981d7190ab85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga1c0cba87cb7b706ad5986dc67c831ad1">ARM_NAND_ChipEnable</a> : Control CEn (Chip Enable).  <br /></td></tr>
557 <tr class="separator:accb8cf48aaaa2b5a5ddc981d7190ab85"><td class="memSeparator" colspan="2">&#160;</td></tr>
558 <tr class="memitem:a517db927578ec5d83e78aa39793b341f"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a517db927578ec5d83e78aa39793b341f">GetDeviceBusy</a> )(uint32_t dev_num)</td></tr>
559 <tr class="memdesc:a517db927578ec5d83e78aa39793b341f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga43011066306bd716b580e6aa9a80cf65">ARM_NAND_GetDeviceBusy</a> : Get Device Busy pin state.  <br /></td></tr>
560 <tr class="separator:a517db927578ec5d83e78aa39793b341f"><td class="memSeparator" colspan="2">&#160;</td></tr>
561 <tr class="memitem:a4e799428ec20f3a111d525bda2a665d3"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a4e799428ec20f3a111d525bda2a665d3">SendCommand</a> )(uint32_t dev_num, uint8_t cmd)</td></tr>
562 <tr class="memdesc:a4e799428ec20f3a111d525bda2a665d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga9f70b89ba478eadfe7f5dee7453a4fb7">ARM_NAND_SendCommand</a> : Send command to NAND device.  <br /></td></tr>
563 <tr class="separator:a4e799428ec20f3a111d525bda2a665d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
564 <tr class="memitem:a2ce82feccad9747bfd885051a3032fc2"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a2ce82feccad9747bfd885051a3032fc2">SendAddress</a> )(uint32_t dev_num, uint8_t addr)</td></tr>
565 <tr class="memdesc:a2ce82feccad9747bfd885051a3032fc2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga00e195031e03d364db7595858a7e76f3">ARM_NAND_SendAddress</a> : Send address to NAND device.  <br /></td></tr>
566 <tr class="separator:a2ce82feccad9747bfd885051a3032fc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
567 <tr class="memitem:a3bc463f127739cd4b8bb9a86412c979e"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a3bc463f127739cd4b8bb9a86412c979e">ReadData</a> )(uint32_t dev_num, void *data, uint32_t cnt, uint32_t mode)</td></tr>
568 <tr class="memdesc:a3bc463f127739cd4b8bb9a86412c979e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#gae1899a20ef107400c8bf84fad477a8ce">ARM_NAND_ReadData</a> : Read data from NAND device.  <br /></td></tr>
569 <tr class="separator:a3bc463f127739cd4b8bb9a86412c979e"><td class="memSeparator" colspan="2">&#160;</td></tr>
570 <tr class="memitem:a3a45bc07b4b3819685f18dcc3dfafba8"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a3a45bc07b4b3819685f18dcc3dfafba8">WriteData</a> )(uint32_t dev_num, const void *data, uint32_t cnt, uint32_t mode)</td></tr>
571 <tr class="memdesc:a3a45bc07b4b3819685f18dcc3dfafba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga1fa497dd51a86fc308e946b4419fd006">ARM_NAND_WriteData</a> : Write data to NAND device.  <br /></td></tr>
572 <tr class="separator:a3a45bc07b4b3819685f18dcc3dfafba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
573 <tr class="memitem:a0e32c33a15408dba23342d96c2bdc895"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a0e32c33a15408dba23342d96c2bdc895">ExecuteSequence</a> )(uint32_t dev_num, uint32_t code, uint32_t cmd, uint32_t addr_col, uint32_t addr_row, void *data, uint32_t data_cnt, uint8_t *status, uint32_t *count)</td></tr>
574 <tr class="memdesc:a0e32c33a15408dba23342d96c2bdc895"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga8a0108dba757a4610475151144b52825">ARM_NAND_ExecuteSequence</a> : Execute sequence of operations.  <br /></td></tr>
575 <tr class="separator:a0e32c33a15408dba23342d96c2bdc895"><td class="memSeparator" colspan="2">&#160;</td></tr>
576 <tr class="memitem:ae2b2dae64beb0d8931c2590cccb4e24a"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#ae2b2dae64beb0d8931c2590cccb4e24a">AbortSequence</a> )(uint32_t dev_num)</td></tr>
577 <tr class="memdesc:ae2b2dae64beb0d8931c2590cccb4e24a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga00832861f018db0d8368900b099ecd30">ARM_NAND_AbortSequence</a> : Abort sequence execution.  <br /></td></tr>
578 <tr class="separator:ae2b2dae64beb0d8931c2590cccb4e24a"><td class="memSeparator" colspan="2">&#160;</td></tr>
579 <tr class="memitem:aee024bcbc25fe704bd2d85ce1dccb8db"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#aee024bcbc25fe704bd2d85ce1dccb8db">Control</a> )(uint32_t dev_num, uint32_t control, uint32_t arg)</td></tr>
580 <tr class="memdesc:aee024bcbc25fe704bd2d85ce1dccb8db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga83061d6d53ffb148853efbc87a864607">ARM_NAND_Control</a> : Control NAND Interface.  <br /></td></tr>
581 <tr class="separator:aee024bcbc25fe704bd2d85ce1dccb8db"><td class="memSeparator" colspan="2">&#160;</td></tr>
582 <tr class="memitem:a4cc6c149ca86871ffcc292e4143a3792"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__STATUS">ARM_NAND_STATUS</a>(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#a4cc6c149ca86871ffcc292e4143a3792">GetStatus</a> )(uint32_t dev_num)</td></tr>
583 <tr class="memdesc:a4cc6c149ca86871ffcc292e4143a3792"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#ga4578642f37a556b58b0bba0ad5d42641">ARM_NAND_GetStatus</a> : Get NAND status.  <br /></td></tr>
584 <tr class="separator:a4cc6c149ca86871ffcc292e4143a3792"><td class="memSeparator" colspan="2">&#160;</td></tr>
585 <tr class="memitem:afb64d95bec5cd74ff8b15044ce94bc93"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nand__interface__gr.html#afb64d95bec5cd74ff8b15044ce94bc93">InquireECC</a> )(int32_t index, <a class="el" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a> *info)</td></tr>
586 <tr class="memdesc:afb64d95bec5cd74ff8b15044ce94bc93"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__nand__interface__gr.html#gac21425454d586ef48fdfc35e7bd78947">ARM_NAND_InquireECC</a> : Inquire about available ECC.  <br /></td></tr>
587 <tr class="separator:afb64d95bec5cd74ff8b15044ce94bc93"><td class="memSeparator" colspan="2">&#160;</td></tr>
588 </table>
589 <h4 class="groupheader">Field Documentation</h4>
590 <a id="a30afd9cb3113c037b5f1926f5ef93b59" name="a30afd9cb3113c037b5f1926f5ef93b59"></a>
591 <h2 class="memtitle"><span class="permalink"><a href="#a30afd9cb3113c037b5f1926f5ef93b59">&#9670;&#160;</a></span>GetVersion</h2>
592
593 <div class="memitem">
594 <div class="memproto">
595       <table class="memname">
596         <tr>
597           <td class="memname"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>(* GetVersion) (void)</td>
598         </tr>
599       </table>
600 </div><div class="memdoc">
601
602 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga01255fd4f15e7fa4751c7ea59648ef5a">ARM_NAND_GetVersion</a> : Get driver version. </p>
603
604 </div>
605 </div>
606 <a id="a56a1554cd7d22db9722b57158199375a" name="a56a1554cd7d22db9722b57158199375a"></a>
607 <h2 class="memtitle"><span class="permalink"><a href="#a56a1554cd7d22db9722b57158199375a">&#9670;&#160;</a></span>GetCapabilities</h2>
608
609 <div class="memitem">
610 <div class="memproto">
611       <table class="memname">
612         <tr>
613           <td class="memname"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>(* GetCapabilities) (void)</td>
614         </tr>
615       </table>
616 </div><div class="memdoc">
617
618 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga9f2609975c2008d21b9ae28f15daf147">ARM_NAND_GetCapabilities</a> : Get driver capabilities. </p>
619
620 </div>
621 </div>
622 <a id="a3512517305771fb33b97f35995651a6c" name="a3512517305771fb33b97f35995651a6c"></a>
623 <h2 class="memtitle"><span class="permalink"><a href="#a3512517305771fb33b97f35995651a6c">&#9670;&#160;</a></span>Initialize</h2>
624
625 <div class="memitem">
626 <div class="memproto">
627       <table class="memname">
628         <tr>
629           <td class="memname">int32_t(* Initialize) (<a class="el" href="group__nand__interface__gr.html#ga09f4cf2f2df0bb690bce38b13d77e50f">ARM_NAND_SignalEvent_t</a> cb_event)</td>
630         </tr>
631       </table>
632 </div><div class="memdoc">
633
634 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga74ad34718a595e7a4375b90f33e72750">ARM_NAND_Initialize</a> : Initialize NAND Interface. </p>
635
636 </div>
637 </div>
638 <a id="a5ce2b3d7a3a07099bf07d1eb253e92e3" name="a5ce2b3d7a3a07099bf07d1eb253e92e3"></a>
639 <h2 class="memtitle"><span class="permalink"><a href="#a5ce2b3d7a3a07099bf07d1eb253e92e3">&#9670;&#160;</a></span>Uninitialize</h2>
640
641 <div class="memitem">
642 <div class="memproto">
643       <table class="memname">
644         <tr>
645           <td class="memname">int32_t(* Uninitialize) (void)</td>
646         </tr>
647       </table>
648 </div><div class="memdoc">
649
650 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#gaa788b638ab696b166fee2f4a4bc8d97a">ARM_NAND_Uninitialize</a> : De-initialize NAND Interface. </p>
651
652 </div>
653 </div>
654 <a id="a24ebae5c6011631f76027f9a16eaf5ce" name="a24ebae5c6011631f76027f9a16eaf5ce"></a>
655 <h2 class="memtitle"><span class="permalink"><a href="#a24ebae5c6011631f76027f9a16eaf5ce">&#9670;&#160;</a></span>PowerControl</h2>
656
657 <div class="memitem">
658 <div class="memproto">
659       <table class="memname">
660         <tr>
661           <td class="memname">int32_t(* PowerControl) (<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td>
662         </tr>
663       </table>
664 </div><div class="memdoc">
665
666 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga9c9975637980b5d42db7baba0191fda1">ARM_NAND_PowerControl</a> : Control NAND Interface Power. </p>
667
668 </div>
669 </div>
670 <a id="ab0d47822a67e9a3a26ff8e25116503dd" name="ab0d47822a67e9a3a26ff8e25116503dd"></a>
671 <h2 class="memtitle"><span class="permalink"><a href="#ab0d47822a67e9a3a26ff8e25116503dd">&#9670;&#160;</a></span>DevicePower</h2>
672
673 <div class="memitem">
674 <div class="memproto">
675       <table class="memname">
676         <tr>
677           <td class="memname">int32_t(* DevicePower) (uint32_t voltage)</td>
678         </tr>
679       </table>
680 </div><div class="memdoc">
681
682 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga11adcbaaace09746581a36befbd563c9">ARM_NAND_DevicePower</a> : Set device power supply voltage. </p>
683
684 </div>
685 </div>
686 <a id="a7814b68214a9fbf6057192d470ecb83f" name="a7814b68214a9fbf6057192d470ecb83f"></a>
687 <h2 class="memtitle"><span class="permalink"><a href="#a7814b68214a9fbf6057192d470ecb83f">&#9670;&#160;</a></span>WriteProtect</h2>
688
689 <div class="memitem">
690 <div class="memproto">
691       <table class="memname">
692         <tr>
693           <td class="memname">int32_t(* WriteProtect) (uint32_t dev_num, bool enable)</td>
694         </tr>
695       </table>
696 </div><div class="memdoc">
697
698 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga1987e65a4e756d748db86332c9fb1cec">ARM_NAND_WriteProtect</a> : Control WPn (Write Protect). </p>
699
700 </div>
701 </div>
702 <a id="accb8cf48aaaa2b5a5ddc981d7190ab85" name="accb8cf48aaaa2b5a5ddc981d7190ab85"></a>
703 <h2 class="memtitle"><span class="permalink"><a href="#accb8cf48aaaa2b5a5ddc981d7190ab85">&#9670;&#160;</a></span>ChipEnable</h2>
704
705 <div class="memitem">
706 <div class="memproto">
707       <table class="memname">
708         <tr>
709           <td class="memname">int32_t(* ChipEnable) (uint32_t dev_num, bool enable)</td>
710         </tr>
711       </table>
712 </div><div class="memdoc">
713
714 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga1c0cba87cb7b706ad5986dc67c831ad1">ARM_NAND_ChipEnable</a> : Control CEn (Chip Enable). </p>
715
716 </div>
717 </div>
718 <a id="a517db927578ec5d83e78aa39793b341f" name="a517db927578ec5d83e78aa39793b341f"></a>
719 <h2 class="memtitle"><span class="permalink"><a href="#a517db927578ec5d83e78aa39793b341f">&#9670;&#160;</a></span>GetDeviceBusy</h2>
720
721 <div class="memitem">
722 <div class="memproto">
723       <table class="memname">
724         <tr>
725           <td class="memname">int32_t(* GetDeviceBusy) (uint32_t dev_num)</td>
726         </tr>
727       </table>
728 </div><div class="memdoc">
729
730 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga43011066306bd716b580e6aa9a80cf65">ARM_NAND_GetDeviceBusy</a> : Get Device Busy pin state. </p>
731
732 </div>
733 </div>
734 <a id="a4e799428ec20f3a111d525bda2a665d3" name="a4e799428ec20f3a111d525bda2a665d3"></a>
735 <h2 class="memtitle"><span class="permalink"><a href="#a4e799428ec20f3a111d525bda2a665d3">&#9670;&#160;</a></span>SendCommand</h2>
736
737 <div class="memitem">
738 <div class="memproto">
739       <table class="memname">
740         <tr>
741           <td class="memname">int32_t(* SendCommand) (uint32_t dev_num, uint8_t cmd)</td>
742         </tr>
743       </table>
744 </div><div class="memdoc">
745
746 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga9f70b89ba478eadfe7f5dee7453a4fb7">ARM_NAND_SendCommand</a> : Send command to NAND device. </p>
747
748 </div>
749 </div>
750 <a id="a2ce82feccad9747bfd885051a3032fc2" name="a2ce82feccad9747bfd885051a3032fc2"></a>
751 <h2 class="memtitle"><span class="permalink"><a href="#a2ce82feccad9747bfd885051a3032fc2">&#9670;&#160;</a></span>SendAddress</h2>
752
753 <div class="memitem">
754 <div class="memproto">
755       <table class="memname">
756         <tr>
757           <td class="memname">int32_t(* SendAddress) (uint32_t dev_num, uint8_t addr)</td>
758         </tr>
759       </table>
760 </div><div class="memdoc">
761
762 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga00e195031e03d364db7595858a7e76f3">ARM_NAND_SendAddress</a> : Send address to NAND device. </p>
763
764 </div>
765 </div>
766 <a id="a3bc463f127739cd4b8bb9a86412c979e" name="a3bc463f127739cd4b8bb9a86412c979e"></a>
767 <h2 class="memtitle"><span class="permalink"><a href="#a3bc463f127739cd4b8bb9a86412c979e">&#9670;&#160;</a></span>ReadData</h2>
768
769 <div class="memitem">
770 <div class="memproto">
771       <table class="memname">
772         <tr>
773           <td class="memname">int32_t(* ReadData) (uint32_t dev_num, void *data, uint32_t cnt, uint32_t mode)</td>
774         </tr>
775       </table>
776 </div><div class="memdoc">
777
778 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#gae1899a20ef107400c8bf84fad477a8ce">ARM_NAND_ReadData</a> : Read data from NAND device. </p>
779
780 </div>
781 </div>
782 <a id="a3a45bc07b4b3819685f18dcc3dfafba8" name="a3a45bc07b4b3819685f18dcc3dfafba8"></a>
783 <h2 class="memtitle"><span class="permalink"><a href="#a3a45bc07b4b3819685f18dcc3dfafba8">&#9670;&#160;</a></span>WriteData</h2>
784
785 <div class="memitem">
786 <div class="memproto">
787       <table class="memname">
788         <tr>
789           <td class="memname">int32_t(* WriteData) (uint32_t dev_num, const void *data, uint32_t cnt, uint32_t mode)</td>
790         </tr>
791       </table>
792 </div><div class="memdoc">
793
794 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga1fa497dd51a86fc308e946b4419fd006">ARM_NAND_WriteData</a> : Write data to NAND device. </p>
795
796 </div>
797 </div>
798 <a id="a0e32c33a15408dba23342d96c2bdc895" name="a0e32c33a15408dba23342d96c2bdc895"></a>
799 <h2 class="memtitle"><span class="permalink"><a href="#a0e32c33a15408dba23342d96c2bdc895">&#9670;&#160;</a></span>ExecuteSequence</h2>
800
801 <div class="memitem">
802 <div class="memproto">
803       <table class="memname">
804         <tr>
805           <td class="memname">int32_t(* ExecuteSequence) (uint32_t dev_num, uint32_t code, uint32_t cmd, uint32_t addr_col, uint32_t addr_row, void *data, uint32_t data_cnt, uint8_t *status, uint32_t *count)</td>
806         </tr>
807       </table>
808 </div><div class="memdoc">
809
810 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga8a0108dba757a4610475151144b52825">ARM_NAND_ExecuteSequence</a> : Execute sequence of operations. </p>
811
812 </div>
813 </div>
814 <a id="ae2b2dae64beb0d8931c2590cccb4e24a" name="ae2b2dae64beb0d8931c2590cccb4e24a"></a>
815 <h2 class="memtitle"><span class="permalink"><a href="#ae2b2dae64beb0d8931c2590cccb4e24a">&#9670;&#160;</a></span>AbortSequence</h2>
816
817 <div class="memitem">
818 <div class="memproto">
819       <table class="memname">
820         <tr>
821           <td class="memname">int32_t(* AbortSequence) (uint32_t dev_num)</td>
822         </tr>
823       </table>
824 </div><div class="memdoc">
825
826 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga00832861f018db0d8368900b099ecd30">ARM_NAND_AbortSequence</a> : Abort sequence execution. </p>
827
828 </div>
829 </div>
830 <a id="aee024bcbc25fe704bd2d85ce1dccb8db" name="aee024bcbc25fe704bd2d85ce1dccb8db"></a>
831 <h2 class="memtitle"><span class="permalink"><a href="#aee024bcbc25fe704bd2d85ce1dccb8db">&#9670;&#160;</a></span>Control</h2>
832
833 <div class="memitem">
834 <div class="memproto">
835       <table class="memname">
836         <tr>
837           <td class="memname">int32_t(* Control) (uint32_t dev_num, uint32_t control, uint32_t arg)</td>
838         </tr>
839       </table>
840 </div><div class="memdoc">
841
842 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga83061d6d53ffb148853efbc87a864607">ARM_NAND_Control</a> : Control NAND Interface. </p>
843
844 </div>
845 </div>
846 <a id="a4cc6c149ca86871ffcc292e4143a3792" name="a4cc6c149ca86871ffcc292e4143a3792"></a>
847 <h2 class="memtitle"><span class="permalink"><a href="#a4cc6c149ca86871ffcc292e4143a3792">&#9670;&#160;</a></span>GetStatus</h2>
848
849 <div class="memitem">
850 <div class="memproto">
851       <table class="memname">
852         <tr>
853           <td class="memname"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__STATUS">ARM_NAND_STATUS</a>(* GetStatus) (uint32_t dev_num)</td>
854         </tr>
855       </table>
856 </div><div class="memdoc">
857
858 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#ga4578642f37a556b58b0bba0ad5d42641">ARM_NAND_GetStatus</a> : Get NAND status. </p>
859
860 </div>
861 </div>
862 <a id="afb64d95bec5cd74ff8b15044ce94bc93" name="afb64d95bec5cd74ff8b15044ce94bc93"></a>
863 <h2 class="memtitle"><span class="permalink"><a href="#afb64d95bec5cd74ff8b15044ce94bc93">&#9670;&#160;</a></span>InquireECC</h2>
864
865 <div class="memitem">
866 <div class="memproto">
867       <table class="memname">
868         <tr>
869           <td class="memname">int32_t(* InquireECC) (int32_t index, <a class="el" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a> *info)</td>
870         </tr>
871       </table>
872 </div><div class="memdoc">
873
874 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#gac21425454d586ef48fdfc35e7bd78947">ARM_NAND_InquireECC</a> : Inquire about available ECC. </p>
875
876 </div>
877 </div>
878
879 </div>
880 </div>
881 <a name="structARM__NAND__CAPABILITIES" id="structARM__NAND__CAPABILITIES"></a>
882 <h2 class="memtitle"><span class="permalink"><a href="#structARM__NAND__CAPABILITIES">&#9670;&#160;</a></span>ARM_NAND_CAPABILITIES</h2>
883
884 <div class="memitem">
885 <div class="memproto">
886       <table class="memname">
887         <tr>
888           <td class="memname">struct ARM_NAND_CAPABILITIES</td>
889         </tr>
890       </table>
891 </div><div class="memdoc">
892 <div class="textblock"><p>NAND Driver Capabilities. </p>
893 <p>A NAND driver can be implemented with different capabilities. The data fields of this struct encode the capabilities implemented by this driver.</p>
894 <p><b>Returned by:</b></p><ul>
895 <li><a class="el" href="group__nand__interface__gr.html#ga9f2609975c2008d21b9ae28f15daf147">ARM_NAND_GetCapabilities</a> </li>
896 </ul>
897 </div><table class="fieldtable">
898 <tr><th colspan="3">Data Fields</th></tr>
899 <tr><td class="fieldtype">
900 <a id="a5f347e9b63764bbb657f52dc20682128" name="a5f347e9b63764bbb657f52dc20682128"></a>uint32_t</td>
901 <td class="fieldname">
902 event_device_ready: 1</td>
903 <td class="fielddoc">
904 Signal Device Ready event (R/Bn rising edge) </td></tr>
905 <tr><td class="fieldtype">
906 <a id="ae0514834750c7452431717a881471e2b" name="ae0514834750c7452431717a881471e2b"></a>uint32_t</td>
907 <td class="fieldname">
908 reentrant_operation: 1</td>
909 <td class="fielddoc">
910 Supports re-entrant operation (SendCommand/Address, Read/WriteData) </td></tr>
911 <tr><td class="fieldtype">
912 <a id="afa4b798731b1154878c26dda3f090acf" name="afa4b798731b1154878c26dda3f090acf"></a>uint32_t</td>
913 <td class="fieldname">
914 sequence_operation: 1</td>
915 <td class="fielddoc">
916 Supports Sequence operation (ExecuteSequence, AbortSequence) </td></tr>
917 <tr><td class="fieldtype">
918 <a id="a35cfa22b2140b109fe24b97c42d5a5ed" name="a35cfa22b2140b109fe24b97c42d5a5ed"></a>uint32_t</td>
919 <td class="fieldname">
920 vcc: 1</td>
921 <td class="fielddoc">
922 Supports VCC Power Supply Control. </td></tr>
923 <tr><td class="fieldtype">
924 <a id="a0e7d3b9258d468492b22de55d855a06e" name="a0e7d3b9258d468492b22de55d855a06e"></a>uint32_t</td>
925 <td class="fieldname">
926 vcc_1v8: 1</td>
927 <td class="fielddoc">
928 Supports 1.8 VCC Power Supply. </td></tr>
929 <tr><td class="fieldtype">
930 <a id="ab1cdfce6eb051bed7b904e0fd1719afa" name="ab1cdfce6eb051bed7b904e0fd1719afa"></a>uint32_t</td>
931 <td class="fieldname">
932 vccq: 1</td>
933 <td class="fielddoc">
934 Supports VCCQ I/O Power Supply Control. </td></tr>
935 <tr><td class="fieldtype">
936 <a id="a1896a7548bb6fab285f23cc0d0b23d7d" name="a1896a7548bb6fab285f23cc0d0b23d7d"></a>uint32_t</td>
937 <td class="fieldname">
938 vccq_1v8: 1</td>
939 <td class="fielddoc">
940 Supports 1.8 VCCQ I/O Power Supply. </td></tr>
941 <tr><td class="fieldtype">
942 <a id="a75b97f7c917bba90b2f5c747d6857d23" name="a75b97f7c917bba90b2f5c747d6857d23"></a>uint32_t</td>
943 <td class="fieldname">
944 vpp: 1</td>
945 <td class="fielddoc">
946 Supports VPP High Voltage Power Supply Control. </td></tr>
947 <tr><td class="fieldtype">
948 <a id="afe7f5b149b8d92859398315b1ad31ddc" name="afe7f5b149b8d92859398315b1ad31ddc"></a>uint32_t</td>
949 <td class="fieldname">
950 wp: 1</td>
951 <td class="fielddoc">
952 Supports WPn (Write Protect) Control. </td></tr>
953 <tr><td class="fieldtype">
954 <a id="ad5dd0fcdd7f6d5e5cd739f73323a2b11" name="ad5dd0fcdd7f6d5e5cd739f73323a2b11"></a>uint32_t</td>
955 <td class="fieldname">
956 ce_lines: 4</td>
957 <td class="fielddoc">
958 Number of CEn (Chip Enable) lines: ce_lines + 1. </td></tr>
959 <tr><td class="fieldtype">
960 <a id="a2b8044d986995b183b057217643466bf" name="a2b8044d986995b183b057217643466bf"></a>uint32_t</td>
961 <td class="fieldname">
962 ce_manual: 1</td>
963 <td class="fielddoc">
964 Supports manual CEn (Chip Enable) Control. </td></tr>
965 <tr><td class="fieldtype">
966 <a id="a69f5e734ee4a9bb501718cf78a740c3e" name="a69f5e734ee4a9bb501718cf78a740c3e"></a>uint32_t</td>
967 <td class="fieldname">
968 rb_monitor: 1</td>
969 <td class="fielddoc">
970 Supports R/Bn (Ready/Busy) Monitoring. </td></tr>
971 <tr><td class="fieldtype">
972 <a id="a0f22baea13daa9101bf6fc1fdfddc747" name="a0f22baea13daa9101bf6fc1fdfddc747"></a>uint32_t</td>
973 <td class="fieldname">
974 data_width_16: 1</td>
975 <td class="fielddoc">
976 Supports 16-bit data. </td></tr>
977 <tr><td class="fieldtype">
978 <a id="aa9acfde38637fe749aa9271c0a8dae1a" name="aa9acfde38637fe749aa9271c0a8dae1a"></a>uint32_t</td>
979 <td class="fieldname">
980 ddr: 1</td>
981 <td class="fielddoc">
982 Supports NV-DDR Data Interface (ONFI) </td></tr>
983 <tr><td class="fieldtype">
984 <a id="ae086693990cbd5d628014c0fcc7c1f2c" name="ae086693990cbd5d628014c0fcc7c1f2c"></a>uint32_t</td>
985 <td class="fieldname">
986 ddr2: 1</td>
987 <td class="fielddoc">
988 Supports NV-DDR2 Data Interface (ONFI) </td></tr>
989 <tr><td class="fieldtype">
990 <a id="a21036f2047273d90c0af0e97031df5a9" name="a21036f2047273d90c0af0e97031df5a9"></a>uint32_t</td>
991 <td class="fieldname">
992 sdr_timing_mode: 3</td>
993 <td class="fielddoc">
994 Fastest (highest) SDR Timing Mode supported (ONFI) </td></tr>
995 <tr><td class="fieldtype">
996 <a id="a00c1f5db7d7c4abe7556733c36da7783" name="a00c1f5db7d7c4abe7556733c36da7783"></a>uint32_t</td>
997 <td class="fieldname">
998 ddr_timing_mode: 3</td>
999 <td class="fielddoc">
1000 Fastest (highest) NV_DDR Timing Mode supported (ONFI) </td></tr>
1001 <tr><td class="fieldtype">
1002 <a id="a6d9b66da0e56d04d545e0bb6841891b2" name="a6d9b66da0e56d04d545e0bb6841891b2"></a>uint32_t</td>
1003 <td class="fieldname">
1004 ddr2_timing_mode: 3</td>
1005 <td class="fielddoc">
1006 Fastest (highest) NV_DDR2 Timing Mode supported (ONFI) </td></tr>
1007 <tr><td class="fieldtype">
1008 <a id="ae672b2a65dd3d0b93812c088491c4552" name="ae672b2a65dd3d0b93812c088491c4552"></a>uint32_t</td>
1009 <td class="fieldname">
1010 driver_strength_18: 1</td>
1011 <td class="fielddoc">
1012 Supports Driver Strength 2.0x = 18 Ohms. </td></tr>
1013 <tr><td class="fieldtype">
1014 <a id="ae87c19872b838dac7d3136a3fd466f6a" name="ae87c19872b838dac7d3136a3fd466f6a"></a>uint32_t</td>
1015 <td class="fieldname">
1016 driver_strength_25: 1</td>
1017 <td class="fielddoc">
1018 Supports Driver Strength 1.4x = 25 Ohms. </td></tr>
1019 <tr><td class="fieldtype">
1020 <a id="aef3d6e1522a6cf7fb87fd113dcd43ad5" name="aef3d6e1522a6cf7fb87fd113dcd43ad5"></a>uint32_t</td>
1021 <td class="fieldname">
1022 driver_strength_50: 1</td>
1023 <td class="fielddoc">
1024 Supports Driver Strength 0.7x = 50 Ohms. </td></tr>
1025 <tr><td class="fieldtype">
1026 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
1027 <td class="fieldname">
1028 reserved: 2</td>
1029 <td class="fielddoc">
1030 Reserved (must be zero) </td></tr>
1031 </table>
1032
1033 </div>
1034 </div>
1035 <a name="structARM__NAND__ECC__INFO" id="structARM__NAND__ECC__INFO"></a>
1036 <h2 class="memtitle"><span class="permalink"><a href="#structARM__NAND__ECC__INFO">&#9670;&#160;</a></span>ARM_NAND_ECC_INFO</h2>
1037
1038 <div class="memitem">
1039 <div class="memproto">
1040       <table class="memname">
1041         <tr>
1042           <td class="memname">struct ARM_NAND_ECC_INFO</td>
1043         </tr>
1044       </table>
1045 </div><div class="memdoc">
1046 <div class="textblock"><p>NAND ECC (Error Correction Code) Information. </p>
1047 <p>Stores the characteristics of a ECC (Error Correction Code) algorithm and provides the information about necessary application data handling in order to protect stored data from NAND bit errors.</p>
1048 <p>ECC algorithms applied on NAND memory typically operate on NAND device page level which is virtually divided to multiple main and spare areas. Data from main and spare area is taken into account when generating ECC data which is also stored into spare area. ECC codeword defines how much data will be protected and how much ECC data will be generated.</p>
1049 <p>To describe how application data must be organized, ECC information structure specifies protection <em>type</em> which defines the protected part of data. As main and spare are of different size, two different algorithms could be provided, we can describe them as ECC0 and ECC1. Type can then have the following values:</p>
1050 <table class="markdownTable">
1051 <tr class="markdownTableHead">
1052 <th class="markdownTableHeadLeft">Type   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1053 <tr class="markdownTableRowOdd">
1054 <td class="markdownTableBodyLeft">0   </td><td class="markdownTableBodyLeft">ECC algorithm not used    </td></tr>
1055 <tr class="markdownTableRowEven">
1056 <td class="markdownTableBodyLeft">1   </td><td class="markdownTableBodyLeft">ECC0 algorithm protects main data    </td></tr>
1057 <tr class="markdownTableRowOdd">
1058 <td class="markdownTableBodyLeft">2   </td><td class="markdownTableBodyLeft">ECC0 algorithm protects main and spare data    </td></tr>
1059 <tr class="markdownTableRowEven">
1060 <td class="markdownTableBodyLeft">3   </td><td class="markdownTableBodyLeft">ECC0 algorithm protects main and ECC1 algorithm protects spare data   </td></tr>
1061 </table>
1062 <p>Virtual page division is described with page layout (<em>page_layout</em>), number of pages (<em>page_count</em>) and virtual page size (<em>page_size</em> or <em>virtual_page_size</em>). Virtual page size used by ECC algorithm can be defined by either <em>page_size</em> or <em>virtual_page_size</em>, depending on the <em>page_size</em> values:</p>
1063 <table class="markdownTable">
1064 <tr class="markdownTableHead">
1065 <th class="markdownTableHeadLeft">Value   </th><th class="markdownTableHeadLeft">Main + Spare size    </th></tr>
1066 <tr class="markdownTableRowOdd">
1067 <td class="markdownTableBodyLeft">0   </td><td class="markdownTableBodyLeft">512 + 16    </td></tr>
1068 <tr class="markdownTableRowEven">
1069 <td class="markdownTableBodyLeft">1   </td><td class="markdownTableBodyLeft">1024 + 32    </td></tr>
1070 <tr class="markdownTableRowOdd">
1071 <td class="markdownTableBodyLeft">2   </td><td class="markdownTableBodyLeft">2048 + 64    </td></tr>
1072 <tr class="markdownTableRowEven">
1073 <td class="markdownTableBodyLeft">3   </td><td class="markdownTableBodyLeft">4096 + 128    </td></tr>
1074 <tr class="markdownTableRowOdd">
1075 <td class="markdownTableBodyLeft">4   </td><td class="markdownTableBodyLeft">8192 + 256    </td></tr>
1076 <tr class="markdownTableRowEven">
1077 <td class="markdownTableBodyLeft">8   </td><td class="markdownTableBodyLeft">512 + 28    </td></tr>
1078 <tr class="markdownTableRowOdd">
1079 <td class="markdownTableBodyLeft">9   </td><td class="markdownTableBodyLeft">1024 + 56    </td></tr>
1080 <tr class="markdownTableRowEven">
1081 <td class="markdownTableBodyLeft">10   </td><td class="markdownTableBodyLeft">2048 + 112    </td></tr>
1082 <tr class="markdownTableRowOdd">
1083 <td class="markdownTableBodyLeft">11   </td><td class="markdownTableBodyLeft">4096 + 224    </td></tr>
1084 <tr class="markdownTableRowEven">
1085 <td class="markdownTableBodyLeft">12   </td><td class="markdownTableBodyLeft">8192 + 448    </td></tr>
1086 <tr class="markdownTableRowOdd">
1087 <td class="markdownTableBodyLeft">15   </td><td class="markdownTableBodyLeft">Not used, use virtual_page_size   </td></tr>
1088 </table>
1089 <p>Structure member <em>virtual_page_size</em> is an array of two 16-bit values. First field of array (i.e. <em>virtual_page_size</em>[0]) contains main area size while second (i.e. <em>virtual_page_size</em>[1]) contains spare area size. Number of virtual pages N is defined with <em>page_count</em> and must be calculated as N = 2 ^ page_count.</p>
1090 <p>Page layout defines main and spare ordering and two different page layouts are possible. First ordering assumes that spare area follows after every main area, while in second case all main areas build one contiguous region followed by contiguous region of spare areas. This is defined by member <em>page_layout:</em> </p>
1091 <table class="markdownTable">
1092 <tr class="markdownTableHead">
1093 <th class="markdownTableHeadLeft">Layout   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1094 <tr class="markdownTableRowOdd">
1095 <td class="markdownTableBodyLeft">0   </td><td class="markdownTableBodyLeft">Single spare follows after single main: Main0,Spare0 ... MainN-1,SpareN-1    </td></tr>
1096 <tr class="markdownTableRowEven">
1097 <td class="markdownTableBodyLeft">1   </td><td class="markdownTableBodyLeft">Contiguous spare follows after contiguous main: Main0 ... MainN-1,Spare0 ... SpareN-1   </td></tr>
1098 </table>
1099 <p>ECC codeword size defines the size of data that is protected by ECC algorithm and is different for main and spare area. All structure members that define the codeword are therefore arrays of two 16-bit values. Codeword offset defines where ECC protected data starts in main (<em>codeword_offset</em>[0]) or spare (<em>codeword_offset</em>[1]) area, codeword size (<em>codeword_size</em>) defines the number of data that is protected i.e. data over which ECC is calculated and codeword gap (<em>codeword_gap</em>) defines the space between two consecutive codeword regions.</p>
1100 <p>Generated ECC data is stored into spare area and is described similar as codeword, with offset from start of spare area (<em>ecc_offset</em>), size of generated data (<em>ecc_size</em>) and gap (<em>ecc_gap</em>) between two consecutive ECC data regions.</p>
1101 <p>Number of bits that ECC algorithm can correct per codeword is defined with <em>correctable_bits</em>.</p>
1102 <p><b>Parameter for:</b></p><ul>
1103 <li><a class="el" href="group__nand__interface__gr.html#gac21425454d586ef48fdfc35e7bd78947">ARM_NAND_InquireECC</a> </li>
1104 </ul>
1105 </div><table class="fieldtable">
1106 <tr><th colspan="3">Data Fields</th></tr>
1107 <tr><td class="fieldtype">
1108 <a id="ad44b615021ed3ccb734fcaf583ef4a03" name="ad44b615021ed3ccb734fcaf583ef4a03"></a>uint32_t</td>
1109 <td class="fieldname">
1110 type: 2</td>
1111 <td class="fielddoc">
1112 Type: 1=ECC0 over Main, 2=ECC0 over Main+Spare, 3=ECC0 over Main and ECC1 over Spare. </td></tr>
1113 <tr><td class="fieldtype">
1114 <a id="a5952ba4313bda7833fefd358f5aff979" name="a5952ba4313bda7833fefd358f5aff979"></a>uint32_t</td>
1115 <td class="fieldname">
1116 page_layout: 1</td>
1117 <td class="fielddoc">
1118 Page layout: 0=|Main0|Spare0|...|MainN-1|SpareN-1|, 1=|Main0|...|MainN-1|Spare0|...|SpareN-1|. </td></tr>
1119 <tr><td class="fieldtype">
1120 <a id="aa993bc236650aa405b01d00b7ca72904" name="aa993bc236650aa405b01d00b7ca72904"></a>uint32_t</td>
1121 <td class="fieldname">
1122 page_count: 3</td>
1123 <td class="fielddoc">
1124 Number of virtual pages: N = 2 ^ page_count. </td></tr>
1125 <tr><td class="fieldtype">
1126 <a id="a9dd3e47e968a8f6beb5d88c6d1b7ebe9" name="a9dd3e47e968a8f6beb5d88c6d1b7ebe9"></a>uint32_t</td>
1127 <td class="fieldname">
1128 page_size: 4</td>
1129 <td class="fielddoc">
1130 Virtual Page size (Main+Spare): 0=512+16, 1=1k+32, 2=2k+64, 3=4k+128, 4=8k+256, 8=512+28, 9=1k+56, 10=2k+112, 11=4k+224, 12=8k+448, 15=Not used (extended description) </td></tr>
1131 <tr><td class="fieldtype">
1132 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
1133 <td class="fieldname">
1134 reserved: 14</td>
1135 <td class="fielddoc">
1136 Reserved (must be zero) </td></tr>
1137 <tr><td class="fieldtype">
1138 <a id="ae65f920c4ad99fd0c6bdf5fd8c4d161a" name="ae65f920c4ad99fd0c6bdf5fd8c4d161a"></a>uint32_t</td>
1139 <td class="fieldname">
1140 correctable_bits: 8</td>
1141 <td class="fielddoc">
1142 Number of correctable bits (based on 512 byte codeword size) </td></tr>
1143 <tr><td class="fieldtype">
1144 <a id="ae8cff208d9efb5067d38ced675916c66" name="ae8cff208d9efb5067d38ced675916c66"></a>uint16_t</td>
1145 <td class="fieldname">
1146 codeword_size[2]</td>
1147 <td class="fielddoc">
1148 Number of bytes over which ECC is calculated. </td></tr>
1149 <tr><td class="fieldtype">
1150 <a id="a22365f6a2af1171a1c3629c8ae5fe001" name="a22365f6a2af1171a1c3629c8ae5fe001"></a>uint16_t</td>
1151 <td class="fieldname">
1152 ecc_size[2]</td>
1153 <td class="fielddoc">
1154 ECC size in bytes (rounded up) </td></tr>
1155 <tr><td class="fieldtype">
1156 <a id="a22d6a1813a47a7044f7acb478f8e9eb8" name="a22d6a1813a47a7044f7acb478f8e9eb8"></a>uint16_t</td>
1157 <td class="fieldname">
1158 ecc_offset[2]</td>
1159 <td class="fielddoc">
1160 ECC offset in bytes (where ECC starts in Spare) </td></tr>
1161 <tr><td class="fieldtype">
1162 <a id="aa270f95e67fdf1e9137c61f2045b7636" name="aa270f95e67fdf1e9137c61f2045b7636"></a>uint16_t</td>
1163 <td class="fieldname">
1164 virtual_page_size[2]</td>
1165 <td class="fielddoc">
1166 Virtual Page size in bytes (Main/Spare) </td></tr>
1167 <tr><td class="fieldtype">
1168 <a id="a31c5b0e899b2d60adb6cdef971633db0" name="a31c5b0e899b2d60adb6cdef971633db0"></a>uint16_t</td>
1169 <td class="fieldname">
1170 codeword_offset[2]</td>
1171 <td class="fielddoc">
1172 Codeword offset in bytes (where ECC protected data starts in Main/Spare) </td></tr>
1173 <tr><td class="fieldtype">
1174 <a id="ae0a2b8415bddd99dade9cbcf8c52186a" name="ae0a2b8415bddd99dade9cbcf8c52186a"></a>uint16_t</td>
1175 <td class="fieldname">
1176 codeword_gap[2]</td>
1177 <td class="fielddoc">
1178 Codeword gap in bytes till next protected data. </td></tr>
1179 <tr><td class="fieldtype">
1180 <a id="a94d6b62b24d96ff83c985325d8825dd3" name="a94d6b62b24d96ff83c985325d8825dd3"></a>uint16_t</td>
1181 <td class="fieldname">
1182 ecc_gap[2]</td>
1183 <td class="fielddoc">
1184 ECC gap in bytes till next generated ECC. </td></tr>
1185 </table>
1186
1187 </div>
1188 </div>
1189 <h2 class="groupheader">Typedef Documentation</h2>
1190 <a id="ga09f4cf2f2df0bb690bce38b13d77e50f" name="ga09f4cf2f2df0bb690bce38b13d77e50f"></a>
1191 <h2 class="memtitle"><span class="permalink"><a href="#ga09f4cf2f2df0bb690bce38b13d77e50f">&#9670;&#160;</a></span>ARM_NAND_SignalEvent_t</h2>
1192
1193 <div class="memitem">
1194 <div class="memproto">
1195       <table class="memname">
1196         <tr>
1197           <td class="memname">ARM_NAND_SignalEvent_t</td>
1198         </tr>
1199       </table>
1200 </div><div class="memdoc">
1201
1202 <p>Pointer to <a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a> : Signal NAND Event. </p>
1203 <p>Provides the typedef for the callback function <a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a>.</p>
1204 <p><b>Parameter for:</b></p><ul>
1205 <li><a class="el" href="group__nand__interface__gr.html#ga74ad34718a595e7a4375b90f33e72750">ARM_NAND_Initialize</a> </li>
1206 </ul>
1207
1208 </div>
1209 </div>
1210 <h2 class="groupheader">Function Documentation</h2>
1211 <a id="ga01255fd4f15e7fa4751c7ea59648ef5a" name="ga01255fd4f15e7fa4751c7ea59648ef5a"></a>
1212 <h2 class="memtitle"><span class="permalink"><a href="#ga01255fd4f15e7fa4751c7ea59648ef5a">&#9670;&#160;</a></span>ARM_NAND_GetVersion()</h2>
1213
1214 <div class="memitem">
1215 <div class="memproto">
1216       <table class="memname">
1217         <tr>
1218           <td class="memname"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a> ARM_NAND_GetVersion </td>
1219           <td>(</td>
1220           <td class="paramtype">void&#160;</td>
1221           <td class="paramname"></td><td>)</td>
1222           <td></td>
1223         </tr>
1224       </table>
1225 </div><div class="memdoc">
1226
1227 <p>Get driver version. </p>
1228 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></dd></dl>
1229 <p>The function <b>ARM_NAND_GetVersion</b> returns version information of the driver implementation in <a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></p><ul>
1230 <li>API version is the version of the CMSIS-Driver specification used to implement this driver.</li>
1231 <li>Driver version is source code version of the actual driver implementation.</li>
1232 </ul>
1233 <p>Example: </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> Driver_NAND0;</div>
1234 <div class="line"><a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> *drv_info;</div>
1235 <div class="line"> </div>
1236 <div class="line"><span class="keywordtype">void</span> setup_nand (<span class="keywordtype">void</span>)  {</div>
1237 <div class="line">  <a class="code hl_struct" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>  version;</div>
1238 <div class="line"> </div>
1239 <div class="line">  drv_info = &amp;Driver_NAND0;  </div>
1240 <div class="line">  version = drv_info-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">GetVersion</a> ();</div>
1241 <div class="line">  <span class="keywordflow">if</span> (version.<a class="code hl_variable" href="group__common__drv__gr.html#ad180da20fbde1d3dafc074af87c19540">api</a> &lt; 0x10A)   {      <span class="comment">// requires at minimum API version 1.10 or higher</span></div>
1242 <div class="line">    <span class="comment">// error handling</span></div>
1243 <div class="line">    <span class="keywordflow">return</span>;</div>
1244 <div class="line">  }</div>
1245 <div class="line">}</div>
1246 <div class="ttc" id="agroup__common__drv__gr_html_ad180da20fbde1d3dafc074af87c19540"><div class="ttname"><a href="group__common__drv__gr.html#ad180da20fbde1d3dafc074af87c19540">ARM_DRIVER_VERSION::api</a></div><div class="ttdeci">uint16_t api</div><div class="ttdoc">API version.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:47</div></div>
1247 <div class="ttc" id="agroup__common__drv__gr_html_structARM__DRIVER__VERSION"><div class="ttname"><a href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></div><div class="ttdoc">Driver Version.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:46</div></div>
1248 <div class="ttc" id="agroup__nand__interface__gr_html_a30afd9cb3113c037b5f1926f5ef93b59"><div class="ttname"><a href="group__nand__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">ARM_DRIVER_NAND::GetVersion</a></div><div class="ttdeci">ARM_DRIVER_VERSION(* GetVersion)(void)</div><div class="ttdoc">Pointer to ARM_NAND_GetVersion : Get driver version.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:399</div></div>
1249 </div><!-- fragment --> 
1250 </div>
1251 </div>
1252 <a id="ga9f2609975c2008d21b9ae28f15daf147" name="ga9f2609975c2008d21b9ae28f15daf147"></a>
1253 <h2 class="memtitle"><span class="permalink"><a href="#ga9f2609975c2008d21b9ae28f15daf147">&#9670;&#160;</a></span>ARM_NAND_GetCapabilities()</h2>
1254
1255 <div class="memitem">
1256 <div class="memproto">
1257       <table class="memname">
1258         <tr>
1259           <td class="memname"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a> ARM_NAND_GetCapabilities </td>
1260           <td>(</td>
1261           <td class="paramtype">void&#160;</td>
1262           <td class="paramname"></td><td>)</td>
1263           <td></td>
1264         </tr>
1265       </table>
1266 </div><div class="memdoc">
1267
1268 <p>Get driver capabilities. </p>
1269 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a></dd></dl>
1270 <p>The function <b>ARM_NAND_GetCapabilities</b> retrieves information about capabilities in this driver implementation. The data fields of the structure <a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a> encode various capabilities, for example if a hardware is able to create signal events using the <a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a> callback function.</p>
1271 <p>Example: </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> Driver_NAND0;</div>
1272 <div class="line"><a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> *drv_info;</div>
1273 <div class="line">  </div>
1274 <div class="line"><span class="keywordtype">void</span> read_capabilities (<span class="keywordtype">void</span>)  {</div>
1275 <div class="line">  <a class="code hl_struct" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a> drv_capabilities;</div>
1276 <div class="line"> </div>
1277 <div class="line">  drv_info = &amp;Driver_NAND0;  </div>
1278 <div class="line">  drv_capabilities = drv_info-&gt;<a class="code hl_variable" href="group__nand__interface__gr.html#a56a1554cd7d22db9722b57158199375a">GetCapabilities</a> ();</div>
1279 <div class="line">  <span class="comment">// interrogate capabilities</span></div>
1280 <div class="line"> </div>
1281 <div class="line">}</div>
1282 </div><!-- fragment --> 
1283 </div>
1284 </div>
1285 <a id="ga74ad34718a595e7a4375b90f33e72750" name="ga74ad34718a595e7a4375b90f33e72750"></a>
1286 <h2 class="memtitle"><span class="permalink"><a href="#ga74ad34718a595e7a4375b90f33e72750">&#9670;&#160;</a></span>ARM_NAND_Initialize()</h2>
1287
1288 <div class="memitem">
1289 <div class="memproto">
1290       <table class="memname">
1291         <tr>
1292           <td class="memname">int32_t ARM_NAND_Initialize </td>
1293           <td>(</td>
1294           <td class="paramtype"><a class="el" href="group__nand__interface__gr.html#ga09f4cf2f2df0bb690bce38b13d77e50f">ARM_NAND_SignalEvent_t</a>&#160;</td>
1295           <td class="paramname"><em>cb_event</em></td><td>)</td>
1296           <td></td>
1297         </tr>
1298       </table>
1299 </div><div class="memdoc">
1300
1301 <p>Initialize the NAND Interface. </p>
1302 <dl class="params"><dt>Parameters</dt><dd>
1303   <table class="params">
1304     <tr><td class="paramdir">[in]</td><td class="paramname">cb_event</td><td>Pointer to <a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a> </td></tr>
1305   </table>
1306   </dd>
1307 </dl>
1308 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1309 <p>The function <b>ARM_NAND_Initialize</b> initializes the NAND interface. It is called when the middleware component starts operation.</p>
1310 <p>The function performs the following operations:</p><ul>
1311 <li>Initializes the resources needed for the NAND interface.</li>
1312 <li>Registers the <a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a> callback function.</li>
1313 </ul>
1314 <p>The parameter <em>cb_event</em> is a pointer to the <a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a> callback function; use a NULL pointer when no callback signals are required.</p>
1315 <p><b>Example:</b> </p><ul>
1316 <li>see <a class="el" href="group__nand__interface__gr.html">NAND Interface</a> - Driver Functions </li>
1317 </ul>
1318
1319 </div>
1320 </div>
1321 <a id="gaa788b638ab696b166fee2f4a4bc8d97a" name="gaa788b638ab696b166fee2f4a4bc8d97a"></a>
1322 <h2 class="memtitle"><span class="permalink"><a href="#gaa788b638ab696b166fee2f4a4bc8d97a">&#9670;&#160;</a></span>ARM_NAND_Uninitialize()</h2>
1323
1324 <div class="memitem">
1325 <div class="memproto">
1326       <table class="memname">
1327         <tr>
1328           <td class="memname">int32_t ARM_NAND_Uninitialize </td>
1329           <td>(</td>
1330           <td class="paramtype">void&#160;</td>
1331           <td class="paramname"></td><td>)</td>
1332           <td></td>
1333         </tr>
1334       </table>
1335 </div><div class="memdoc">
1336
1337 <p>De-initialize the NAND Interface. </p>
1338 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1339 <p>The function <b>ARM_NAND_Uninitialize</b> de-initializes the resources of NAND interface.</p>
1340 <p>It is called when the middleware component stops operation and releases the software resources used by the interface. </p>
1341
1342 </div>
1343 </div>
1344 <a id="ga9c9975637980b5d42db7baba0191fda1" name="ga9c9975637980b5d42db7baba0191fda1"></a>
1345 <h2 class="memtitle"><span class="permalink"><a href="#ga9c9975637980b5d42db7baba0191fda1">&#9670;&#160;</a></span>ARM_NAND_PowerControl()</h2>
1346
1347 <div class="memitem">
1348 <div class="memproto">
1349       <table class="memname">
1350         <tr>
1351           <td class="memname">int32_t ARM_NAND_PowerControl </td>
1352           <td>(</td>
1353           <td class="paramtype"><a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a>&#160;</td>
1354           <td class="paramname"><em>state</em></td><td>)</td>
1355           <td></td>
1356         </tr>
1357       </table>
1358 </div><div class="memdoc">
1359
1360 <p>Control the NAND interface power. </p>
1361 <dl class="params"><dt>Parameters</dt><dd>
1362   <table class="params">
1363     <tr><td class="paramdir">[in]</td><td class="paramname">state</td><td>Power state </td></tr>
1364   </table>
1365   </dd>
1366 </dl>
1367 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1368 <p>The function <b>ARM_NAND_PowerControl</b> controls the power modes of the NAND interface. <br  />
1369 </p>
1370 <p>The parameter <em>state</em> sets the operation and can have the following values:</p><ul>
1371 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e">ARM_POWER_FULL</a> : set-up peripheral for data transfers, enable interrupts (NVIC) and optionally DMA. Can be called multiple times. If the peripheral is already in this mode the function performs no operation and returns with <a class="el" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>.</li>
1372 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5a9ef9e57cbcc948d0e22314e73dc8c434">ARM_POWER_LOW</a> : may use power saving. Returns <a class="el" href="group__execution__status.html#ga2efa59e480d82697795439220e6884e4">ARM_DRIVER_ERROR_UNSUPPORTED</a> when not implemented.</li>
1373 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5ab6f5becc85ebd51c3dd2524a95d2ca35">ARM_POWER_OFF</a> : terminates any pending data transfers, disables peripheral, disables related interrupts and DMA.</li>
1374 </ul>
1375 <p>Refer to <a class="el" href="theoryOperation.html#CallSequence">Function Call Sequence</a> for more information. </p>
1376
1377 </div>
1378 </div>
1379 <a id="ga11adcbaaace09746581a36befbd563c9" name="ga11adcbaaace09746581a36befbd563c9"></a>
1380 <h2 class="memtitle"><span class="permalink"><a href="#ga11adcbaaace09746581a36befbd563c9">&#9670;&#160;</a></span>ARM_NAND_DevicePower()</h2>
1381
1382 <div class="memitem">
1383 <div class="memproto">
1384       <table class="memname">
1385         <tr>
1386           <td class="memname">int32_t ARM_NAND_DevicePower </td>
1387           <td>(</td>
1388           <td class="paramtype">uint32_t&#160;</td>
1389           <td class="paramname"><em>voltage</em></td><td>)</td>
1390           <td></td>
1391         </tr>
1392       </table>
1393 </div><div class="memdoc">
1394
1395 <p>Set device power supply voltage. </p>
1396 <dl class="params"><dt>Parameters</dt><dd>
1397   <table class="params">
1398     <tr><td class="paramdir">[in]</td><td class="paramname">voltage</td><td>NAND Device supply voltage </td></tr>
1399   </table>
1400   </dd>
1401 </dl>
1402 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1403 <p>The function <b>ARM_NAND_DevicePower</b> controls the power supply of the NAND device.</p>
1404 <p>The parameter <em>voltage</em> sets the device supply voltage as defined in the table.</p>
1405 <p><b>AMR_NAND_POWER_xxx_xxx</b> specifies power settings.</p>
1406 <table class="markdownTable">
1407 <tr class="markdownTableHead">
1408 <th class="markdownTableHeadLeft">Device Power Bits   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1409 <tr class="markdownTableRowOdd">
1410 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#a323c320a6195b78c2c79f5c6e85f02e1">ARM_NAND_POWER_VCC_OFF</a>   </td><td class="markdownTableBodyLeft">Set VCC Power off    </td></tr>
1411 <tr class="markdownTableRowEven">
1412 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#ad15355d67bc239ff49cceac69c2024b3">ARM_NAND_POWER_VCC_3V3</a>   </td><td class="markdownTableBodyLeft">Set VCC = 3.3V    </td></tr>
1413 <tr class="markdownTableRowOdd">
1414 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#aa7b9d5a71125b745caba5c1d7aff6385">ARM_NAND_POWER_VCC_1V8</a>   </td><td class="markdownTableBodyLeft">Set VCC = 1.8V    </td></tr>
1415 <tr class="markdownTableRowEven">
1416 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#aca7679e8269ee986559f4218816937c3">ARM_NAND_POWER_VCCQ_OFF</a>   </td><td class="markdownTableBodyLeft">Set VCCQ I/O Power off    </td></tr>
1417 <tr class="markdownTableRowOdd">
1418 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#a6d5a8a33a0fdaaff2e57e1ac53c984c2">ARM_NAND_POWER_VCCQ_3V3</a>   </td><td class="markdownTableBodyLeft">Set VCCQ = 3.3V    </td></tr>
1419 <tr class="markdownTableRowEven">
1420 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#a653d9b4d7bee173beb49d8fec0469476">ARM_NAND_POWER_VCCQ_1V8</a>   </td><td class="markdownTableBodyLeft">Set VCCQ = 1.8V    </td></tr>
1421 <tr class="markdownTableRowOdd">
1422 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#ae2d278901881ffc73d3e0b48717b22f0">ARM_NAND_POWER_VPP_OFF</a>   </td><td class="markdownTableBodyLeft">Set VPP off    </td></tr>
1423 <tr class="markdownTableRowEven">
1424 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#aeb0d50e30bbcd8ab59c3b78db634aad5">ARM_NAND_POWER_VPP_ON</a>   </td><td class="markdownTableBodyLeft">Set VPP on   </td></tr>
1425 </table>
1426
1427 </div>
1428 </div>
1429 <a id="ga1987e65a4e756d748db86332c9fb1cec" name="ga1987e65a4e756d748db86332c9fb1cec"></a>
1430 <h2 class="memtitle"><span class="permalink"><a href="#ga1987e65a4e756d748db86332c9fb1cec">&#9670;&#160;</a></span>ARM_NAND_WriteProtect()</h2>
1431
1432 <div class="memitem">
1433 <div class="memproto">
1434       <table class="memname">
1435         <tr>
1436           <td class="memname">int32_t ARM_NAND_WriteProtect </td>
1437           <td>(</td>
1438           <td class="paramtype">uint32_t&#160;</td>
1439           <td class="paramname"><em>dev_num</em>, </td>
1440         </tr>
1441         <tr>
1442           <td class="paramkey"></td>
1443           <td></td>
1444           <td class="paramtype">bool&#160;</td>
1445           <td class="paramname"><em>enable</em>&#160;</td>
1446         </tr>
1447         <tr>
1448           <td></td>
1449           <td>)</td>
1450           <td></td><td></td>
1451         </tr>
1452       </table>
1453 </div><div class="memdoc">
1454
1455 <p>Control WPn (Write Protect). </p>
1456 <dl class="params"><dt>Parameters</dt><dd>
1457   <table class="params">
1458     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1459     <tr><td class="paramdir">[in]</td><td class="paramname">enable</td><td><ul>
1460 <li><b>false</b> Write Protect off</li>
1461 <li><b>true</b> Write Protect on </li>
1462 </ul>
1463 </td></tr>
1464   </table>
1465   </dd>
1466 </dl>
1467 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1468 <p>The function <b>ARM_NAND_WriteProtect</b> controls the Write Protect (WPn) pin of a NAND device.</p>
1469 <p>The parameter <em>dev_num</em> is the device number. <br  />
1470  The parameter <em>enable</em> specifies whether to enable or disable write protection. </p>
1471
1472 </div>
1473 </div>
1474 <a id="ga1c0cba87cb7b706ad5986dc67c831ad1" name="ga1c0cba87cb7b706ad5986dc67c831ad1"></a>
1475 <h2 class="memtitle"><span class="permalink"><a href="#ga1c0cba87cb7b706ad5986dc67c831ad1">&#9670;&#160;</a></span>ARM_NAND_ChipEnable()</h2>
1476
1477 <div class="memitem">
1478 <div class="memproto">
1479       <table class="memname">
1480         <tr>
1481           <td class="memname">int32_t ARM_NAND_ChipEnable </td>
1482           <td>(</td>
1483           <td class="paramtype">uint32_t&#160;</td>
1484           <td class="paramname"><em>dev_num</em>, </td>
1485         </tr>
1486         <tr>
1487           <td class="paramkey"></td>
1488           <td></td>
1489           <td class="paramtype">bool&#160;</td>
1490           <td class="paramname"><em>enable</em>&#160;</td>
1491         </tr>
1492         <tr>
1493           <td></td>
1494           <td>)</td>
1495           <td></td><td></td>
1496         </tr>
1497       </table>
1498 </div><div class="memdoc">
1499
1500 <p>Control CEn (Chip Enable). </p>
1501 <dl class="params"><dt>Parameters</dt><dd>
1502   <table class="params">
1503     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1504     <tr><td class="paramdir">[in]</td><td class="paramname">enable</td><td><ul>
1505 <li><b>false</b> Chip Enable off</li>
1506 <li><b>true</b> Chip Enable on </li>
1507 </ul>
1508 </td></tr>
1509   </table>
1510   </dd>
1511 </dl>
1512 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1513 <p>The function <b>ARM_NAND_ChipEnable</b> control the Chip Enable (CEn) pin of a NAND device.</p>
1514 <p>The parameter <em>dev_num</em> is the device number. <br  />
1515  The parameter <em>enable</em> specifies whether to enable or disable the device.</p>
1516 <p>This function is optional and supported only when the data field <em>ce_manual</em> = <span class="XML-Token">1</span> in the structure <a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>. Otherwise, the Chip Enable (CEn) signal is controlled automatically by SendCommand/Address, Read/WriteData and ExecuteSequence (for example when the NAND device is connected to a memory bus). </p>
1517
1518 </div>
1519 </div>
1520 <a id="ga43011066306bd716b580e6aa9a80cf65" name="ga43011066306bd716b580e6aa9a80cf65"></a>
1521 <h2 class="memtitle"><span class="permalink"><a href="#ga43011066306bd716b580e6aa9a80cf65">&#9670;&#160;</a></span>ARM_NAND_GetDeviceBusy()</h2>
1522
1523 <div class="memitem">
1524 <div class="memproto">
1525       <table class="memname">
1526         <tr>
1527           <td class="memname">int32_t ARM_NAND_GetDeviceBusy </td>
1528           <td>(</td>
1529           <td class="paramtype">uint32_t&#160;</td>
1530           <td class="paramname"><em>dev_num</em></td><td>)</td>
1531           <td></td>
1532         </tr>
1533       </table>
1534 </div><div class="memdoc">
1535
1536 <p>Get Device Busy pin state. </p>
1537 <dl class="params"><dt>Parameters</dt><dd>
1538   <table class="params">
1539     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1540   </table>
1541   </dd>
1542 </dl>
1543 <dl class="section return"><dt>Returns</dt><dd>1=busy, 0=not busy, or error</dd></dl>
1544 <p>The function <b>ARM_NAND_GetDeviceBusy</b> returns the status of the Device Busy pin: [<span class="XML-Token">1=busy; 0=not busy or error</span>].</p>
1545 <p>The parameter <em>dev_num</em> is the device number. </p>
1546
1547 </div>
1548 </div>
1549 <a id="ga9f70b89ba478eadfe7f5dee7453a4fb7" name="ga9f70b89ba478eadfe7f5dee7453a4fb7"></a>
1550 <h2 class="memtitle"><span class="permalink"><a href="#ga9f70b89ba478eadfe7f5dee7453a4fb7">&#9670;&#160;</a></span>ARM_NAND_SendCommand()</h2>
1551
1552 <div class="memitem">
1553 <div class="memproto">
1554       <table class="memname">
1555         <tr>
1556           <td class="memname">int32_t ARM_NAND_SendCommand </td>
1557           <td>(</td>
1558           <td class="paramtype">uint32_t&#160;</td>
1559           <td class="paramname"><em>dev_num</em>, </td>
1560         </tr>
1561         <tr>
1562           <td class="paramkey"></td>
1563           <td></td>
1564           <td class="paramtype">uint8_t&#160;</td>
1565           <td class="paramname"><em>cmd</em>&#160;</td>
1566         </tr>
1567         <tr>
1568           <td></td>
1569           <td>)</td>
1570           <td></td><td></td>
1571         </tr>
1572       </table>
1573 </div><div class="memdoc">
1574
1575 <p>Send command to NAND device. </p>
1576 <dl class="params"><dt>Parameters</dt><dd>
1577   <table class="params">
1578     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1579     <tr><td class="paramdir">[in]</td><td class="paramname">cmd</td><td>Command </td></tr>
1580   </table>
1581   </dd>
1582 </dl>
1583 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1584 <p>The function <b>ARM_NAND_SendCommand</b> sends a command to the NAND device.</p>
1585 <p>The parameter <em>dev_num</em> is the device number. <br  />
1586 The parameter <em>cmd</em> is the command sent to the NAND device. </p>
1587
1588 </div>
1589 </div>
1590 <a id="ga00e195031e03d364db7595858a7e76f3" name="ga00e195031e03d364db7595858a7e76f3"></a>
1591 <h2 class="memtitle"><span class="permalink"><a href="#ga00e195031e03d364db7595858a7e76f3">&#9670;&#160;</a></span>ARM_NAND_SendAddress()</h2>
1592
1593 <div class="memitem">
1594 <div class="memproto">
1595       <table class="memname">
1596         <tr>
1597           <td class="memname">int32_t ARM_NAND_SendAddress </td>
1598           <td>(</td>
1599           <td class="paramtype">uint32_t&#160;</td>
1600           <td class="paramname"><em>dev_num</em>, </td>
1601         </tr>
1602         <tr>
1603           <td class="paramkey"></td>
1604           <td></td>
1605           <td class="paramtype">uint8_t&#160;</td>
1606           <td class="paramname"><em>addr</em>&#160;</td>
1607         </tr>
1608         <tr>
1609           <td></td>
1610           <td>)</td>
1611           <td></td><td></td>
1612         </tr>
1613       </table>
1614 </div><div class="memdoc">
1615
1616 <p>Send address to NAND device. </p>
1617 <dl class="params"><dt>Parameters</dt><dd>
1618   <table class="params">
1619     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1620     <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address </td></tr>
1621   </table>
1622   </dd>
1623 </dl>
1624 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1625 <p>Send an address to the NAND device. The parameter <em>dev_num</em> is the device number. The parameter <em>addr</em> is the address. </p>
1626
1627 </div>
1628 </div>
1629 <a id="gae1899a20ef107400c8bf84fad477a8ce" name="gae1899a20ef107400c8bf84fad477a8ce"></a>
1630 <h2 class="memtitle"><span class="permalink"><a href="#gae1899a20ef107400c8bf84fad477a8ce">&#9670;&#160;</a></span>ARM_NAND_ReadData()</h2>
1631
1632 <div class="memitem">
1633 <div class="memproto">
1634       <table class="memname">
1635         <tr>
1636           <td class="memname">int32_t ARM_NAND_ReadData </td>
1637           <td>(</td>
1638           <td class="paramtype">uint32_t&#160;</td>
1639           <td class="paramname"><em>dev_num</em>, </td>
1640         </tr>
1641         <tr>
1642           <td class="paramkey"></td>
1643           <td></td>
1644           <td class="paramtype">void *&#160;</td>
1645           <td class="paramname"><em>data</em>, </td>
1646         </tr>
1647         <tr>
1648           <td class="paramkey"></td>
1649           <td></td>
1650           <td class="paramtype">uint32_t&#160;</td>
1651           <td class="paramname"><em>cnt</em>, </td>
1652         </tr>
1653         <tr>
1654           <td class="paramkey"></td>
1655           <td></td>
1656           <td class="paramtype">uint32_t&#160;</td>
1657           <td class="paramname"><em>mode</em>&#160;</td>
1658         </tr>
1659         <tr>
1660           <td></td>
1661           <td>)</td>
1662           <td></td><td></td>
1663         </tr>
1664       </table>
1665 </div><div class="memdoc">
1666
1667 <p>Read data from NAND device. </p>
1668 <dl class="params"><dt>Parameters</dt><dd>
1669   <table class="params">
1670     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1671     <tr><td class="paramdir">[out]</td><td class="paramname">data</td><td>Pointer to buffer for data to read from NAND device </td></tr>
1672     <tr><td class="paramdir">[in]</td><td class="paramname">cnt</td><td>Number of data items to read </td></tr>
1673     <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>Operation mode </td></tr>
1674   </table>
1675   </dd>
1676 </dl>
1677 <dl class="section return"><dt>Returns</dt><dd>number of data items read or <a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1678 <p>The function <b>ARM_NAND_ReadData</b> reads data from a NAND device.</p>
1679 <p>The parameter <em>dev_num</em> is the device number. <br  />
1680 The parameter <em>data</em> is a pointer to the buffer that stores the data read from a NAND device. <br  />
1681 The parameter <em>cnt</em> is the number of data items to read. <br  />
1682 The parameter <em>mode</em> defines the operation mode as listed in the table below.</p>
1683 <table class="markdownTable">
1684 <tr class="markdownTableHead">
1685 <th class="markdownTableHeadLeft">Read Data Mode   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1686 <tr class="markdownTableRowOdd">
1687 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#gac2eb4475f12a443209165d29fe200030">ARM_NAND_ECC(n)</a>   </td><td class="markdownTableBodyLeft">Select ECC    </td></tr>
1688 <tr class="markdownTableRowEven">
1689 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#ga15c79a12200c16f953936635f930df1d">ARM_NAND_ECC0</a>   </td><td class="markdownTableBodyLeft">Use ECC0 of selected ECC    </td></tr>
1690 <tr class="markdownTableRowOdd">
1691 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#gaee653288a88318ee33d1db81baa69bbc">ARM_NAND_ECC1</a>   </td><td class="markdownTableBodyLeft">Use ECC1 of selected ECC    </td></tr>
1692 <tr class="markdownTableRowEven">
1693 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#af40631ba62411e0ac06c3a945d608581">ARM_NAND_DRIVER_DONE_EVENT</a>   </td><td class="markdownTableBodyLeft">Generate <a class="el" href="group__NAND__events.html#gac774a334871789d24107b843d1ebd00c">ARM_NAND_EVENT_DRIVER_DONE</a>   </td></tr>
1694 </table>
1695 <p>The data item size is defined by the data type, which depends on the configured data bus width.</p>
1696 <p>Data type is:</p><ul>
1697 <li><em>uint8_t</em> for 8-bit data bus</li>
1698 <li><em>uint16_t</em> for 16-bit data bus</li>
1699 </ul>
1700 <p>The function executes in the following ways:</p><ul>
1701 <li>When the operation is blocking (typical for devices connected to memory bus when not using DMA), then the function returns after all data is read and returns the number of data items read.</li>
1702 <li>When the operation is non-blocking (typical for NAND controllers), then the function only starts the operation and returns with zero number of data items read. After the operation is completed, the <a class="el" href="group__NAND__events.html#gac774a334871789d24107b843d1ebd00c">ARM_NAND_EVENT_DRIVER_DONE</a> event is generated (if enabled by <b>ARM_NAND_DRIVER_DONE_EVENT</b>). Progress of the operation can also be monitored by calling the <a class="el" href="group__nand__interface__gr.html#ga4578642f37a556b58b0bba0ad5d42641">ARM_NAND_GetStatus</a> function and checking the <em>busy</em> data field. Operation is automatically aborted if ECC is used and ECC correction fails, which generates the <a class="el" href="Driver__NAND_8h.html#a7bee0c32528ab991c0c064f895f80664">ARM_NAND_EVENT_ECC_ERROR</a> event (together with <a class="el" href="Driver__NAND_8h.html#af40631ba62411e0ac06c3a945d608581">ARM_NAND_DRIVER_DONE_EVENT</a> if enabled). </li>
1703 </ul>
1704
1705 </div>
1706 </div>
1707 <a id="ga1fa497dd51a86fc308e946b4419fd006" name="ga1fa497dd51a86fc308e946b4419fd006"></a>
1708 <h2 class="memtitle"><span class="permalink"><a href="#ga1fa497dd51a86fc308e946b4419fd006">&#9670;&#160;</a></span>ARM_NAND_WriteData()</h2>
1709
1710 <div class="memitem">
1711 <div class="memproto">
1712       <table class="memname">
1713         <tr>
1714           <td class="memname">int32_t ARM_NAND_WriteData </td>
1715           <td>(</td>
1716           <td class="paramtype">uint32_t&#160;</td>
1717           <td class="paramname"><em>dev_num</em>, </td>
1718         </tr>
1719         <tr>
1720           <td class="paramkey"></td>
1721           <td></td>
1722           <td class="paramtype">const void *&#160;</td>
1723           <td class="paramname"><em>data</em>, </td>
1724         </tr>
1725         <tr>
1726           <td class="paramkey"></td>
1727           <td></td>
1728           <td class="paramtype">uint32_t&#160;</td>
1729           <td class="paramname"><em>cnt</em>, </td>
1730         </tr>
1731         <tr>
1732           <td class="paramkey"></td>
1733           <td></td>
1734           <td class="paramtype">uint32_t&#160;</td>
1735           <td class="paramname"><em>mode</em>&#160;</td>
1736         </tr>
1737         <tr>
1738           <td></td>
1739           <td>)</td>
1740           <td></td><td></td>
1741         </tr>
1742       </table>
1743 </div><div class="memdoc">
1744
1745 <p>Write data to NAND device. </p>
1746 <dl class="params"><dt>Parameters</dt><dd>
1747   <table class="params">
1748     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1749     <tr><td class="paramdir">[out]</td><td class="paramname">data</td><td>Pointer to buffer with data to write to NAND device </td></tr>
1750     <tr><td class="paramdir">[in]</td><td class="paramname">cnt</td><td>Number of data items to write </td></tr>
1751     <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>Operation mode </td></tr>
1752   </table>
1753   </dd>
1754 </dl>
1755 <dl class="section return"><dt>Returns</dt><dd>number of data items written or <a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1756 <p>The function <b>ARM_NAND_WriteData</b> writes data to a NAND device.</p>
1757 <p>The parameter <em>dev_num</em> is the device number. <br  />
1758 The parameter <em>data</em> is a pointer to the buffer with data to write. <br  />
1759 The parameter <em>cnt</em> is the number of data items to write. <br  />
1760 The parameter <em>mode</em> defines the operation mode as listed in the table below.</p>
1761 <table class="markdownTable">
1762 <tr class="markdownTableHead">
1763 <th class="markdownTableHeadLeft">Write Data Mode   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1764 <tr class="markdownTableRowOdd">
1765 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#gac2eb4475f12a443209165d29fe200030">ARM_NAND_ECC(n)</a>   </td><td class="markdownTableBodyLeft">Select ECC    </td></tr>
1766 <tr class="markdownTableRowEven">
1767 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#ga15c79a12200c16f953936635f930df1d">ARM_NAND_ECC0</a>   </td><td class="markdownTableBodyLeft">Use ECC0 of selected ECC    </td></tr>
1768 <tr class="markdownTableRowOdd">
1769 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#gaee653288a88318ee33d1db81baa69bbc">ARM_NAND_ECC1</a>   </td><td class="markdownTableBodyLeft">Use ECC1 of selected ECC    </td></tr>
1770 <tr class="markdownTableRowEven">
1771 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#af40631ba62411e0ac06c3a945d608581">ARM_NAND_DRIVER_DONE_EVENT</a>   </td><td class="markdownTableBodyLeft">Generate <a class="el" href="group__NAND__events.html#gac774a334871789d24107b843d1ebd00c">ARM_NAND_EVENT_DRIVER_DONE</a>   </td></tr>
1772 </table>
1773 <p>The data item size is defined by the data type, which depends on the configured data bus width.</p>
1774 <p>Data type is:</p><ul>
1775 <li><em>uint8_t</em> for 8-bit data bus</li>
1776 <li><em>uint16_t</em> for 16-bit data bus</li>
1777 </ul>
1778 <p>The function executes in the following ways:</p><ul>
1779 <li>When the operation is blocking (typical for devices connected to memory bus when not using DMA), then the function returns after all data is written and returns the number of data items written.</li>
1780 <li>When the operation is non-blocking (typical for NAND controllers), then the function only starts the operation and returns with zero number of data items written. After the operation is completed, the <a class="el" href="group__NAND__events.html#gac774a334871789d24107b843d1ebd00c">ARM_NAND_EVENT_DRIVER_DONE</a> event is generated (if enabled by <b>ARM_NAND_DRIVER_DONE_EVENT</b>). Progress of the operation can also be monitored by calling the <a class="el" href="group__nand__interface__gr.html#ga4578642f37a556b58b0bba0ad5d42641">ARM_NAND_GetStatus</a> function and checking the <em>busy</em> data field. Operation is automatically aborted if ECC is used and ECC generation fails, which generates the <a class="el" href="Driver__NAND_8h.html#a7bee0c32528ab991c0c064f895f80664">ARM_NAND_EVENT_ECC_ERROR</a> event (together with <a class="el" href="Driver__NAND_8h.html#af40631ba62411e0ac06c3a945d608581">ARM_NAND_DRIVER_DONE_EVENT</a> if enabled). </li>
1781 </ul>
1782
1783 </div>
1784 </div>
1785 <a id="ga8a0108dba757a4610475151144b52825" name="ga8a0108dba757a4610475151144b52825"></a>
1786 <h2 class="memtitle"><span class="permalink"><a href="#ga8a0108dba757a4610475151144b52825">&#9670;&#160;</a></span>ARM_NAND_ExecuteSequence()</h2>
1787
1788 <div class="memitem">
1789 <div class="memproto">
1790       <table class="memname">
1791         <tr>
1792           <td class="memname">int32_t ARM_NAND_ExecuteSequence </td>
1793           <td>(</td>
1794           <td class="paramtype">uint32_t&#160;</td>
1795           <td class="paramname"><em>dev_num</em>, </td>
1796         </tr>
1797         <tr>
1798           <td class="paramkey"></td>
1799           <td></td>
1800           <td class="paramtype">uint32_t&#160;</td>
1801           <td class="paramname"><em>code</em>, </td>
1802         </tr>
1803         <tr>
1804           <td class="paramkey"></td>
1805           <td></td>
1806           <td class="paramtype">uint32_t&#160;</td>
1807           <td class="paramname"><em>cmd</em>, </td>
1808         </tr>
1809         <tr>
1810           <td class="paramkey"></td>
1811           <td></td>
1812           <td class="paramtype">uint32_t&#160;</td>
1813           <td class="paramname"><em>addr_col</em>, </td>
1814         </tr>
1815         <tr>
1816           <td class="paramkey"></td>
1817           <td></td>
1818           <td class="paramtype">uint32_t&#160;</td>
1819           <td class="paramname"><em>addr_row</em>, </td>
1820         </tr>
1821         <tr>
1822           <td class="paramkey"></td>
1823           <td></td>
1824           <td class="paramtype">void *&#160;</td>
1825           <td class="paramname"><em>data</em>, </td>
1826         </tr>
1827         <tr>
1828           <td class="paramkey"></td>
1829           <td></td>
1830           <td class="paramtype">uint32_t&#160;</td>
1831           <td class="paramname"><em>data_cnt</em>, </td>
1832         </tr>
1833         <tr>
1834           <td class="paramkey"></td>
1835           <td></td>
1836           <td class="paramtype">uint8_t *&#160;</td>
1837           <td class="paramname"><em>status</em>, </td>
1838         </tr>
1839         <tr>
1840           <td class="paramkey"></td>
1841           <td></td>
1842           <td class="paramtype">uint32_t *&#160;</td>
1843           <td class="paramname"><em>count</em>&#160;</td>
1844         </tr>
1845         <tr>
1846           <td></td>
1847           <td>)</td>
1848           <td></td><td></td>
1849         </tr>
1850       </table>
1851 </div><div class="memdoc">
1852
1853 <p>Execute sequence of operations. </p>
1854 <dl class="params"><dt>Parameters</dt><dd>
1855   <table class="params">
1856     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1857     <tr><td class="paramdir">[in]</td><td class="paramname">code</td><td>Sequence code </td></tr>
1858     <tr><td class="paramdir">[in]</td><td class="paramname">cmd</td><td>Command(s) </td></tr>
1859     <tr><td class="paramdir">[in]</td><td class="paramname">addr_col</td><td>Column address </td></tr>
1860     <tr><td class="paramdir">[in]</td><td class="paramname">addr_row</td><td>Row address </td></tr>
1861     <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>Pointer to data to be written or read </td></tr>
1862     <tr><td class="paramdir">[in]</td><td class="paramname">data_cnt</td><td>Number of data items in one iteration </td></tr>
1863     <tr><td class="paramdir">[out]</td><td class="paramname">status</td><td>Pointer to status read </td></tr>
1864     <tr><td class="paramdir">[in,out]</td><td class="paramname">count</td><td>Number of iterations </td></tr>
1865   </table>
1866   </dd>
1867 </dl>
1868 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1869 <p>The function <b>ARM_NAND_ExecuteSequence</b> executes a sequence of operations for a NAND device.</p>
1870 <p>The parameter <em>dev_num</em> is the device number. <br  />
1871 The parameter <em>code</em> is the sequence encoding as defined in the table <b>Sequence execution Code</b>. <br  />
1872 The parameter <em>cmd</em> is the command or a series of commands. <br  />
1873 The parameter <em>addr_col</em> is the column address. <br  />
1874 The parameter <em>addr_row</em> is the row address. <br  />
1875 The parameter <em>data</em> is a pointer to the buffer that stores the data to or loads the data from. <br  />
1876 The parameter <em>data_cnt</em> is the number of data items to read or write in one iteration. <br  />
1877 The parameter <em>status</em> is a pointer to the buffer that stores the status read. <br  />
1878 The parameter <em>count</em> is a pointer to the number of iterations. <br  />
1879  <b>ARM_NAND_CODE_xxx</b> specifies sequence execution codes.</p>
1880 <table class="markdownTable">
1881 <tr class="markdownTableHead">
1882 <th class="markdownTableHeadLeft">Sequence Execution Code   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1883 <tr class="markdownTableRowOdd">
1884 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#gaef90c96cd4f2309044d7d438c6b0930a">ARM_NAND_CODE_SEND_CMD1</a>   </td><td class="markdownTableBodyLeft">Send Command 1 (cmd[7..0])    </td></tr>
1885 <tr class="markdownTableRowEven">
1886 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#ga891bcba60ebb1195ec80c00c9bec748a">ARM_NAND_CODE_SEND_ADDR_COL1</a>   </td><td class="markdownTableBodyLeft">Send Column Address 1 (addr_col[7..0])    </td></tr>
1887 <tr class="markdownTableRowOdd">
1888 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#ga62a3f6ddcfb9ee317655bbec9e09bc10">ARM_NAND_CODE_SEND_ADDR_COL2</a>   </td><td class="markdownTableBodyLeft">Send Column Address 2 (addr_col[15..8])    </td></tr>
1889 <tr class="markdownTableRowEven">
1890 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#gadc001e69d1e81dc28a542237c6fe11ff">ARM_NAND_CODE_SEND_ADDR_ROW1</a>   </td><td class="markdownTableBodyLeft">Send Row Address 1 (addr_row[7..0])    </td></tr>
1891 <tr class="markdownTableRowOdd">
1892 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#ga5e55628cb59f5d7d35c529f04ebfcd10">ARM_NAND_CODE_SEND_ADDR_ROW2</a>   </td><td class="markdownTableBodyLeft">Send Row Address 2 (addr_row[15..8])    </td></tr>
1893 <tr class="markdownTableRowEven">
1894 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#gaeb5d1be9c13b7ad2ad246d5db10cd419">ARM_NAND_CODE_SEND_ADDR_ROW3</a>   </td><td class="markdownTableBodyLeft">Send Row Address 3 (addr_row[23..16])    </td></tr>
1895 <tr class="markdownTableRowOdd">
1896 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#ga959522c98183036da32984dd5e07979b">ARM_NAND_CODE_INC_ADDR_ROW</a>   </td><td class="markdownTableBodyLeft">Auto-increment Row Address    </td></tr>
1897 <tr class="markdownTableRowEven">
1898 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#ga1b40fc5fbf22dc4fa8130f5836e30d12">ARM_NAND_CODE_WRITE_DATA</a>   </td><td class="markdownTableBodyLeft">Write Data    </td></tr>
1899 <tr class="markdownTableRowOdd">
1900 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#gacffafbbbca74f7ffa4cd3bb6b067c4ef">ARM_NAND_CODE_SEND_CMD2</a>   </td><td class="markdownTableBodyLeft">Send Command 2 (cmd[15..8])    </td></tr>
1901 <tr class="markdownTableRowEven">
1902 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#ga0f4a8b1e97656e09f1c383852f290a37">ARM_NAND_CODE_WAIT_BUSY</a>   </td><td class="markdownTableBodyLeft">Wait while R/Bn busy    </td></tr>
1903 <tr class="markdownTableRowOdd">
1904 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#gab524d840ab57c720ce8560144651dc9d">ARM_NAND_CODE_READ_DATA</a>   </td><td class="markdownTableBodyLeft">Read Data    </td></tr>
1905 <tr class="markdownTableRowEven">
1906 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#ga20f96743ab77bda14ba391dc0c3cdba5">ARM_NAND_CODE_SEND_CMD3</a>   </td><td class="markdownTableBodyLeft">Send Command 3 (cmd[23..16])    </td></tr>
1907 <tr class="markdownTableRowOdd">
1908 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__seq__exec__codes.html#ga2250f6a532d2c0834bfdc618761ddc86">ARM_NAND_CODE_READ_STATUS</a>   </td><td class="markdownTableBodyLeft">Read Status byte and check FAIL bit (bit 0)    </td></tr>
1909 <tr class="markdownTableRowEven">
1910 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#gac2eb4475f12a443209165d29fe200030">ARM_NAND_ECC(n)</a>   </td><td class="markdownTableBodyLeft">Select ECC    </td></tr>
1911 <tr class="markdownTableRowOdd">
1912 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#ga15c79a12200c16f953936635f930df1d">ARM_NAND_ECC0</a>   </td><td class="markdownTableBodyLeft">Use ECC0 of selected ECC    </td></tr>
1913 <tr class="markdownTableRowEven">
1914 <td class="markdownTableBodyLeft"><a class="el" href="group__nand__driver__ecc__codes.html#gaee653288a88318ee33d1db81baa69bbc">ARM_NAND_ECC1</a>   </td><td class="markdownTableBodyLeft">Use ECC1 of selected ECC    </td></tr>
1915 <tr class="markdownTableRowOdd">
1916 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#af40631ba62411e0ac06c3a945d608581">ARM_NAND_DRIVER_DONE_EVENT</a>   </td><td class="markdownTableBodyLeft">Generate <a class="el" href="group__NAND__events.html#gac774a334871789d24107b843d1ebd00c">ARM_NAND_EVENT_DRIVER_DONE</a>   </td></tr>
1917 </table>
1918 <p>The data item size is defined by the data type, which depends on the configured data bus width.</p>
1919 <p>Data type is:</p><ul>
1920 <li><em>uint8_t</em> for 8-bit data bus</li>
1921 <li><em>uint16_t</em> for 16-bit data bus</li>
1922 </ul>
1923 <p>The function is non-blocking and returns as soon as the driver has started executing the specified sequence. When the operation is completed, the <a class="el" href="group__NAND__events.html#gac774a334871789d24107b843d1ebd00c">ARM_NAND_EVENT_DRIVER_DONE</a> event is generated (if enabled by <b>ARM_NAND_DRIVER_DONE_EVENT</b>). Progress of the operation can also be monitored by calling the <a class="el" href="group__nand__interface__gr.html#ga4578642f37a556b58b0bba0ad5d42641">ARM_NAND_GetStatus</a> function and checking the <em>busy</em> data field.</p>
1924 <p>Driver executes the number of specified iterations where in each iteration items specified by <b>ARM_NAND_CODE_xxx</b> are executed in the order as listed in the table <b>Sequence execution Code</b>. The parameter <em>count</em> is holding the current number of iterations left.</p>
1925 <p>Execution is automatically aborted and <a class="el" href="group__NAND__events.html#gac774a334871789d24107b843d1ebd00c">ARM_NAND_EVENT_DRIVER_DONE</a> event is generated (if enabled by <b>ARM_NAND_DRIVER_DONE_EVENT</b>):</p><ul>
1926 <li>if Read Status is enabled and the FAIL bit (bit 0) is set</li>
1927 <li>if ECC is used and ECC fails (also sets <a class="el" href="Driver__NAND_8h.html#a7bee0c32528ab991c0c064f895f80664">ARM_NAND_EVENT_ECC_ERROR</a> event)</li>
1928 </ul>
1929 <dl class="section note"><dt>Note</dt><dd><a class="el" href="group__nand__driver__seq__exec__codes.html#ga0f4a8b1e97656e09f1c383852f290a37">ARM_NAND_CODE_WAIT_BUSY</a> can only be specified if the Device Ready event can be generated (reported by <em>event_device_ready</em> in <a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>). The event <a class="el" href="group__NAND__events.html#gae0be7e1b41188def905de0a1568d442d">ARM_NAND_EVENT_DEVICE_READY</a> is not generated during sequence execution but rather used internally by the driver. </dd></dl>
1930
1931 </div>
1932 </div>
1933 <a id="ga00832861f018db0d8368900b099ecd30" name="ga00832861f018db0d8368900b099ecd30"></a>
1934 <h2 class="memtitle"><span class="permalink"><a href="#ga00832861f018db0d8368900b099ecd30">&#9670;&#160;</a></span>ARM_NAND_AbortSequence()</h2>
1935
1936 <div class="memitem">
1937 <div class="memproto">
1938       <table class="memname">
1939         <tr>
1940           <td class="memname">int32_t ARM_NAND_AbortSequence </td>
1941           <td>(</td>
1942           <td class="paramtype">uint32_t&#160;</td>
1943           <td class="paramname"><em>dev_num</em></td><td>)</td>
1944           <td></td>
1945         </tr>
1946       </table>
1947 </div><div class="memdoc">
1948
1949 <p>Abort sequence execution. </p>
1950 <dl class="params"><dt>Parameters</dt><dd>
1951   <table class="params">
1952     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1953   </table>
1954   </dd>
1955 </dl>
1956 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1957 <p>The function <b>ARM_NAND_AbortSequence</b> aborts execution of the current sequence for a NAND device.</p>
1958 <p>The parameter <em>dev_num</em> is the device number. </p>
1959
1960 </div>
1961 </div>
1962 <a id="ga83061d6d53ffb148853efbc87a864607" name="ga83061d6d53ffb148853efbc87a864607"></a>
1963 <h2 class="memtitle"><span class="permalink"><a href="#ga83061d6d53ffb148853efbc87a864607">&#9670;&#160;</a></span>ARM_NAND_Control()</h2>
1964
1965 <div class="memitem">
1966 <div class="memproto">
1967       <table class="memname">
1968         <tr>
1969           <td class="memname">int32_t ARM_NAND_Control </td>
1970           <td>(</td>
1971           <td class="paramtype">uint32_t&#160;</td>
1972           <td class="paramname"><em>dev_num</em>, </td>
1973         </tr>
1974         <tr>
1975           <td class="paramkey"></td>
1976           <td></td>
1977           <td class="paramtype">uint32_t&#160;</td>
1978           <td class="paramname"><em>control</em>, </td>
1979         </tr>
1980         <tr>
1981           <td class="paramkey"></td>
1982           <td></td>
1983           <td class="paramtype">uint32_t&#160;</td>
1984           <td class="paramname"><em>arg</em>&#160;</td>
1985         </tr>
1986         <tr>
1987           <td></td>
1988           <td>)</td>
1989           <td></td><td></td>
1990         </tr>
1991       </table>
1992 </div><div class="memdoc">
1993
1994 <p>Control NAND Interface. </p>
1995 <dl class="params"><dt>Parameters</dt><dd>
1996   <table class="params">
1997     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
1998     <tr><td class="paramdir">[in]</td><td class="paramname">control</td><td>Operation </td></tr>
1999     <tr><td class="paramdir">[in]</td><td class="paramname">arg</td><td>Argument of operation </td></tr>
2000   </table>
2001   </dd>
2002 </dl>
2003 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
2004 <p>The function <b>ARM_NAND_Control</b> controls the NAND interface and executes operations.</p>
2005 <p>The parameter <em>dev_num</em> is the device number. <br  />
2006 The parameter <em>control</em> specifies the operation. <br  />
2007 The parameter <em>arg</em> provides (depending on the <em>control</em>) additional information or sets values.</p>
2008 <p>The table lists the operations for the parameter <em>control</em>.</p>
2009 <table class="markdownTable">
2010 <tr class="markdownTableHead">
2011 <th class="markdownTableHeadLeft">Parameter <em>control</em>   </th><th class="markdownTableHeadLeft">Operation    </th></tr>
2012 <tr class="markdownTableRowOdd">
2013 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#a9b063c3078e86b50d4aa892518b2e2d8">ARM_NAND_BUS_MODE</a>   </td><td class="markdownTableBodyLeft">Set the bus mode. The parameter <em>arg</em> sets the <a class="el" href="group__nand__interface__gr.html#bus_mode_tab"><b>Bus</b> Mode</a>.    </td></tr>
2014 <tr class="markdownTableRowEven">
2015 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#a2d3356f5b47871c465ae7136a2c533f4">ARM_NAND_BUS_DATA_WIDTH</a>   </td><td class="markdownTableBodyLeft">Set the data bus width. The parameter <em>arg</em> sets the <a class="el" href="group__nand__interface__gr.html#bus_data_width_tab"><b>Bus</b> Data Width</a>.    </td></tr>
2016 <tr class="markdownTableRowOdd">
2017 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#a5d1d46198404fe115b013bdae7af2a2f">ARM_NAND_DRIVER_STRENGTH</a>   </td><td class="markdownTableBodyLeft">Set the driver strength. The parameter <em>arg</em> sets the <a class="el" href="group__nand__interface__gr.html#driver_strength_tab"><b>Driver</b> Strength</a>.    </td></tr>
2018 <tr class="markdownTableRowEven">
2019 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#aab6dea1b565aeb53e360876a4e50783c">ARM_NAND_DRIVER_READY_EVENT</a>   </td><td class="markdownTableBodyLeft">Control generation of callback event <a class="el" href="group__NAND__events.html#ga7b390a906db42c5ea4db38e0e85bb9e9">ARM_NAND_EVENT_DRIVER_READY</a>. Enable: <em>arg</em> = <span class="XML-Token">1</span>. Disable: <em>arg</em> = <span class="XML-Token">0</span>.    </td></tr>
2020 <tr class="markdownTableRowOdd">
2021 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#a1bffc9f341e704ee0e845d86a2989921">ARM_NAND_DEVICE_READY_EVENT</a>   </td><td class="markdownTableBodyLeft">Control generation of callback event <a class="el" href="group__NAND__events.html#gae0be7e1b41188def905de0a1568d442d">ARM_NAND_EVENT_DEVICE_READY</a>; Enable: <em>arg</em> = <span class="XML-Token">1</span>. Disable: <em>arg</em> = <span class="XML-Token">0</span>.   </td></tr>
2022 </table>
2023 <p><b>See Also</b></p><ul>
2024 <li><a class="el" href="group__nand__interface__gr.html#ga9f2609975c2008d21b9ae28f15daf147">ARM_NAND_GetCapabilities</a> returns information about supported operations, which are stored in the structure <a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>.</li>
2025 <li><a class="el" href="group__nand__interface__gr.html#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">ARM_NAND_SignalEvent</a> provides information about the callback events <a class="el" href="group__NAND__events.html#ga7b390a906db42c5ea4db38e0e85bb9e9">ARM_NAND_EVENT_DRIVER_READY</a> and <a class="el" href="group__NAND__events.html#gae0be7e1b41188def905de0a1568d442d">ARM_NAND_EVENT_DEVICE_READY</a></li>
2026 </ul>
2027 <p>The table lists values for the parameter <em>arg</em> used with the <em>control</em> operation <a class="el" href="Driver__NAND_8h.html#a9b063c3078e86b50d4aa892518b2e2d8">ARM_NAND_BUS_MODE</a>, <a class="el" href="Driver__NAND_8h.html#a2d3356f5b47871c465ae7136a2c533f4">ARM_NAND_BUS_DATA_WIDTH</a>, and <a class="el" href="Driver__NAND_8h.html#a5d1d46198404fe115b013bdae7af2a2f">ARM_NAND_DRIVER_STRENGTH</a>. Values from different categories can be ORed.</p>
2028 <p><a class="anchor" id="bus_mode_tab"></a></p><table class="cmtable">
2029 <tr>
2030 <th>Parameter <em>arg</em> <br  />
2031  for <em>control</em> = <a class="el" href="Driver__NAND_8h.html#a9b063c3078e86b50d4aa892518b2e2d8">ARM_NAND_BUS_MODE</a>  </th><th>Bit  </th><th>Category  </th><th>Description  </th><th width="30%">Supported when <a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>  </th></tr>
2032 <tr>
2033 <td><a class="el" href="group__nand__bus__mode__codes.html#ga971e574ac412bbba445055e9afc384ba">ARM_NAND_BUS_TIMING_MODE_0</a> (default)  </td><td rowspan="8" style="text-align:right">0..3  </td><td rowspan="8"><a class="anchor" id="bus_timing_tab"></a> Bus Timing Mode  </td><td><span class="XML-Token">0</span>  </td><td rowspan="8">The maximum timing mode that can be applied to a specific <a class="el" href="group__nand__interface__gr.html#bus_data_interface_tab"><b>Bus</b> Data Interface</a> is stored in the data fields: <br  />
2034 <br  />
2035  <em>sdr_timing_mode</em> - for SDR <br  />
2036  <em>ddr_timing_mode</em> - for NV-DDR <br  />
2037  <em>ddr2_timing_mode</em> - for NV_DDR2  </td></tr>
2038 <tr>
2039 <td><a class="el" href="group__nand__bus__mode__codes.html#ga475a339e929eca46e11bc8a7b330aa45">ARM_NAND_BUS_TIMING_MODE_1</a> </td><td><span class="XML-Token">1</span>  </td></tr>
2040 <tr>
2041 <td><a class="el" href="group__nand__bus__mode__codes.html#gaed6154fb03b5516faf0bfd11d7a46309">ARM_NAND_BUS_TIMING_MODE_2</a> </td><td><span class="XML-Token">2</span>  </td></tr>
2042 <tr>
2043 <td><a class="el" href="group__nand__bus__mode__codes.html#gacbc4e07e1af6ef0e4c656428e81464a9">ARM_NAND_BUS_TIMING_MODE_3</a> </td><td><span class="XML-Token">3</span>  </td></tr>
2044 <tr>
2045 <td><a class="el" href="group__nand__bus__mode__codes.html#ga709d51a5215cd23ce2d85aec57141456">ARM_NAND_BUS_TIMING_MODE_4</a> </td><td><span class="XML-Token">4</span> (SDR EDO capable)  </td></tr>
2046 <tr>
2047 <td><a class="el" href="group__nand__bus__mode__codes.html#gaee3cad14ce2b8b9af69149bf74597791">ARM_NAND_BUS_TIMING_MODE_5</a> </td><td><span class="XML-Token">5</span> (SDR EDO capable)  </td></tr>
2048 <tr>
2049 <td><a class="el" href="group__nand__bus__mode__codes.html#ga4a3524e0eba994b3a66e06cde877f0f6">ARM_NAND_BUS_TIMING_MODE_6</a> </td><td><span class="XML-Token">6</span> (NV-DDR2 only)  </td></tr>
2050 <tr>
2051 <td><a class="el" href="group__nand__bus__mode__codes.html#gaa63d75f5f2b48a7345a066d58de1bd23">ARM_NAND_BUS_TIMING_MODE_7</a> </td><td><span class="XML-Token">7</span> (NV-DDR2 only)  </td></tr>
2052 <tr>
2053 <td><a class="el" href="group__nand__bus__mode__codes.html#gac7743aeb6411b97f9fc6a24b556f4963">ARM_NAND_BUS_SDR</a> (default)<a class="anchor" id="bus_data_interface_tab"></a>  </td><td rowspan="3" style="text-align:right">4..7  </td><td rowspan="3">Bus Data Interface  </td><td>SDR (Single Data Rate) - Traditional interface  </td><td><em>always supported</em>  </td></tr>
2054 <tr>
2055 <td><a class="el" href="group__nand__bus__mode__codes.html#ga82b8261b3d0d85881535adada318a7df">ARM_NAND_BUS_DDR</a> </td><td>NV-DDR (Double Data Rate) </td><td>data field <em>ddr</em> = <span class="XML-Token">1</span>  </td></tr>
2056 <tr>
2057 <td><a class="el" href="group__nand__bus__mode__codes.html#ga13c102201d6021db184a2f068656c518">ARM_NAND_BUS_DDR2</a> </td><td>NV-DDR2 (Double Data Rate) </td><td>data field <em>ddr2</em> = <span class="XML-Token">1</span>  </td></tr>
2058 <tr>
2059 <td style="white-space: nowrap"><a class="el" href="group__nand__bus__mode__codes.html#ga77348df5f5c2c96bcaeec60b6da02c1b">ARM_NAND_BUS_DDR2_DO_WCYC_0</a> (default)  </td><td rowspan="4" style="text-align:right">8..11  </td><td rowspan="4" style="white-space: nowrap">Data Output Warm-up<a class="anchor" id="bus_output_tab"></a>  </td><td>Set the DDR2 Data Output Warm-up to <span class="XML-Token">0</span> cycles  </td><td rowspan="4"><b>Data Output Warm-up</b> cycles are dummy cycles for interface calibration with no incremental data transfer and apply to NV-DDR2 of the <a class="el" href="group__nand__interface__gr.html#bus_data_interface_tab"><b>Bus</b> Data Interface</a>. <br  />
2060   </td></tr>
2061 <tr>
2062 <td><a class="el" href="group__nand__bus__mode__codes.html#ga5839be0b4b2eb930ec039a3403b5e89e">ARM_NAND_BUS_DDR2_DO_WCYC_1</a> </td><td>Set the DDR2 Data Output Warm-up to <span class="XML-Token">1</span> cycles  </td></tr>
2063 <tr>
2064 <td><a class="el" href="group__nand__bus__mode__codes.html#ga10a1ef3be69bfa7e6cc657bee751a077">ARM_NAND_BUS_DDR2_DO_WCYC_2</a> </td><td>Set the DDR2 Data Output Warm-up to <span class="XML-Token">2</span> cycles  </td></tr>
2065 <tr>
2066 <td><a class="el" href="group__nand__bus__mode__codes.html#ga7f9e8416c4a4e20c4a04323e39f2100d">ARM_NAND_BUS_DDR2_DO_WCYC_4</a> </td><td>Set the DDR2 Data Output Warm-up to <span class="XML-Token">4</span> cycles  </td></tr>
2067 <tr>
2068 <td style="white-space: nowrap"><a class="el" href="group__nand__bus__mode__codes.html#gaeee1853dea5e96cb19d2596cc0e70169">ARM_NAND_BUS_DDR2_DI_WCYC_0</a> (default)<a class="anchor" id="bus_input_tab"></a> </td><td rowspan="4" style="text-align:right">12..15  </td><td rowspan="4" style="white-space: nowrap">Data Input Warm-up  </td><td>Set the DDR2 Data Input Warm-up to <span class="XML-Token">0</span> cycles  </td><td rowspan="4"><b>Data Input Warm-up</b> cycles are dummy cycles for interface calibration with no incremental data transfer and apply to NV-DDR2 of the <a class="el" href="group__nand__interface__gr.html#bus_data_interface_tab"><b>Bus</b> Data Interface</a>. <br  />
2069   </td></tr>
2070 <tr>
2071 <td><a class="el" href="group__nand__bus__mode__codes.html#ga42560a1f046e20cc4956276156c4ce25">ARM_NAND_BUS_DDR2_DI_WCYC_1</a> </td><td>Set the DDR2 Data Input Warm-up to <span class="XML-Token">1</span> cycles  </td></tr>
2072 <tr>
2073 <td><a class="el" href="group__nand__bus__mode__codes.html#gaad2e7807292d84a5070143626f5c2756">ARM_NAND_BUS_DDR2_DI_WCYC_2</a> </td><td>Set the DDR2 Data Input Warm-up to <span class="XML-Token">2</span> cycles  </td></tr>
2074 <tr>
2075 <td><a class="el" href="group__nand__bus__mode__codes.html#ga3ebb54a1ae971cd34f3c8fc9ff3ab6d5">ARM_NAND_BUS_DDR2_DI_WCYC_4</a> </td><td>Set the DDR2 Data Input Warm-up to <span class="XML-Token">4</span> cycles  </td></tr>
2076 <tr>
2077 <td style="white-space: nowrap"><a class="el" href="group__nand__bus__mode__codes.html#ga465ae06a6e097959620346304182e273">ARM_NAND_BUS_DDR2_VEN</a> &#160;<a class="anchor" id="bus_misc_tab"></a> </td><td style="text-align:right">16  </td><td rowspan="3" style="white-space: nowrap">Miscellaneous  </td><td>Set the DDR2 Enable external VREFQ as reference  </td><td rowspan="3">&#160;  </td></tr>
2078 <tr>
2079 <td><a class="el" href="group__nand__bus__mode__codes.html#gad38354e4a34adbf881afc7f89ff06e89">ARM_NAND_BUS_DDR2_CMPD</a> </td><td style="text-align:right">17 </td><td>Set the DDR2 Enable complementary DQS (DQS_c) signal  </td></tr>
2080 <tr>
2081 <td><a class="el" href="group__nand__bus__mode__codes.html#ga8a2d599082b9fe56cee1c6454bb3c6a1">ARM_NAND_BUS_DDR2_CMPR</a> </td><td style="text-align:right">18 </td><td>Set the DDR2 Enable complementary RE_n (RE_c) signal  </td></tr>
2082 <tr>
2083 <th>Parameter <em>arg</em> <br  />
2084  for <em>control</em> = <a class="el" href="Driver__NAND_8h.html#a2d3356f5b47871c465ae7136a2c533f4">ARM_NAND_BUS_DATA_WIDTH</a>  </th><th>Bit  </th><th>Category<a class="anchor" id="bus_data_width_tab"></a>  </th><th>Description  </th><th width="30%">Supported when <a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>  </th></tr>
2085 <tr>
2086 <td style="white-space: nowrap"><a class="el" href="group__nand__data__bus__width__codes.html#ga578051cc193ae0b7125aec8007071d21">ARM_NAND_BUS_DATA_WIDTH_8</a> (default)  </td><td rowspan="2" style="text-align:right">0..1  </td><td rowspan="2" style="white-space: nowrap">Bus Data Width  </td><td>Set to <span class="XML-Token">8 bit</span>  </td><td><em>always supported</em>  </td></tr>
2087 <tr>
2088 <td><a class="el" href="group__nand__data__bus__width__codes.html#ga49e0e3a946a4d9f26dbd5b32ccc3b2f3">ARM_NAND_BUS_DATA_WIDTH_16</a> </td><td>Set to <span class="XML-Token">16 bit</span> </td><td>data field <em>data_width_16</em> = <span class="XML-Token">1</span>  </td></tr>
2089 <tr>
2090 <th style="white-space: nowrap">Parameter <em>arg</em> <br  />
2091  for <em>control</em> = <a class="el" href="Driver__NAND_8h.html#a5d1d46198404fe115b013bdae7af2a2f">ARM_NAND_DRIVER_STRENGTH</a>  </th><th>Bit  </th><th>Category<a class="anchor" id="driver_strength_tab"></a>  </th><th>Description  </th><th width="30%">Supported when <a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>  </th></tr>
2092 <tr>
2093 <td style="white-space: nowrap"><a class="el" href="group__nand__driver__strength__codes.html#ga942e20df12022f3bbd0e9a558ec1c7a0">ARM_NAND_DRIVER_STRENGTH_18</a>  </td><td rowspan="4" style="text-align:right">0..3  </td><td rowspan="4" style="white-space: nowrap">Driver Strength  </td><td>Set the Driver Strength 2.0x = 18 Ohms  </td><td>data field <em>driver_strength_18</em> = <span class="XML-Token">1</span>  </td></tr>
2094 <tr>
2095 <td><a class="el" href="group__nand__driver__strength__codes.html#ga17188e039f5f87c581033327399a057d">ARM_NAND_DRIVER_STRENGTH_25</a> </td><td>Set the Driver Strength 1.4x = 25 Ohms </td><td>data field <em>driver_strength_25</em> = <span class="XML-Token">1</span>  </td></tr>
2096 <tr>
2097 <td><a class="el" href="group__nand__driver__strength__codes.html#ga33562a66a5bf328eea82b2f1893a7874">ARM_NAND_DRIVER_STRENGTH_35</a> (default) </td><td>Set the Driver Strength 1.0x = 35 Ohms </td><td><em>always supported</em>  </td></tr>
2098 <tr>
2099 <td><a class="el" href="group__nand__driver__strength__codes.html#gaa502e2c995447037d266f939faa43223">ARM_NAND_DRIVER_STRENGTH_50</a> </td><td>Set the Driver Strength 0.7x = 50 Ohms </td><td>data field <em>driver_strength_50</em> = <span class="XML-Token">1</span>  </td></tr>
2100 </table>
2101 <p><b>Example</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> Driver_NAND0;</div>
2102 <div class="line"> </div>
2103 <div class="line">status = Driver_NAND0.<a class="code hl_variable" href="group__nand__interface__gr.html#aee024bcbc25fe704bd2d85ce1dccb8db">Control</a> (0, <a class="code hl_define" href="Driver__NAND_8h.html#a9b063c3078e86b50d4aa892518b2e2d8">ARM_NAND_BUS_MODE</a>, <a class="code hl_define" href="group__nand__bus__mode__codes.html#gaee3cad14ce2b8b9af69149bf74597791">ARM_NAND_BUS_TIMING_MODE_5</a> | </div>
2104 <div class="line">                                                     <a class="code hl_define" href="group__nand__bus__mode__codes.html#ga13c102201d6021db184a2f068656c518">ARM_NAND_BUS_DDR2</a>          | </div>
2105 <div class="line">                                                     <a class="code hl_define" href="group__nand__bus__mode__codes.html#ga465ae06a6e097959620346304182e273">ARM_NAND_BUS_DDR2_VEN</a>);</div>
2106 <div class="line">                          </div>
2107 <div class="line">status = Driver_NAND0.<a class="code hl_variable" href="group__nand__interface__gr.html#aee024bcbc25fe704bd2d85ce1dccb8db">Control</a> (0, <a class="code hl_define" href="Driver__NAND_8h.html#a2d3356f5b47871c465ae7136a2c533f4">ARM_NAND_BUS_DATA_WIDTH</a>,  <a class="code hl_define" href="group__nand__data__bus__width__codes.html#ga49e0e3a946a4d9f26dbd5b32ccc3b2f3">ARM_NAND_BUS_DATA_WIDTH_16</a>); </div>
2108 <div class="line"> </div>
2109 <div class="line">status = Driver_NAND0.<a class="code hl_variable" href="group__nand__interface__gr.html#aee024bcbc25fe704bd2d85ce1dccb8db">Control</a> (0, <a class="code hl_define" href="Driver__NAND_8h.html#a5d1d46198404fe115b013bdae7af2a2f">ARM_NAND_DRIVER_STRENGTH</a>, <a class="code hl_define" href="group__nand__driver__strength__codes.html#gaa502e2c995447037d266f939faa43223">ARM_NAND_DRIVER_STRENGTH_50</a>);</div>
2110 <div class="ttc" id="aDriver__NAND_8h_html_a5d1d46198404fe115b013bdae7af2a2f"><div class="ttname"><a href="Driver__NAND_8h.html#a5d1d46198404fe115b013bdae7af2a2f">ARM_NAND_DRIVER_STRENGTH</a></div><div class="ttdeci">#define ARM_NAND_DRIVER_STRENGTH</div><div class="ttdoc">Set Driver Strength as specified with arg.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:83</div></div>
2111 <div class="ttc" id="agroup__nand__bus__mode__codes_html_ga13c102201d6021db184a2f068656c518"><div class="ttname"><a href="group__nand__bus__mode__codes.html#ga13c102201d6021db184a2f068656c518">ARM_NAND_BUS_DDR2</a></div><div class="ttdeci">#define ARM_NAND_BUS_DDR2</div><div class="ttdoc">Data Interface: NV-DDR2 (Double Data Rate)</div></div>
2112 <div class="ttc" id="agroup__nand__bus__mode__codes_html_ga465ae06a6e097959620346304182e273"><div class="ttname"><a href="group__nand__bus__mode__codes.html#ga465ae06a6e097959620346304182e273">ARM_NAND_BUS_DDR2_VEN</a></div><div class="ttdeci">#define ARM_NAND_BUS_DDR2_VEN</div><div class="ttdoc">DDR2 Enable external VREFQ as reference.</div></div>
2113 <div class="ttc" id="agroup__nand__bus__mode__codes_html_gaee3cad14ce2b8b9af69149bf74597791"><div class="ttname"><a href="group__nand__bus__mode__codes.html#gaee3cad14ce2b8b9af69149bf74597791">ARM_NAND_BUS_TIMING_MODE_5</a></div><div class="ttdeci">#define ARM_NAND_BUS_TIMING_MODE_5</div><div class="ttdoc">Timing Mode 5 (SDR EDO capable)</div></div>
2114 <div class="ttc" id="agroup__nand__data__bus__width__codes_html_ga49e0e3a946a4d9f26dbd5b32ccc3b2f3"><div class="ttname"><a href="group__nand__data__bus__width__codes.html#ga49e0e3a946a4d9f26dbd5b32ccc3b2f3">ARM_NAND_BUS_DATA_WIDTH_16</a></div><div class="ttdeci">#define ARM_NAND_BUS_DATA_WIDTH_16</div><div class="ttdoc">Bus Data Width: 16 bit.</div></div>
2115 <div class="ttc" id="agroup__nand__driver__strength__codes_html_gaa502e2c995447037d266f939faa43223"><div class="ttname"><a href="group__nand__driver__strength__codes.html#gaa502e2c995447037d266f939faa43223">ARM_NAND_DRIVER_STRENGTH_50</a></div><div class="ttdeci">#define ARM_NAND_DRIVER_STRENGTH_50</div><div class="ttdoc">Driver Strength 0.7x = 50 Ohms.</div></div>
2116 </div><!-- fragment --> 
2117 </div>
2118 </div>
2119 <a id="ga4578642f37a556b58b0bba0ad5d42641" name="ga4578642f37a556b58b0bba0ad5d42641"></a>
2120 <h2 class="memtitle"><span class="permalink"><a href="#ga4578642f37a556b58b0bba0ad5d42641">&#9670;&#160;</a></span>ARM_NAND_GetStatus()</h2>
2121
2122 <div class="memitem">
2123 <div class="memproto">
2124       <table class="memname">
2125         <tr>
2126           <td class="memname"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__STATUS">ARM_NAND_STATUS</a> ARM_NAND_GetStatus </td>
2127           <td>(</td>
2128           <td class="paramtype">uint32_t&#160;</td>
2129           <td class="paramname"><em>dev_num</em></td><td>)</td>
2130           <td></td>
2131         </tr>
2132       </table>
2133 </div><div class="memdoc">
2134
2135 <p>Get NAND status. </p>
2136 <dl class="params"><dt>Parameters</dt><dd>
2137   <table class="params">
2138     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
2139   </table>
2140   </dd>
2141 </dl>
2142 <dl class="section return"><dt>Returns</dt><dd>NAND status <a class="el" href="group__nand__interface__gr.html#structARM__NAND__STATUS">ARM_NAND_STATUS</a></dd></dl>
2143 <p>The function <b>ARM_NAND_GetStatus</b> returns the current NAND device status.</p>
2144 <p>The parameter <em>dev_num</em> is the device number. </p>
2145
2146 </div>
2147 </div>
2148 <a id="gac21425454d586ef48fdfc35e7bd78947" name="gac21425454d586ef48fdfc35e7bd78947"></a>
2149 <h2 class="memtitle"><span class="permalink"><a href="#gac21425454d586ef48fdfc35e7bd78947">&#9670;&#160;</a></span>ARM_NAND_InquireECC()</h2>
2150
2151 <div class="memitem">
2152 <div class="memproto">
2153       <table class="memname">
2154         <tr>
2155           <td class="memname">int32_t ARM_NAND_InquireECC </td>
2156           <td>(</td>
2157           <td class="paramtype">int32_t&#160;</td>
2158           <td class="paramname"><em>index</em>, </td>
2159         </tr>
2160         <tr>
2161           <td class="paramkey"></td>
2162           <td></td>
2163           <td class="paramtype"><a class="el" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a> *&#160;</td>
2164           <td class="paramname"><em>info</em>&#160;</td>
2165         </tr>
2166         <tr>
2167           <td></td>
2168           <td>)</td>
2169           <td></td><td></td>
2170         </tr>
2171       </table>
2172 </div><div class="memdoc">
2173
2174 <p>Inquire about available ECC. </p>
2175 <dl class="params"><dt>Parameters</dt><dd>
2176   <table class="params">
2177     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Inquire ECC index </td></tr>
2178     <tr><td class="paramdir">[out]</td><td class="paramname">info</td><td>Pointer to ECC information <a class="el" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a> retrieved </td></tr>
2179   </table>
2180   </dd>
2181 </dl>
2182 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
2183 <p>The function <b>ARM_NAND_InquireECC</b> reads error correction code information.</p>
2184 <p>The parameter <em>index</em> is the ECC index and is used to retrieve different ECC configurations. <br  />
2185 The parameter <em>info</em> is a pointer of type <a class="el" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a>. The data fields store the information.</p>
2186 <p>When multiple different ECC configurations exist, <a class="el" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO" title="NAND ECC (Error Correction Code) Information.">ARM_NAND_ECC_INFO</a> structure exists for each configuration. Parameter <em>index</em> denotes which configuration will be retrieved. Value of index should start with zero to retrieve first ECC configuration and should be incremented in order to retrieve next ECC configuration. When index is out of range function ARM_NAND_InquireECC returns with error.</p>
2187 <p>Parameter <em>index</em> is used by <a class="el" href="group__nand__driver__ecc__codes.html#gac2eb4475f12a443209165d29fe200030">ARM_NAND_ECC(n)</a> in <a class="el" href="group__nand__interface__gr.html#gae1899a20ef107400c8bf84fad477a8ce">ARM_NAND_ReadData</a>, <a class="el" href="group__nand__interface__gr.html#ga1fa497dd51a86fc308e946b4419fd006">ARM_NAND_WriteData</a> and <a class="el" href="group__nand__interface__gr.html#ga8a0108dba757a4610475151144b52825">ARM_NAND_ExecuteSequence</a> to select suitable ECC configuration.</p>
2188 <p><b>Example</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__nand__interface__gr.html#structARM__DRIVER__NAND">ARM_DRIVER_NAND</a> Driver_NAND0; </div>
2189 <div class="line"> </div>
2190 <div class="line"><a class="code hl_struct" href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a> ecc;</div>
2191 <div class="line">int32_t idx;</div>
2192 <div class="line"> </div>
2193 <div class="line">idx = 0;</div>
2194 <div class="line"><span class="keywordflow">while</span> (Driver_NAND0.<a class="code hl_variable" href="group__nand__interface__gr.html#afb64d95bec5cd74ff8b15044ce94bc93">InquireECC</a> (idx, &amp;ecc) == <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) {</div>
2195 <div class="line">  <span class="comment">// Examine retrieved ECC configuration</span></div>
2196 <div class="line">  <span class="keywordflow">if</span> (ecc.<a class="code hl_variable" href="group__nand__interface__gr.html#ad44b615021ed3ccb734fcaf583ef4a03">type</a> == 2) {</div>
2197 <div class="line">    <span class="comment">// Algorithm ECC0 protects Main+Spare</span></div>
2198 <div class="line">  }</div>
2199 <div class="line">  <span class="comment">// ..</span></div>
2200 <div class="line">  idx++;</div>
2201 <div class="line">}</div>
2202 <div class="ttc" id="agroup__execution__status_html_ga85752c5de59e8adeb001e35ff5be6be7"><div class="ttname"><a href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a></div><div class="ttdeci">#define ARM_DRIVER_OK</div><div class="ttdoc">Operation succeeded.</div></div>
2203 <div class="ttc" id="agroup__nand__interface__gr_html_ad44b615021ed3ccb734fcaf583ef4a03"><div class="ttname"><a href="group__nand__interface__gr.html#ad44b615021ed3ccb734fcaf583ef4a03">ARM_NAND_ECC_INFO::type</a></div><div class="ttdeci">uint32_t type</div><div class="ttdoc">Type: 1=ECC0 over Main, 2=ECC0 over Main+Spare, 3=ECC0 over Main and ECC1 over Spare.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:186</div></div>
2204 <div class="ttc" id="agroup__nand__interface__gr_html_afb64d95bec5cd74ff8b15044ce94bc93"><div class="ttname"><a href="group__nand__interface__gr.html#afb64d95bec5cd74ff8b15044ce94bc93">ARM_DRIVER_NAND::InquireECC</a></div><div class="ttdeci">int32_t(* InquireECC)(int32_t index, ARM_NAND_ECC_INFO *info)</div><div class="ttdoc">Pointer to ARM_NAND_InquireECC : Inquire about available ECC.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:419</div></div>
2205 <div class="ttc" id="agroup__nand__interface__gr_html_structARM__NAND__ECC__INFO"><div class="ttname"><a href="group__nand__interface__gr.html#structARM__NAND__ECC__INFO">ARM_NAND_ECC_INFO</a></div><div class="ttdoc">NAND ECC (Error Correction Code) Information.</div><div class="ttdef"><b>Definition:</b> Driver_NAND.h:185</div></div>
2206 </div><!-- fragment --> 
2207 </div>
2208 </div>
2209 <a id="gaf4ce80b0fd6717de7ddfb1cfaf7dd754" name="gaf4ce80b0fd6717de7ddfb1cfaf7dd754"></a>
2210 <h2 class="memtitle"><span class="permalink"><a href="#gaf4ce80b0fd6717de7ddfb1cfaf7dd754">&#9670;&#160;</a></span>ARM_NAND_SignalEvent()</h2>
2211
2212 <div class="memitem">
2213 <div class="memproto">
2214       <table class="memname">
2215         <tr>
2216           <td class="memname">void ARM_NAND_SignalEvent </td>
2217           <td>(</td>
2218           <td class="paramtype">uint32_t&#160;</td>
2219           <td class="paramname"><em>dev_num</em>, </td>
2220         </tr>
2221         <tr>
2222           <td class="paramkey"></td>
2223           <td></td>
2224           <td class="paramtype">uint32_t&#160;</td>
2225           <td class="paramname"><em>event</em>&#160;</td>
2226         </tr>
2227         <tr>
2228           <td></td>
2229           <td>)</td>
2230           <td></td><td></td>
2231         </tr>
2232       </table>
2233 </div><div class="memdoc">
2234
2235 <p>Signal NAND event. </p>
2236 <dl class="params"><dt>Parameters</dt><dd>
2237   <table class="params">
2238     <tr><td class="paramdir">[in]</td><td class="paramname">dev_num</td><td>Device number </td></tr>
2239     <tr><td class="paramdir">[in]</td><td class="paramname">event</td><td>Event notification mask </td></tr>
2240   </table>
2241   </dd>
2242 </dl>
2243 <dl class="section return"><dt>Returns</dt><dd>none</dd></dl>
2244 <p>The function <b>ARM_NAND_SignalEvent</b> is a callback function registered by the function <a class="el" href="group__nand__interface__gr.html#ga74ad34718a595e7a4375b90f33e72750">ARM_NAND_Initialize</a>.</p>
2245 <p>The parameter <em>dev_num</em> is the device number. <br  />
2246 The parameter <em>event</em> indicates one or more events that occurred during driver operation. Each event is encoded in a separate bit and therefore it is possible to signal multiple events within the same call.</p>
2247 <p>Not every event is necessarily generated by the driver. This depends on the implemented capabilities stored in the data fields of the structure <a class="el" href="group__nand__interface__gr.html#structARM__NAND__CAPABILITIES">ARM_NAND_CAPABILITIES</a>, which can be retrieved with the function <a class="el" href="group__nand__interface__gr.html#ga9f2609975c2008d21b9ae28f15daf147">ARM_NAND_GetCapabilities</a>.</p>
2248 <p>The following events can be generated:</p>
2249 <table class="markdownTable">
2250 <tr class="markdownTableHead">
2251 <th class="markdownTableHeadLeft">Parameter <em>event</em>   </th><th class="markdownTableHeadNone">Bit   </th><th class="markdownTableHeadLeft">Description    </th></tr>
2252 <tr class="markdownTableRowOdd">
2253 <td class="markdownTableBodyLeft"><a class="el" href="group__NAND__events.html#gae0be7e1b41188def905de0a1568d442d">ARM_NAND_EVENT_DEVICE_READY</a>   </td><td class="markdownTableBodyNone">0   </td><td class="markdownTableBodyLeft">Occurs when rising edge is detected on R/Bn (Ready/Busy) pin indicating that the device is ready.    </td></tr>
2254 <tr class="markdownTableRowEven">
2255 <td class="markdownTableBodyLeft"><a class="el" href="group__NAND__events.html#ga7b390a906db42c5ea4db38e0e85bb9e9">ARM_NAND_EVENT_DRIVER_READY</a>   </td><td class="markdownTableBodyNone">1   </td><td class="markdownTableBodyLeft">Occurs to indicate that commands can be executed (after previously being busy and not able to start the requested operation).    </td></tr>
2256 <tr class="markdownTableRowOdd">
2257 <td class="markdownTableBodyLeft"><a class="el" href="group__NAND__events.html#gac774a334871789d24107b843d1ebd00c">ARM_NAND_EVENT_DRIVER_DONE</a>   </td><td class="markdownTableBodyNone">2   </td><td class="markdownTableBodyLeft">Occurs after an operation completes. An operation was successfully started before with <a class="el" href="group__nand__interface__gr.html#gae1899a20ef107400c8bf84fad477a8ce">ARM_NAND_ReadData</a>, <a class="el" href="group__nand__interface__gr.html#ga1fa497dd51a86fc308e946b4419fd006">ARM_NAND_WriteData</a>, <a class="el" href="group__nand__interface__gr.html#ga8a0108dba757a4610475151144b52825">ARM_NAND_ExecuteSequence</a>.    </td></tr>
2258 <tr class="markdownTableRowEven">
2259 <td class="markdownTableBodyLeft"><a class="el" href="Driver__NAND_8h.html#a7bee0c32528ab991c0c064f895f80664">ARM_NAND_EVENT_ECC_ERROR</a>   </td><td class="markdownTableBodyNone">3   </td><td class="markdownTableBodyLeft">Occurs when ECC generation failed or ECC correction failed. An operation was successfully started before with <a class="el" href="group__nand__interface__gr.html#gae1899a20ef107400c8bf84fad477a8ce">ARM_NAND_ReadData</a>, <a class="el" href="group__nand__interface__gr.html#ga1fa497dd51a86fc308e946b4419fd006">ARM_NAND_WriteData</a>, <a class="el" href="group__nand__interface__gr.html#ga8a0108dba757a4610475151144b52825">ARM_NAND_ExecuteSequence</a>.   </td></tr>
2260 </table>
2261 <p>The event <a class="el" href="group__NAND__events.html#gae0be7e1b41188def905de0a1568d442d">ARM_NAND_EVENT_DEVICE_READY</a> occurs after complete execution of commands (initiated with the functions <a class="el" href="group__nand__interface__gr.html#ga9f70b89ba478eadfe7f5dee7453a4fb7">ARM_NAND_SendCommand</a>, <a class="el" href="group__nand__interface__gr.html#ga00e195031e03d364db7595858a7e76f3">ARM_NAND_SendAddress</a>, <a class="el" href="group__nand__interface__gr.html#gae1899a20ef107400c8bf84fad477a8ce">ARM_NAND_ReadData</a>, <a class="el" href="group__nand__interface__gr.html#ga1fa497dd51a86fc308e946b4419fd006">ARM_NAND_WriteData</a>, <a class="el" href="group__nand__interface__gr.html#ga8a0108dba757a4610475151144b52825">ARM_NAND_ExecuteSequence</a>). It is useful to indicate completion of complex operations (such as erase). The event is only generated when <a class="el" href="group__nand__interface__gr.html#ga9f2609975c2008d21b9ae28f15daf147">ARM_NAND_GetCapabilities</a> returns data field <em>event_device_ready</em> = <span class="XML-Token">1</span> and was enabled by calling <a class="el" href="group__nand__interface__gr.html#ga83061d6d53ffb148853efbc87a864607">ARM_NAND_Control</a> (<a class="el" href="Driver__NAND_8h.html#a1bffc9f341e704ee0e845d86a2989921">ARM_NAND_DEVICE_READY_EVENT</a>, 1). If the event is not available, poll the <em>busy</em> data field using the function <a class="el" href="group__nand__interface__gr.html#ga4578642f37a556b58b0bba0ad5d42641">ARM_NAND_GetStatus</a>.</p>
2262 <p>The event <a class="el" href="group__NAND__events.html#ga7b390a906db42c5ea4db38e0e85bb9e9">ARM_NAND_EVENT_DRIVER_READY</a> occurs when previously a function (<a class="el" href="group__nand__interface__gr.html#ga9f70b89ba478eadfe7f5dee7453a4fb7">ARM_NAND_SendCommand</a>, <a class="el" href="group__nand__interface__gr.html#ga00e195031e03d364db7595858a7e76f3">ARM_NAND_SendAddress</a>, <a class="el" href="group__nand__interface__gr.html#gae1899a20ef107400c8bf84fad477a8ce">ARM_NAND_ReadData</a>, <a class="el" href="group__nand__interface__gr.html#ga1fa497dd51a86fc308e946b4419fd006">ARM_NAND_WriteData</a>, <a class="el" href="group__nand__interface__gr.html#ga8a0108dba757a4610475151144b52825">ARM_NAND_ExecuteSequence</a>) returned with <a class="el" href="group__execution__status.html#ga13c1123319c7b9a4735d63447f35116b">ARM_DRIVER_ERROR_BUSY</a>. It is useful when functions are called simultaneously from independent threads (for example to control multiple devices) and the threads have no knowledge about each other (driver rejects reentrant calls with return of <a class="el" href="group__execution__status.html#ga13c1123319c7b9a4735d63447f35116b">ARM_DRIVER_ERROR_BUSY</a>). <em>dev_num</em> indicates the device that returned previously busy. </p>
2263
2264 </div>
2265 </div>
2266 </div><!-- contents -->
2267 </div><!-- doc-content -->
2268 <!-- start footer part -->
2269 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
2270   <ul>
2271     <li class="footer">
2272       <script type="text/javascript">
2273         <!--
2274         writeFooter.call(this);
2275         //-->
2276       </script> 
2277     </li>
2278   </ul>
2279 </div>
2280 </body>
2281 </html>