embeddedsw/XilinxProcessorIPLib/drivers/nandps/doc/html/api/xnandps_8h.html

1287 lines
63 KiB
HTML
Raw Normal View History

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>
Xilinx Driver nandps v2_1: xnandps.h File Reference
</title>
<link href="doxygen_kalyanidocs/doc/css/driver_api_doxygen.css" rel="stylesheet" type="text/css">
</head>
<h3 class="PageHeader">Xilinx Processor IP Library</h3>
<hl>Software Drivers</hl>
<hr class="whs1">
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>xnandps.h File Reference</h1><code>#include &lt;string.h&gt;</code><br/>
<code>#include &quot;xil_types.h&quot;</code><br/>
<code>#include &quot;xil_assert.h&quot;</code><br/>
<code>#include &quot;xil_io.h&quot;</code><br/>
<code>#include &quot;xstatus.h&quot;</code><br/>
<code>#include &quot;<a class="el" href="xnandps__hw_8h.html">xnandps_hw.h</a>&quot;</code><br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_x_nand_ps___config.html">XNandPs_Config</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_x_nand_ps___geometry.html">XNandPs_Geometry</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_x_nand_ps___features.html">XNandPs_Features</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_x_nand_ps___bbt_desc.html">XNandPs_BbtDesc</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_x_nand_ps___bad_block_pattern.html">XNandPs_BadBlockPattern</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_x_nand_ps___ecc_config.html">XNandPs_EccConfig</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_x_nand_ps_tag.html">XNandPsTag</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_x_nand_ps___command_format.html">XNandPs_CommandFormat</a></td></tr>
<tr><td colspan="2"><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ac86c459e098f8ede0cdab61f468e47fc">XNANDPS_H</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a9318e127efeabeb03b6c66cd5e49584c">XNANDPS_MAX_TARGETS</a>&nbsp;&nbsp;&nbsp;1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#aeac7c4a5846cd8f24d4a64ee522c34f3">XNANDPS_MAX_BLOCKS</a>&nbsp;&nbsp;&nbsp;32768</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a786386f3e559ae718dd2705232659f42">XNANDPS_MAX_PAGE_SIZE</a>&nbsp;&nbsp;&nbsp;16384</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a934b1c75fe903a36e6060b4e2b3f80bc">XNANDPS_MAX_SPARE_SIZE</a>&nbsp;&nbsp;&nbsp;512</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a670ccbc6afa402392d54ee6902cdaeb3">XNANDPS_ECC_BLOCK_SIZE</a>&nbsp;&nbsp;&nbsp;512</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a412d2eaa86d836cdecfcaddeb12266eb">XNANDPS_ECC_BYTES</a>&nbsp;&nbsp;&nbsp;3</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a53b0eb39a6c2e7697451708f119d0225">XNANDPS_PAGE_SIZE_512</a>&nbsp;&nbsp;&nbsp;512</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#af5cd93b983d246ae46191faeab9981d3">XNANDPS_PAGE_SIZE_1024</a>&nbsp;&nbsp;&nbsp;1024</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ae9c793728d4e305d0d6db2e06ee0f2f0">XNANDPS_PAGE_SIZE_2048</a>&nbsp;&nbsp;&nbsp;2048</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a6115d808f57f05dd0ebf675479613b4b">XNANDPS_PAGE_SIZE_4096</a>&nbsp;&nbsp;&nbsp;4096</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a159e33af868b547fcd1d1ea7a3f5d8c0">XNANDPS_PAGE_SIZE_8192</a>&nbsp;&nbsp;&nbsp;8192</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ae374cba46e29672383ef07e18562d414">XNANDPS_SPARE_SIZE_8</a>&nbsp;&nbsp;&nbsp;8</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ac4be38cacac57be795ff109e2cb18c52">XNANDPS_SPARE_SIZE_16</a>&nbsp;&nbsp;&nbsp;16</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a80364f49adb5fd80aa9da554688b2528">XNANDPS_SPARE_SIZE_32</a>&nbsp;&nbsp;&nbsp;32</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a87dd08d6423f9ab0e4c7d0ee6bc9ffab">XNANDPS_SPARE_SIZE_64</a>&nbsp;&nbsp;&nbsp;64</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ae65bbae2e96a9dac9761d10f848d691f">XNANDPS_SPARE_SIZE_128</a>&nbsp;&nbsp;&nbsp;128</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#af4515a9ae43f9d59a46761a76c6d54e1">XNANDPS_SPARE_SIZE_256</a>&nbsp;&nbsp;&nbsp;256</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ab6ac2e4a23ac752e38789b80a8dba558">XNANDPS_FLASH_WIDTH_8</a>&nbsp;&nbsp;&nbsp;8</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#afc3945fad84cc8e5552911bbf71c8ff1">XNANDPS_FLASH_WIDTH_16</a>&nbsp;&nbsp;&nbsp;16</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a15a120e615f9619d5c6c88dc24824381">XNANDPS_END_CMD_NONE</a>&nbsp;&nbsp;&nbsp;0</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#aac605341833cde0fcfc6cd3757f46bf7">XNANDPS_END_CMD_INVALID</a>&nbsp;&nbsp;&nbsp;0</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a12a3bec18f94247283675686fe54f3c0">XNANDPS_CMD_PHASE</a>&nbsp;&nbsp;&nbsp;1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ab49f78a892cc541c162a801d793db174">XNANDPS_DATA_PHASE</a>&nbsp;&nbsp;&nbsp;2</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ae43a8aa10277b0e0db35b3d63732e8b4">XNANDPS_PAGE_NOT_VALID</a>&nbsp;&nbsp;&nbsp;-1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a6ff24a4f5fb28e9057c240b4f4c89053">XNANDPS_COLUMN_NOT_VALID</a>&nbsp;&nbsp;&nbsp;-1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#aa5036c69cee2c0eea308d4fc74e7ffdc">XNANDPS_AXI_DATA_WIDTH</a>&nbsp;&nbsp;&nbsp;4</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a67b3f66e20ed6e24fa34fc9646ba17c5">XNANDPS_START_CMD_SHIFT</a>&nbsp;&nbsp;&nbsp;3</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ac0c544102cd92afcdadad4a539501a0b">XNANDPS_END_CMD_SHIFT</a>&nbsp;&nbsp;&nbsp;11</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ac99a2d1110d9fb8c528f7256fbe2c804">XNANDPS_END_CMD_VALID_SHIFT</a>&nbsp;&nbsp;&nbsp;20</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a1de1dd0bf041bea85027589c4e74a508">XNANDPS_ADDR_CYCLES_SHIFT</a>&nbsp;&nbsp;&nbsp;21</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a43c3baa53b9c047680bd19339bc0f4e1">XNANDPS_CHIP_ADDR_SHIFT</a>&nbsp;&nbsp;&nbsp;24</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#acd1087ff09a54e6c99d8bbc00804dcd4">XNANDPS_ECC_LAST_SHIFT</a>&nbsp;&nbsp;&nbsp;10</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ae7b09bd31246d8fb20332ca2c66664f3">XNANDPS_CLEAR_CS_SHIFT</a>&nbsp;&nbsp;&nbsp;21</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a00a9136efdc3fd5e96398831d1f582b3">XNANDPS_COMMAND_PHASE_MASK</a>&nbsp;&nbsp;&nbsp;0x00000000</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a25acc37295a6d972e6881ccd72ad5344">XNANDPS_DATA_PHASE_MASK</a>&nbsp;&nbsp;&nbsp;0x00080000</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a653b5679ad2abfd95478470ace9b033f">XNANDPS_ECC_CORRECT_BYTE_MASK</a>&nbsp;&nbsp;&nbsp;0x1FF</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a94f114de5b35833513e99c1f7417b3bf">XNANDPS_ECC_CORRECT_BIT_MASK</a>&nbsp;&nbsp;&nbsp;0x7</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#af646761218a609e83c43bbec343cdc4f">XNANDPS_CLR_CONFIG</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a61380595222d4a5e63904199b71260d5">XNANDPS_ECC_MEMCFG</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a1455c0fa3b20e01561924b2a162c07ab">XNANDPS_ECC_CMD1</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a2b1034e7d5e29d8613b34c16a8c491ca">XNANDPS_ECC_CMD2</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#ae8e59d6704246c9a18cbc9ddf8990105">XNANDPS_CLR_CS</a>&nbsp;&nbsp;&nbsp;(0x1 &lt;&lt; XNANDPS_CLEAR_CS_SHIFT)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a24aa6c637ca56a0d8357e4184c8ec746">XNANDPS_ECC_LAST</a>&nbsp;&nbsp;&nbsp;(0x1 &lt;&lt; XNANDPS_ECC_LAST_SHIFT)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a34f4ef3f29daef5f33c6fef869b44e20">OneHot</a>(Value)&nbsp;&nbsp;&nbsp;(!((Value) &amp; (Value - 1)))</td></tr>
<tr><td colspan="2"><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_x_nand_ps_tag.html">XNandPsTag</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#af0def4ad29325b821b3fd4127740dfbe">XNandPs</a></td></tr>
<tr><td colspan="2"><h2>Enumerations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a2318d7b320b74ae18f3b2b34beddd39e">XNandPs_EccMode</a> { <a class="el" href="xnandps_8h.html#a2318d7b320b74ae18f3b2b34beddd39ea764dc0f2ad5c36c3c0bfe8be83352c58">XNANDPS_ECC_NONE</a> = 0,
<a class="el" href="xnandps_8h.html#a2318d7b320b74ae18f3b2b34beddd39ea1d1c061e9b23ef2b650fb39cebafef24">XNANDPS_ECC_SW</a>,
<a class="el" href="xnandps_8h.html#a2318d7b320b74ae18f3b2b34beddd39ea16a7c41d3ba75cba9ee48a3ba8c4d579">XNANDPS_ECC_HW</a>,
<a class="el" href="xnandps_8h.html#a2318d7b320b74ae18f3b2b34beddd39eaa4a36d982e1314e7221837be2a0c4671">XNANDPS_ECC_ONDIE</a>
}</td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct_x_nand_ps___config.html">XNandPs_Config</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a0eb3e99243066b9145f3c437081988b5">XNandPs_LookupConfig</a> (u16 DeviceId)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#addb9f847fae34f6d137f591375a7c962">XNandPs_CfgInitialize</a> (<a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *InstancePtr, <a class="el" href="struct_x_nand_ps___config.html">XNandPs_Config</a> *ConfigPtr, u32 SmcBaseAddr, u32 FlashBaseAddr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#aaccfcbd63b9560c96c66b98c126e6d67">XNandPs_Read</a> (<a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *InstancePtr, u64 Offset, u32 Bytes, void *DestPtr, u8 *UserSparePtr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a0c42ba42a40c9b567c7cc851d8bb8081">XNandPs_ReadCache</a> (<a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *InstancePtr, u64 Offset, u32 Bytes, void *SrcPtr, u8 *UserSparePtr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a1b8dfc70a5d81f5438b5d91708f17a96">XNandPs_Write</a> (<a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *InstancePtr, u64 Offset, u32 Bytes, void *SrcPtr, u8 *UserSparePtr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a8ecd5bb0fc73b3011ee0ba500e0161fe">XNandPs_WriteCache</a> (<a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *InstancePtr, u64 Offset, u32 Length, void *SrcPtr, u8 *UserSparePtr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#af9857df5e1359875e429f66e46ca5a86">XNandPs_ReadSpareBytes</a> (<a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *InstancePtr, u32 Page, u8 *Buf)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#aa987d756af43c965a6439f077a4ce158">XNandPs_WriteSpareBytes</a> (<a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *InstancePtr, u32 Page, u8 *Buf)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="xnandps_8h.html#a22b4e2bc1af7e4bfecd4428c25a77bb8">XNandPs_EraseBlock</a> (<a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *InstancePtr, u32 BlockNum)</td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="a34f4ef3f29daef5f33c6fef869b44e20"></a><!-- doxytag: member="xnandps.h::OneHot" ref="a34f4ef3f29daef5f33c6fef869b44e20" args="(Value)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define OneHot</td>
<td>(</td>
<td class="paramtype">Value&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;(!((Value) &amp; (Value - 1)))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>OneHot is used to check if one and only one bit is set. This Macro returns 1 if the value passed is OneHot. </p>
</div>
</div>
<a class="anchor" id="a1de1dd0bf041bea85027589c4e74a508"></a><!-- doxytag: member="xnandps.h::XNANDPS_ADDR_CYCLES_SHIFT" ref="a1de1dd0bf041bea85027589c4e74a508" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ADDR_CYCLES_SHIFT&nbsp;&nbsp;&nbsp;21</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Address cycles shift </p>
</div>
</div>
<a class="anchor" id="aa5036c69cee2c0eea308d4fc74e7ffdc"></a><!-- doxytag: member="xnandps.h::XNANDPS_AXI_DATA_WIDTH" ref="aa5036c69cee2c0eea308d4fc74e7ffdc" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_AXI_DATA_WIDTH&nbsp;&nbsp;&nbsp;4</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>AXI Data width for last transaction while reading and writing </p>
</div>
</div>
<a class="anchor" id="a43c3baa53b9c047680bd19339bc0f4e1"></a><!-- doxytag: member="xnandps.h::XNANDPS_CHIP_ADDR_SHIFT" ref="a43c3baa53b9c047680bd19339bc0f4e1" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_CHIP_ADDR_SHIFT&nbsp;&nbsp;&nbsp;24</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Chip address shift </p>
</div>
</div>
<a class="anchor" id="ae7b09bd31246d8fb20332ca2c66664f3"></a><!-- doxytag: member="xnandps.h::XNANDPS_CLEAR_CS_SHIFT" ref="ae7b09bd31246d8fb20332ca2c66664f3" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_CLEAR_CS_SHIFT&nbsp;&nbsp;&nbsp;21</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>clear chip select shift </p>
</div>
</div>
<a class="anchor" id="af646761218a609e83c43bbec343cdc4f"></a><!-- doxytag: member="xnandps.h::XNANDPS_CLR_CONFIG" ref="af646761218a609e83c43bbec343cdc4f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_CLR_CONFIG</td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">((<a class="code" href="xnandps__hw_8h.html#a6731d845acda751402ee26f71588253e">XNANDPS_MEMC_CLR_CONFIG_INT_DISABLE1_MASK</a>) | \
(<a class="code" href="xnandps__hw_8h.html#a0c56dde06594c0e2a7deac16d7291f4a">XNANDPS_MEMC_CLR_CONFIG_INT_CLR1_MASK</a>) | \
(<a class="code" href="xnandps__hw_8h.html#aa1b2d0e0a22463d92e6308573fa72e7b">XNANDPS_MEMC_CLR_CONFIG_ECC_INT_DISABLE1_MASK</a>))
</pre></div><p>Interrupt settings </p>
</div>
</div>
<a class="anchor" id="ae8e59d6704246c9a18cbc9ddf8990105"></a><!-- doxytag: member="xnandps.h::XNANDPS_CLR_CS" ref="ae8e59d6704246c9a18cbc9ddf8990105" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_CLR_CS&nbsp;&nbsp;&nbsp;(0x1 &lt;&lt; XNANDPS_CLEAR_CS_SHIFT)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>set Clear chip select </p>
</div>
</div>
<a class="anchor" id="a12a3bec18f94247283675686fe54f3c0"></a><!-- doxytag: member="xnandps.h::XNANDPS_CMD_PHASE" ref="a12a3bec18f94247283675686fe54f3c0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_CMD_PHASE&nbsp;&nbsp;&nbsp;1</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>End command in command phase </p>
</div>
</div>
<a class="anchor" id="a6ff24a4f5fb28e9057c240b4f4c89053"></a><!-- doxytag: member="xnandps.h::XNANDPS_COLUMN_NOT_VALID" ref="a6ff24a4f5fb28e9057c240b4f4c89053" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_COLUMN_NOT_VALID&nbsp;&nbsp;&nbsp;-1</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Column is not valid in command phase </p>
</div>
</div>
<a class="anchor" id="a00a9136efdc3fd5e96398831d1f582b3"></a><!-- doxytag: member="xnandps.h::XNANDPS_COMMAND_PHASE_MASK" ref="a00a9136efdc3fd5e96398831d1f582b3" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_COMMAND_PHASE_MASK&nbsp;&nbsp;&nbsp;0x00000000</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Command phase mask </p>
</div>
</div>
<a class="anchor" id="ab49f78a892cc541c162a801d793db174"></a><!-- doxytag: member="xnandps.h::XNANDPS_DATA_PHASE" ref="ab49f78a892cc541c162a801d793db174" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_DATA_PHASE&nbsp;&nbsp;&nbsp;2</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>End command in data phase </p>
</div>
</div>
<a class="anchor" id="a25acc37295a6d972e6881ccd72ad5344"></a><!-- doxytag: member="xnandps.h::XNANDPS_DATA_PHASE_MASK" ref="a25acc37295a6d972e6881ccd72ad5344" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_DATA_PHASE_MASK&nbsp;&nbsp;&nbsp;0x00080000</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Data phase mask </p>
</div>
</div>
<a class="anchor" id="a670ccbc6afa402392d54ee6902cdaeb3"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_BLOCK_SIZE" ref="a670ccbc6afa402392d54ee6902cdaeb3" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_BLOCK_SIZE&nbsp;&nbsp;&nbsp;512</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>ECC block size </p>
</div>
</div>
<a class="anchor" id="a412d2eaa86d836cdecfcaddeb12266eb"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_BYTES" ref="a412d2eaa86d836cdecfcaddeb12266eb" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_BYTES&nbsp;&nbsp;&nbsp;3</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>ECC bytes per ECC block </p>
</div>
</div>
<a class="anchor" id="a1455c0fa3b20e01561924b2a162c07ab"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_CMD1" ref="a1455c0fa3b20e01561924b2a162c07ab" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_CMD1</td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">((0x80 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a91a88936d7883eb8a46d2ae5e0b38543">XNANDPS_ECC_MEMCOMMAND1_WR_CMD_SHIFT</a>) | \
(0x00 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a6c3123982a9b5da195d9530d541cd06f">XNANDPS_ECC_MEMCOMMAND1_RD_CMD_SHIFT</a>) | \
(0x30 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a3d48d8af5b0f09ee1105069caf32c920">XNANDPS_ECC_MEMCOMMAND1_RD_CMD_END_SHIFT</a>) | \
(0x1 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a8cb896a4cbb6e8b643bcab62b36daff8">XNANDPS_ECC_MEMCOMMAND1_RD_CMD_END_VALID_SHIFT</a>))
</pre></div><p>ECC command 1 settings </p>
</div>
</div>
<a class="anchor" id="a2b1034e7d5e29d8613b34c16a8c491ca"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_CMD2" ref="a2b1034e7d5e29d8613b34c16a8c491ca" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_CMD2</td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">((0x85 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a0370d409026629c9c67c6a09356168b7">XNANDPS_ECC_MEMCOMMAND2_WR_COL_CHANGE_SHIFT</a>) | \
(0x05 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a2268559b8b7eda4b64e06be46c1ae163">XNANDPS_ECC_MEMCOMMAND2_RD_COL_CHANGE_SHIFT</a>) | \
(0xE0 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a1ac7be4acb6465855e90c59a917ea460">XNANDPS_ECC_MEMCOMMAND2_RD_COL_CHANGE_END_SHIFT</a>) | \
(0x1 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a9affb1a5cbc15106387b90f11585d316">XNANDPS_ECC_MEMCOMMAND2_RD_COL_CHANGE_END_VALID_SHIFT</a>))
</pre></div><p>ECC command 2 settings </p>
</div>
</div>
<a class="anchor" id="a94f114de5b35833513e99c1f7417b3bf"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_CORRECT_BIT_MASK" ref="a94f114de5b35833513e99c1f7417b3bf" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_CORRECT_BIT_MASK&nbsp;&nbsp;&nbsp;0x7</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>ECC error correction bit position mask, bits[0:2] of error code </p>
</div>
</div>
<a class="anchor" id="a653b5679ad2abfd95478470ace9b033f"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_CORRECT_BYTE_MASK" ref="a653b5679ad2abfd95478470ace9b033f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_CORRECT_BYTE_MASK&nbsp;&nbsp;&nbsp;0x1FF</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>ECC error correction byte position mask, bits[11:3] of error code </p>
</div>
</div>
<a class="anchor" id="a24aa6c637ca56a0d8357e4184c8ec746"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_LAST" ref="a24aa6c637ca56a0d8357e4184c8ec746" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_LAST&nbsp;&nbsp;&nbsp;(0x1 &lt;&lt; XNANDPS_ECC_LAST_SHIFT)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>set Ecc last </p>
</div>
</div>
<a class="anchor" id="acd1087ff09a54e6c99d8bbc00804dcd4"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_LAST_SHIFT" ref="acd1087ff09a54e6c99d8bbc00804dcd4" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_LAST_SHIFT&nbsp;&nbsp;&nbsp;10</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Ecc last shift </p>
</div>
</div>
<a class="anchor" id="a61380595222d4a5e63904199b71260d5"></a><!-- doxytag: member="xnandps.h::XNANDPS_ECC_MEMCFG" ref="a61380595222d4a5e63904199b71260d5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_ECC_MEMCFG</td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">((0x1 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#aaf2c3d5ccd811cd525971db6edc37183">XNANDPS_ECC_MEMCFG_ECC_MODE_SHIFT</a>) | \
(0x1 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#ac7b61519733a4be05a029c4767dcf624">XNANDPS_ECC_MEMCFG_ECC_READ_END_SHIFT</a>) | \
(0x0 &lt;&lt; <a class="code" href="xnandps__hw_8h.html#a626e312c59becf9175883314824ee42d">XNANDPS_ECC_MEMCFG_ECC_JUMP_SHIFT</a>))
</pre></div><p>ECC memory configuration settings </p>
</div>
</div>
<a class="anchor" id="aac605341833cde0fcfc6cd3757f46bf7"></a><!-- doxytag: member="xnandps.h::XNANDPS_END_CMD_INVALID" ref="aac605341833cde0fcfc6cd3757f46bf7" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_END_CMD_INVALID&nbsp;&nbsp;&nbsp;0</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>End command invalid </p>
</div>
</div>
<a class="anchor" id="a15a120e615f9619d5c6c88dc24824381"></a><!-- doxytag: member="xnandps.h::XNANDPS_END_CMD_NONE" ref="a15a120e615f9619d5c6c88dc24824381" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_END_CMD_NONE&nbsp;&nbsp;&nbsp;0</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>No End command </p>
</div>
</div>
<a class="anchor" id="ac0c544102cd92afcdadad4a539501a0b"></a><!-- doxytag: member="xnandps.h::XNANDPS_END_CMD_SHIFT" ref="ac0c544102cd92afcdadad4a539501a0b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_END_CMD_SHIFT&nbsp;&nbsp;&nbsp;11</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>End command shift </p>
</div>
</div>
<a class="anchor" id="ac99a2d1110d9fb8c528f7256fbe2c804"></a><!-- doxytag: member="xnandps.h::XNANDPS_END_CMD_VALID_SHIFT" ref="ac99a2d1110d9fb8c528f7256fbe2c804" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_END_CMD_VALID_SHIFT&nbsp;&nbsp;&nbsp;20</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>End command valid shift </p>
</div>
</div>
<a class="anchor" id="afc3945fad84cc8e5552911bbf71c8ff1"></a><!-- doxytag: member="xnandps.h::XNANDPS_FLASH_WIDTH_16" ref="afc3945fad84cc8e5552911bbf71c8ff1" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_FLASH_WIDTH_16&nbsp;&nbsp;&nbsp;16</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>NAND Flash width 16-bit </p>
</div>
</div>
<a class="anchor" id="ab6ac2e4a23ac752e38789b80a8dba558"></a><!-- doxytag: member="xnandps.h::XNANDPS_FLASH_WIDTH_8" ref="ab6ac2e4a23ac752e38789b80a8dba558" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_FLASH_WIDTH_8&nbsp;&nbsp;&nbsp;8</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>NAND Flash width 8-bit </p>
</div>
</div>
<a class="anchor" id="ac86c459e098f8ede0cdab61f468e47fc"></a><!-- doxytag: member="xnandps.h::XNANDPS_H" ref="ac86c459e098f8ede0cdab61f468e47fc" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_H</td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="aeac7c4a5846cd8f24d4a64ee522c34f3"></a><!-- doxytag: member="xnandps.h::XNANDPS_MAX_BLOCKS" ref="aeac7c4a5846cd8f24d4a64ee522c34f3" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_MAX_BLOCKS&nbsp;&nbsp;&nbsp;32768</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Max number of Blocks </p>
</div>
</div>
<a class="anchor" id="a786386f3e559ae718dd2705232659f42"></a><!-- doxytag: member="xnandps.h::XNANDPS_MAX_PAGE_SIZE" ref="a786386f3e559ae718dd2705232659f42" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_MAX_PAGE_SIZE&nbsp;&nbsp;&nbsp;16384</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Max page size of NAND flash </p>
</div>
</div>
<a class="anchor" id="a934b1c75fe903a36e6060b4e2b3f80bc"></a><!-- doxytag: member="xnandps.h::XNANDPS_MAX_SPARE_SIZE" ref="a934b1c75fe903a36e6060b4e2b3f80bc" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_MAX_SPARE_SIZE&nbsp;&nbsp;&nbsp;512</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Max spare bytes of a NAND flash page </p>
</div>
</div>
<a class="anchor" id="a9318e127efeabeb03b6c66cd5e49584c"></a><!-- doxytag: member="xnandps.h::XNANDPS_MAX_TARGETS" ref="a9318e127efeabeb03b6c66cd5e49584c" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_MAX_TARGETS&nbsp;&nbsp;&nbsp;1</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Max number of targets supported </p>
</div>
</div>
<a class="anchor" id="ae43a8aa10277b0e0db35b3d63732e8b4"></a><!-- doxytag: member="xnandps.h::XNANDPS_PAGE_NOT_VALID" ref="ae43a8aa10277b0e0db35b3d63732e8b4" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_PAGE_NOT_VALID&nbsp;&nbsp;&nbsp;-1</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Page is not valid in command phase </p>
</div>
</div>
<a class="anchor" id="af5cd93b983d246ae46191faeab9981d3"></a><!-- doxytag: member="xnandps.h::XNANDPS_PAGE_SIZE_1024" ref="af5cd93b983d246ae46191faeab9981d3" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_PAGE_SIZE_1024&nbsp;&nbsp;&nbsp;1024</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Page size 1024 </p>
</div>
</div>
<a class="anchor" id="ae9c793728d4e305d0d6db2e06ee0f2f0"></a><!-- doxytag: member="xnandps.h::XNANDPS_PAGE_SIZE_2048" ref="ae9c793728d4e305d0d6db2e06ee0f2f0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_PAGE_SIZE_2048&nbsp;&nbsp;&nbsp;2048</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Page size 2048 </p>
</div>
</div>
<a class="anchor" id="a6115d808f57f05dd0ebf675479613b4b"></a><!-- doxytag: member="xnandps.h::XNANDPS_PAGE_SIZE_4096" ref="a6115d808f57f05dd0ebf675479613b4b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_PAGE_SIZE_4096&nbsp;&nbsp;&nbsp;4096</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Page size 4096 </p>
</div>
</div>
<a class="anchor" id="a53b0eb39a6c2e7697451708f119d0225"></a><!-- doxytag: member="xnandps.h::XNANDPS_PAGE_SIZE_512" ref="a53b0eb39a6c2e7697451708f119d0225" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_PAGE_SIZE_512&nbsp;&nbsp;&nbsp;512</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Page size 512 </p>
</div>
</div>
<a class="anchor" id="a159e33af868b547fcd1d1ea7a3f5d8c0"></a><!-- doxytag: member="xnandps.h::XNANDPS_PAGE_SIZE_8192" ref="a159e33af868b547fcd1d1ea7a3f5d8c0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_PAGE_SIZE_8192&nbsp;&nbsp;&nbsp;8192</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Page size 8192 </p>
</div>
</div>
<a class="anchor" id="ae65bbae2e96a9dac9761d10f848d691f"></a><!-- doxytag: member="xnandps.h::XNANDPS_SPARE_SIZE_128" ref="ae65bbae2e96a9dac9761d10f848d691f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_SPARE_SIZE_128&nbsp;&nbsp;&nbsp;128</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Spare bytes size 128 </p>
</div>
</div>
<a class="anchor" id="ac4be38cacac57be795ff109e2cb18c52"></a><!-- doxytag: member="xnandps.h::XNANDPS_SPARE_SIZE_16" ref="ac4be38cacac57be795ff109e2cb18c52" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_SPARE_SIZE_16&nbsp;&nbsp;&nbsp;16</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Spare bytes size 16 </p>
</div>
</div>
<a class="anchor" id="af4515a9ae43f9d59a46761a76c6d54e1"></a><!-- doxytag: member="xnandps.h::XNANDPS_SPARE_SIZE_256" ref="af4515a9ae43f9d59a46761a76c6d54e1" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_SPARE_SIZE_256&nbsp;&nbsp;&nbsp;256</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Spare bytes size 256 </p>
</div>
</div>
<a class="anchor" id="a80364f49adb5fd80aa9da554688b2528"></a><!-- doxytag: member="xnandps.h::XNANDPS_SPARE_SIZE_32" ref="a80364f49adb5fd80aa9da554688b2528" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_SPARE_SIZE_32&nbsp;&nbsp;&nbsp;32</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Spare bytes size 32 </p>
</div>
</div>
<a class="anchor" id="a87dd08d6423f9ab0e4c7d0ee6bc9ffab"></a><!-- doxytag: member="xnandps.h::XNANDPS_SPARE_SIZE_64" ref="a87dd08d6423f9ab0e4c7d0ee6bc9ffab" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_SPARE_SIZE_64&nbsp;&nbsp;&nbsp;64</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Spare bytes size 64 </p>
</div>
</div>
<a class="anchor" id="ae374cba46e29672383ef07e18562d414"></a><!-- doxytag: member="xnandps.h::XNANDPS_SPARE_SIZE_8" ref="ae374cba46e29672383ef07e18562d414" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_SPARE_SIZE_8&nbsp;&nbsp;&nbsp;8</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Spare bytes size 8 </p>
</div>
</div>
<a class="anchor" id="a67b3f66e20ed6e24fa34fc9646ba17c5"></a><!-- doxytag: member="xnandps.h::XNANDPS_START_CMD_SHIFT" ref="a67b3f66e20ed6e24fa34fc9646ba17c5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define XNANDPS_START_CMD_SHIFT&nbsp;&nbsp;&nbsp;3</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Start command shift </p>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="af0def4ad29325b821b3fd4127740dfbe"></a><!-- doxytag: member="xnandps.h::XNandPs" ref="af0def4ad29325b821b3fd4127740dfbe" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="struct_x_nand_ps_tag.html">XNandPsTag</a> <a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The XNandPs driver instance data. The user is required to allocate a variable of this type for every flash device in the system. A pointer to a variable of this type is then passed to the driver API functions. </p>
</div>
</div>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="a2318d7b320b74ae18f3b2b34beddd39e"></a><!-- doxytag: member="xnandps.h::XNandPs_EccMode" ref="a2318d7b320b74ae18f3b2b34beddd39e" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="xnandps_8h.html#a2318d7b320b74ae18f3b2b34beddd39e">XNandPs_EccMode</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="a2318d7b320b74ae18f3b2b34beddd39ea764dc0f2ad5c36c3c0bfe8be83352c58"></a><!-- doxytag: member="XNANDPS_ECC_NONE" ref="a2318d7b320b74ae18f3b2b34beddd39ea764dc0f2ad5c36c3c0bfe8be83352c58" args="" -->XNANDPS_ECC_NONE</em>&nbsp;</td><td>
<p>No ECC </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a2318d7b320b74ae18f3b2b34beddd39ea1d1c061e9b23ef2b650fb39cebafef24"></a><!-- doxytag: member="XNANDPS_ECC_SW" ref="a2318d7b320b74ae18f3b2b34beddd39ea1d1c061e9b23ef2b650fb39cebafef24" args="" -->XNANDPS_ECC_SW</em>&nbsp;</td><td>
<p>Software ECC </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a2318d7b320b74ae18f3b2b34beddd39ea16a7c41d3ba75cba9ee48a3ba8c4d579"></a><!-- doxytag: member="XNANDPS_ECC_HW" ref="a2318d7b320b74ae18f3b2b34beddd39ea16a7c41d3ba75cba9ee48a3ba8c4d579" args="" -->XNANDPS_ECC_HW</em>&nbsp;</td><td>
<p>Hardware controller ECC </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a2318d7b320b74ae18f3b2b34beddd39eaa4a36d982e1314e7221837be2a0c4671"></a><!-- doxytag: member="XNANDPS_ECC_ONDIE" ref="a2318d7b320b74ae18f3b2b34beddd39eaa4a36d982e1314e7221837be2a0c4671" args="" -->XNANDPS_ECC_ONDIE</em>&nbsp;</td><td>
<p>On-Die ECC </p>
</td></tr>
</table>
</dd>
</dl>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="addb9f847fae34f6d137f591375a7c962"></a><!-- doxytag: member="xnandps.h::XNandPs_CfgInitialize" ref="addb9f847fae34f6d137f591375a7c962" args="(XNandPs *InstancePtr, XNandPs_Config *ConfigPtr, u32 SmcBaseAddr, u32 FlashBaseAddr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int XNandPs_CfgInitialize </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *&nbsp;</td>
<td class="paramname"> <em>InstancePtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps___config.html">XNandPs_Config</a> *&nbsp;</td>
<td class="paramname"> <em>ConfigPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>SmcBaseAddr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>FlashBaseAddr</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function initializes a specific XNandPs device/instance. This function must be called prior to using the flash device to read or write any data.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>InstancePtr</em>&nbsp;</td><td>is a pointer to the XNandPs instance. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>ConfigPtr</em>&nbsp;</td><td>points to the XNandPs device configuration structure. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>SmcBaseAddr</em>&nbsp;</td><td>is the base address of SMC controller. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>FlashBaseAddr</em>&nbsp;</td><td>is the base address of NAND flash.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>XST_SUCCESS if successful.</li>
<li>XST_FAILURE if fail.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>The user needs to first call the <a class="el" href="xnandps_8h.html#a0eb3e99243066b9145f3c437081988b5">XNandPs_LookupConfig()</a> API which returns the Configuration structure pointer which is passed as a parameter to the <a class="el" href="xnandps_8c.html#addb9f847fae34f6d137f591375a7c962">XNandPs_CfgInitialize()</a> API. </dd></dl>
</div>
</div>
<a class="anchor" id="a22b4e2bc1af7e4bfecd4428c25a77bb8"></a><!-- doxytag: member="xnandps.h::XNandPs_EraseBlock" ref="a22b4e2bc1af7e4bfecd4428c25a77bb8" args="(XNandPs *InstancePtr, u32 BlockNum)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int XNandPs_EraseBlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *&nbsp;</td>
<td class="paramname"> <em>InstancePtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>BlockNum</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function erases a specific block in the NAND device.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>InstancePtr</em>&nbsp;</td><td>is a pointer to the XNandPs instance. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>BlockNum</em>&nbsp;</td><td>is the block number of the device. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>XST_SUCCESS if successful.</li>
<li>XST_FAILURE if fail.</li>
<li>XST_NAND_WRITE_PROTECTED if the flash is write protected.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>None </dd></dl>
</div>
</div>
<a class="anchor" id="a0eb3e99243066b9145f3c437081988b5"></a><!-- doxytag: member="xnandps.h::XNandPs_LookupConfig" ref="a0eb3e99243066b9145f3c437081988b5" args="(u16 DeviceId)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="struct_x_nand_ps___config.html">XNandPs_Config</a>* XNandPs_LookupConfig </td>
<td>(</td>
<td class="paramtype">u16&nbsp;</td>
<td class="paramname"> <em>DeviceId</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function looks up the device configuration based on the unique device ID. The table XNandPs_ConfigTable contains the configuration info for each device in the system.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>DeviceId</em>&nbsp;</td><td>contains the ID of the device for which the device configuration pointer is to be returned.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>A pointer to the configuration found.</li>
<li>NULL if the specified device ID was not found.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>None. </dd></dl>
</div>
</div>
<a class="anchor" id="aaccfcbd63b9560c96c66b98c126e6d67"></a><!-- doxytag: member="xnandps.h::XNandPs_Read" ref="aaccfcbd63b9560c96c66b98c126e6d67" args="(XNandPs *InstancePtr, u64 Offset, u32 Bytes, void *DestPtr, u8 *UserSparePtr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int XNandPs_Read </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *&nbsp;</td>
<td class="paramname"> <em>InstancePtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u64&nbsp;</td>
<td class="paramname"> <em>Offset</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>Length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>DestPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8 *&nbsp;</td>
<td class="paramname"> <em>UserSparePtr</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function reads the data from the Flash device and copies it into the specified user buffer. It doesn't check for the bad blocks while reading the flash pages that cross block boundary. User must take care of handling bad blocks.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>InstancePtr</em>&nbsp;</td><td>is the pointer to the XNandPs instance. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Offset</em>&nbsp;</td><td>is the flash data address to read from. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Length</em>&nbsp;</td><td>is number of bytes to read. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>DestPtr</em>&nbsp;</td><td>is the destination address to copy data to. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>UserSparePtr</em>&nbsp;</td><td>is the user buffer to which spare data must be copied.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>XST_SUCCESS if successful.</li>
<li>XST_FAILURE if fail.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>This function reads sequential pages from the Flash device. </dd></dl>
</div>
</div>
<a class="anchor" id="a0c42ba42a40c9b567c7cc851d8bb8081"></a><!-- doxytag: member="xnandps.h::XNandPs_ReadCache" ref="a0c42ba42a40c9b567c7cc851d8bb8081" args="(XNandPs *InstancePtr, u64 Offset, u32 Bytes, void *SrcPtr, u8 *UserSparePtr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int XNandPs_ReadCache </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *&nbsp;</td>
<td class="paramname"> <em>InstancePtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u64&nbsp;</td>
<td class="paramname"> <em>Offset</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>Length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>DestPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8 *&nbsp;</td>
<td class="paramname"> <em>UserSparePtr</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function reads the data from the Flash device using read page cache command and copies it into the specified user buffer. It doesn't check for the bad blocks while reading the flash pages that cross block boundary. User must take care of handling bad blocks.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>InstancePtr</em>&nbsp;</td><td>is the pointer to the XNandPs instance. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Offset</em>&nbsp;</td><td>is the flash data address to read from. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Length</em>&nbsp;</td><td>is number of bytes to read. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>DestPtr</em>&nbsp;</td><td>is the destination address to copy data to. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>UserSparePtr</em>&nbsp;</td><td>is the user buffer to which spare data must be copied.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>XST_SUCCESS if successful.</li>
<li>XST_FAILURE if fail.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>This function reads sequential pages from the Flash device. </dd></dl>
</div>
</div>
<a class="anchor" id="af9857df5e1359875e429f66e46ca5a86"></a><!-- doxytag: member="xnandps.h::XNandPs_ReadSpareBytes" ref="af9857df5e1359875e429f66e46ca5a86" args="(XNandPs *InstancePtr, u32 Page, u8 *Buf)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int XNandPs_ReadSpareBytes </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *&nbsp;</td>
<td class="paramname"> <em>InstancePtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>Page</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8 *&nbsp;</td>
<td class="paramname"> <em>Buf</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function reads the spare area of a page.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>InstancePtr</em>&nbsp;</td><td>is the pointer to the XNandPs instance. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Page</em>&nbsp;</td><td>is the page number from where spare data is read. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Buf</em>&nbsp;</td><td>is pointer to the buffer where the spare data is filled.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>XST_SUCCESS if successful.</li>
<li>XST_FAILURE if fail.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>None. </dd></dl>
</div>
</div>
<a class="anchor" id="a1b8dfc70a5d81f5438b5d91708f17a96"></a><!-- doxytag: member="xnandps.h::XNandPs_Write" ref="a1b8dfc70a5d81f5438b5d91708f17a96" args="(XNandPs *InstancePtr, u64 Offset, u32 Bytes, void *SrcPtr, u8 *UserSparePtr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int XNandPs_Write </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *&nbsp;</td>
<td class="paramname"> <em>InstancePtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u64&nbsp;</td>
<td class="paramname"> <em>Offset</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>Length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>SrcPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8 *&nbsp;</td>
<td class="paramname"> <em>UserSparePtr</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function programs the flash device(s) with data specified in the user buffer. The source and destination address must be aligned to the width of the flash's data bus. It doesn't check for the bad blocks while writing to the flash pages that cross block boundary. User must take care of handling bad blocks.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>InstancePtr</em>&nbsp;</td><td>is the pointer to the XNandPs instance. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Offset</em>&nbsp;</td><td>is the flash data address to write to. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Length</em>&nbsp;</td><td>is number of bytes to write. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>SrcPtr</em>&nbsp;</td><td>is the source address to write the data from. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>UserSparePtr</em>&nbsp;</td><td>is the user buffer which contains buffer to write into spare data area.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>XST_SUCCESS if successful.</li>
<li>XST_FAILURE if fail.</li>
<li>XST_NAND_WRITE_PROTECTED if the flash is write protected.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>This function writes number of sequential pages into the Flash device. </dd></dl>
</div>
</div>
<a class="anchor" id="a8ecd5bb0fc73b3011ee0ba500e0161fe"></a><!-- doxytag: member="xnandps.h::XNandPs_WriteCache" ref="a8ecd5bb0fc73b3011ee0ba500e0161fe" args="(XNandPs *InstancePtr, u64 Offset, u32 Length, void *SrcPtr, u8 *UserSparePtr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int XNandPs_WriteCache </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *&nbsp;</td>
<td class="paramname"> <em>InstancePtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u64&nbsp;</td>
<td class="paramname"> <em>Offset</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>Length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>SrcPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8 *&nbsp;</td>
<td class="paramname"> <em>UserSparePtr</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function programs the flash device(s) with data specified in the user buffer using program cache command. The source and destination address must be aligned to the width of the flash's data bus. It doesn't check for the bad blocks while writing to the flash pages that cross block boundary. User must take care of handling bad blocks.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>InstancePtr</em>&nbsp;</td><td>is the pointer to the XNandPs instance. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Offset</em>&nbsp;</td><td>is the flash data address to write to. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Length</em>&nbsp;</td><td>is number of bytes to write. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>SrcPtr</em>&nbsp;</td><td>is the source address to write the data from. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>UserSparePtr</em>&nbsp;</td><td>is the user buffer which contains buffer to write into spare data area.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>XST_SUCCESS if successful.</li>
<li>XST_FAILURE if fail.</li>
<li>XST_NAND_WRITE_PROTECTED if the flash is write protected.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>This function writes number of sequential pages into the Flash device. </dd></dl>
</div>
</div>
<a class="anchor" id="aa987d756af43c965a6439f077a4ce158"></a><!-- doxytag: member="xnandps.h::XNandPs_WriteSpareBytes" ref="aa987d756af43c965a6439f077a4ce158" args="(XNandPs *InstancePtr, u32 Page, u8 *Buf)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int XNandPs_WriteSpareBytes </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_nand_ps_tag.html">XNandPs</a> *&nbsp;</td>
<td class="paramname"> <em>InstancePtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u32&nbsp;</td>
<td class="paramname"> <em>Page</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8 *&nbsp;</td>
<td class="paramname"> <em>Buf</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function write to the spare area of a page.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>InstancePtr</em>&nbsp;</td><td>is the pointer to the XNandPs instance. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Page</em>&nbsp;</td><td>is the page number to write. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Buf</em>&nbsp;</td><td>is pointer to the buffer which holds the data.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><ul>
<li>XST_SUCCESS if successful.</li>
<li>XST_FAILURE if fail.</li>
</ul>
</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>None. </dd></dl>
</div>
</div>
</div>
<p class="Copyright">
Copyright &copy; 1995-2014 Xilinx, Inc. All rights reserved.
</p>
</body>
</html>