499 lines
61 KiB
HTML
499 lines
61 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||
<meta name="generator" content="Doxygen 1.9.6"/>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||
<!-- BEGIN opengraph metadata -->
|
||
<meta property="og:title" content="Doxygen Awesome" />
|
||
<meta property="og:image" content="https://repository-images.githubusercontent.com/348492097/4f16df80-88fb-11eb-9d31-4015ff22c452" />
|
||
<meta property="og:description" content="Custom CSS theme for doxygen html-documentation with lots of customization parameters." />
|
||
<meta property="og:url" content="https://jothepro.github.io/doxygen-awesome-css/" />
|
||
<!-- END opengraph metadata -->
|
||
<!-- BEGIN twitter metadata -->
|
||
<meta name="twitter:image:src" content="https://repository-images.githubusercontent.com/348492097/4f16df80-88fb-11eb-9d31-4015ff22c452" />
|
||
<meta name="twitter:title" content="Doxygen Awesome" />
|
||
<meta name="twitter:description" content="Custom CSS theme for doxygen html-documentation with lots of customization parameters." />
|
||
<!-- END twitter metadata -->
|
||
<title>User Guide: Memory</title>
|
||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||
<link rel="icon" type="image/svg+xml" href="logo.drawio.svg"/>
|
||
<script type="text/javascript" src="jquery.js"></script>
|
||
<script type="text/javascript" src="dynsections.js"></script>
|
||
<script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
|
||
<script type="text/javascript" src="doxygen-awesome-fragment-copy-button.js"></script>
|
||
<script type="text/javascript" src="doxygen-awesome-paragraph-link.js"></script>
|
||
<script type="text/javascript" src="doxygen-awesome-interactive-toc.js"></script>
|
||
<script type="text/javascript" src="doxygen-awesome-tabs.js"></script>
|
||
<script type="text/javascript" src="toggle-alternative-theme.js"></script>
|
||
<script type="text/javascript">
|
||
DoxygenAwesomeFragmentCopyButton.init()
|
||
DoxygenAwesomeDarkModeToggle.init()
|
||
DoxygenAwesomeParagraphLink.init()
|
||
DoxygenAwesomeInteractiveToc.init()
|
||
DoxygenAwesomeTabs.init()
|
||
</script>
|
||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||
<script type="text/javascript" src="resize.js"></script>
|
||
<script type="text/javascript" src="navtreedata.js"></script>
|
||
<script type="text/javascript" src="navtree.js"></script>
|
||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||
<script type="text/javascript" src="search/search.js"></script>
|
||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
|
||
<link href="custom.css" rel="stylesheet" type="text/css"/>
|
||
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
|
||
<link href="doxygen-awesome-sidebar-only-darkmode-toggle.css" rel="stylesheet" type="text/css"/>
|
||
<link href="custom-alternative.css" rel="stylesheet" type="text/css"/>
|
||
</head>
|
||
<body>
|
||
<!-- https://tholman.com/github-corners/
|
||
<a href="https://github.com/jothepro/doxygen-awesome-css" class="github-corner" title="View source on GitHub" target="_blank">
|
||
<svg viewBox="0 0 250 250" width="40" height="40" style="position: absolute; top: 0; border: 0; right: 0; z-index: 99;" aria-hidden="true">
|
||
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
|
||
-->
|
||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||
<div id="titlearea">
|
||
<table cellspacing="0" cellpadding="0">
|
||
<tbody>
|
||
<tr style="height: 56px;">
|
||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||
<td id="projectalign" style="padding-left: 0.5em;">
|
||
<div id="projectname">User Guide
|
||
</div>
|
||
<div id="projectbrief">Bluetooth Low Energy 5.3</div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<!-- end header part -->
|
||
<!-- Generated by Doxygen 1.9.6 -->
|
||
<script type="text/javascript">
|
||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||
/* @license-end */
|
||
</script>
|
||
<script type="text/javascript" src="menudata.js"></script>
|
||
<script type="text/javascript" src="menu.js"></script>
|
||
<script type="text/javascript">
|
||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||
$(function() {
|
||
initMenu('',true,false,'search.php','Search');
|
||
$(document).ready(function() { init_search(); });
|
||
});
|
||
/* @license-end */
|
||
</script>
|
||
<div id="main-nav"></div>
|
||
</div><!-- top -->
|
||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||
<div id="nav-tree">
|
||
<div id="nav-tree-contents">
|
||
<div id="nav-sync" class="sync"></div>
|
||
</div>
|
||
</div>
|
||
<div id="splitbar" style="-moz-user-select:none;"
|
||
class="ui-resizable-handle">
|
||
</div>
|
||
</div>
|
||
<script type="text/javascript">
|
||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||
$(document).ready(function(){initNavTree('MEMORY.html',''); initResizable(); });
|
||
/* @license-end */
|
||
</script>
|
||
<div id="doc-content">
|
||
<!-- window showing the filter options -->
|
||
<div id="MSearchSelectWindow"
|
||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||
</div>
|
||
|
||
<!-- iframe showing the search results (closed by default) -->
|
||
<div id="MSearchResultsWindow">
|
||
<div id="MSearchResults">
|
||
<div class="SRPage">
|
||
<div id="SRIndex">
|
||
<div id="SRResults"></div>
|
||
<div class="SRStatus" id="Loading">Loading...</div>
|
||
<div class="SRStatus" id="Searching">Searching...</div>
|
||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div><div class="header">
|
||
<div class="headertitle"><div class="title">Memory </div></div>
|
||
</div><!--header-->
|
||
<div class="contents">
|
||
<div class="textblock"><p><a class="anchor" id="md_docs_doxygen_om6626_user_guides_memory"></a></p>
|
||
<h1><a class="anchor" id="autotoc_md69"></a>
|
||
Memory Map</h1>
|
||
<p>OM6XXX memory consists of ROM, EFUSE, RAM, external SPI Flash. Cache have dedicated RAM. The memory map is shown as follow:</p>
|
||
<div class="image">
|
||
<img src="Memory_map_om6626.png" alt=""/>
|
||
<div class="caption">
|
||
Memory Map</div></div>
|
||
<h3><a class="anchor" id="autotoc_md70"></a>
|
||
ROM</h3>
|
||
<p>The ROM code is located at [0x00100000, 0x00104000), in which Bootloader, BT Stack, Flash Driver and other platform modules are built.</p>
|
||
<h3><a class="anchor" id="autotoc_md71"></a>
|
||
EFUSE</h3>
|
||
<p>he EFUSE size is 256 bits, and uses the following APIs for reading and writing operations (reference: <a class="el" href="drv__efuse_8h.html" title="Header file of EFUSE HAL module.">drv_efuse.h</a>), n which user safety key (128bits,addr=0) and system CP/FT calibration data (128bits,addr=16) is stored.</p>
|
||
<div class="fragment"><div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__EFUSE.html#ga94bef5338ad244af16327be2462b6844">drv_efuse_write</a>(uint32_t addr, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, uint32_t length);</div>
|
||
<div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__EFUSE.html#gac8dc5d451efdea7f124311b1579c307d">drv_efuse_read</a>(uint32_t addr, <span class="keywordtype">void</span> *data, uint32_t length);</div>
|
||
<div class="ttc" id="agroup__EFUSE_html_ga94bef5338ad244af16327be2462b6844"><div class="ttname"><a href="group__EFUSE.html#ga94bef5338ad244af16327be2462b6844">drv_efuse_write</a></div><div class="ttdeci">void drv_efuse_write(uint32_t addr, const void *data, uint32_t length)</div><div class="ttdoc">drv efuse write</div></div>
|
||
<div class="ttc" id="agroup__EFUSE_html_gac8dc5d451efdea7f124311b1579c307d"><div class="ttname"><a href="group__EFUSE.html#gac8dc5d451efdea7f124311b1579c307d">drv_efuse_read</a></div><div class="ttdeci">void drv_efuse_read(uint32_t addr, void *data, uint32_t length)</div><div class="ttdoc">drv efuse read</div></div>
|
||
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>About efuse writing function, please be careful.</dd></dl>
|
||
<h3><a class="anchor" id="autotoc_md72"></a>
|
||
RAM</h3>
|
||
<p>The RAM located at [0x20000000, 0x20014000), and base address 0x00200000 also points to this RAM.</p>
|
||
<h3><a class="anchor" id="autotoc_md73"></a>
|
||
CACHE</h3>
|
||
<p>OM6XXX has a 8K bytes cache, and it co-works with SPI Flash Controller to speed up the SPI Flash read.</p>
|
||
<h3><a class="anchor" id="autotoc_md74"></a>
|
||
Alias Address</h3>
|
||
<p>In the current SDK, the ROM is remaped as alias address, and located at [0x00000000, 0x00004000)</p>
|
||
<h1><a class="anchor" id="autotoc_md75"></a>
|
||
Flash Description</h1>
|
||
<p>Different from RAM which can be read / written directly,flash is a kind of non-volatile storage for code shadowing to RAM, executing code directly, or storing data. Flash must be empty or erased before written into.</p>
|
||
<p>If flash access just needs single mode with read / program / erase, there are lots of flash models meeting the requirement. If Dual / Quad modes and other enhanced functions are required, such as flash Deep Power-down (DP) for power saving, or software Block Protect (BP) for flash program / erase protection, choosing flash model from Approved Vendor List provided by Onmicro is strongly suggested.</p>
|
||
<p>In order to enhance the performance, high speed read mechanism is also available in the flash driver. OM6XXX supports executing code (XIP) on SPI Flash, but there are also some limitations and precautions.</p>
|
||
<p>There are three basic operations for flash read, write, and erase operations. </p><dl class="section note"><dt>Note</dt><dd><em>All flash APIs are not calling in IRQ.</em></dd></dl>
|
||
<h2><a class="anchor" id="autotoc_md76"></a>
|
||
Internal SPI Flash</h2>
|
||
<p>OM6XXX has internal SPI Flash, its cachable address is located at [0x00400000,0x00800000), and non-cachable address is in [0x50000000,0x51000000).</p>
|
||
<p>The flash is divided into 4 parts: MBR, Application code, Configuration and System Info area.</p><ul>
|
||
<li><b>MBR Area</b>: It is known as Main Boot Record. Occupy 12KB flash space from address 0KB to 12KB.</li>
|
||
<li><b>System Info Area</b>: Save some system info. It occupies 4KB flash spacef from address 12KB to 16KB</li>
|
||
<li><b>Application Code Area</b>: Save the user application code, its size depend on user's design.</li>
|
||
<li><b>Configuration Area</b>: It is used to save some config data, such as bluetooth address, device name, some user config, and so on.</li>
|
||
</ul>
|
||
<p>User can use the free area to save the custom data.</p>
|
||
<div class="image">
|
||
<img src="Flash_layout_om6626.png" alt=""/>
|
||
<div class="caption">
|
||
OM6XXX Flash Layout</div></div>
|
||
<dl class="section note"><dt>Note</dt><dd>If the chip supports <a class="el" href="SECUREBOOT.html">Secure Boot</a>, please look at its flash layout.</dd></dl>
|
||
<h2><a class="anchor" id="autotoc_md77"></a>
|
||
External SPI Flash</h2>
|
||
<p>OM6XXX supports external SPI Flash, its cachable address is also located at [0x00400000,0x00800000), and non-cachable address is in [0x50000000,0x51000000). Its pin defined like follow:</p>
|
||
<div class="image">
|
||
<img src="External_spi_flash.jpg" alt=""/>
|
||
<div class="caption">
|
||
External SPI Flash Pin Configurations</div></div>
|
||
<p>Pin Descriptions: </p><table class="markdownTable">
|
||
<tr class="markdownTableHead">
|
||
<th class="markdownTableHeadNone">No. </th><th class="markdownTableHeadNone">Symbol </th><th class="markdownTableHeadNone">Extension </th><th class="markdownTableHeadNone">Remarks </th></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">CS# </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">Chip select </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">2 </td><td class="markdownTableBodyNone">SO </td><td class="markdownTableBodyNone">SIO1 </td><td class="markdownTableBodyNone">Serial data output for 1 x I/O, Serial data input and output for 4 x I/O read mode </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">3 </td><td class="markdownTableBodyNone">WP# </td><td class="markdownTableBodyNone">SIO2 </td><td class="markdownTableBodyNone">Write protection active low, Serial data input and output for 4 x I/O read mode </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">4 </td><td class="markdownTableBodyNone">GND </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">Ground of the device </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">5 </td><td class="markdownTableBodyNone">SI </td><td class="markdownTableBodyNone">SIO0 </td><td class="markdownTableBodyNone">Serial data input for 1x I/O, Serial data input and output for 4 x I/O read mode </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">6 </td><td class="markdownTableBodyNone">SCLK </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">Serial interface clock input </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">7 </td><td class="markdownTableBodyNone">HOLD# </td><td class="markdownTableBodyNone">SIO3 </td><td class="markdownTableBodyNone">To pause the device without deselecting the device, Serial data input and output for 4 x I/O read mode </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">8 </td><td class="markdownTableBodyNone">VCC </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">Power supply of the device </td></tr>
|
||
</table>
|
||
<h2><a class="anchor" id="autotoc_md78"></a>
|
||
Flash API</h2>
|
||
<ul>
|
||
<li>Read <div class="fragment"><div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__SF.html#ga40a3103d10781d48bfc5fb5f6facfb2c">drv_sf_read</a>(HS_SF_Type *sf, uint32_t cs, uint32_t addr, <span class="keywordtype">void</span> *data, uint32_t length);</div>
|
||
<div class="ttc" id="agroup__SF_html_ga40a3103d10781d48bfc5fb5f6facfb2c"><div class="ttname"><a href="group__SF.html#ga40a3103d10781d48bfc5fb5f6facfb2c">drv_sf_read</a></div><div class="ttdeci">void drv_sf_read(OM_SF_Type *sf, uint32_t cs, uint32_t addr, void *data, uint32_t length)</div><div class="ttdoc">sf read</div></div>
|
||
</div><!-- fragment --></li>
|
||
<li>Write <div class="fragment"><div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__SF.html#gab851178037b375dca343fa6bdd4e3f9a">drv_sf_write</a>(HS_SF_Type *sf, uint32_t cs, uint32_t addr, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, uint32_t length);</div>
|
||
<div class="ttc" id="agroup__SF_html_gab851178037b375dca343fa6bdd4e3f9a"><div class="ttname"><a href="group__SF.html#gab851178037b375dca343fa6bdd4e3f9a">drv_sf_write</a></div><div class="ttdeci">void drv_sf_write(OM_SF_Type *sf, uint32_t cs, uint32_t addr, const void *data, uint32_t length)</div><div class="ttdoc">sf write</div></div>
|
||
</div><!-- fragment --></li>
|
||
<li>Erase <div class="fragment"><div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__SF.html#ga642c2a5d467fd21c9559e42e01ea930c">drv_sf_erase</a>(HS_SF_Type *sf, uint32_t cs, uint32_t addr, uint32_t length);</div>
|
||
<div class="ttc" id="agroup__SF_html_ga642c2a5d467fd21c9559e42e01ea930c"><div class="ttname"><a href="group__SF.html#ga642c2a5d467fd21c9559e42e01ea930c">drv_sf_erase</a></div><div class="ttdeci">void drv_sf_erase(OM_SF_Type *sf, uint32_t cs, uint32_t addr, uint32_t length)</div><div class="ttdoc">sf erase</div></div>
|
||
</div><!-- fragment --></li>
|
||
</ul>
|
||
<p>API reference: <a class="el" href="drv__sf_8h.html" title="sflash driver">drv_sf.h</a></p>
|
||
<h2><a class="anchor" id="autotoc_md79"></a>
|
||
Bit Modes</h2>
|
||
<p>Except to the standard Serial Peripheral Interface (SPI), most flash models also support high performance Dual/Quad modes I/O SPI controlled by six pins :</p>
|
||
<ul>
|
||
<li>Serial Clock (CLK)</li>
|
||
<li>Chip Select (CS#)</li>
|
||
<li>Serial Data I/O0 (DI)</li>
|
||
<li>Serial Data I/O1 (DO)</li>
|
||
<li>Serial Data IO2 (WP#)</li>
|
||
<li>Serial Data I/O3 (HOLD#)</li>
|
||
</ul>
|
||
<h3><a class="anchor" id="autotoc_md80"></a>
|
||
Three Bit Modes</h3>
|
||
<ol type="1">
|
||
<li>Single Mode Standard SPI mode as called 1 bit-mode, which only use CLK, CS#, DI, and DO. WP# is still available for Write Protect Input, and HOLD# is also available for Hold Input.</li>
|
||
<li>Dual Mode as called 2-bit mode, uses CLK, CS#, and also uses DI as IO0, DO as IO1. The same with Single mode, WP# and HOLD# are also available.</li>
|
||
<li>Quad mode as called 4-bit mode, needs six pins, uses CLK, CS#, and also uses DI as IO0, DO as IO1, WP# as IO2, and HOLD# as IO3. Since all pins are used, Write Protect and Hold functions do not work in Quad mode.</li>
|
||
</ol>
|
||
<p>Although almost all flash models support Dual and Quad modes, the command set and mode switch rules are not all same.</p>
|
||
<h3><a class="anchor" id="autotoc_md81"></a>
|
||
Bit Mode Switch</h3>
|
||
<p>In order to support as many flash models as possible, single mode (1 bit-mode) is used at boot time. If users need to switch to high speed bit mode (2 or 4 bit mode), the interface provided in the SDK is called: <a class="el" href="group__SF.html#gaff473c04bbaced6a0b83dee5eca9648c">drv_sf_config()</a> to switch to high bit mode. The parameter "width" is used to configure bit mode, and return value of the function indicates whether the switch is successful.</p>
|
||
<p>The prototype of the interface function provided by SDK for bit mode switching is as follows: </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__SF.html#gaff473c04bbaced6a0b83dee5eca9648c">drv_sf_config</a>(HS_SF_Type *sf, uint32_t cs, <span class="keyword">const</span> <a class="code hl_struct" href="structdrv__sf__config__t.html">drv_sf_config_t</a> *config)</div>
|
||
<div class="ttc" id="agroup__SF_html_gaff473c04bbaced6a0b83dee5eca9648c"><div class="ttname"><a href="group__SF.html#gaff473c04bbaced6a0b83dee5eca9648c">drv_sf_config</a></div><div class="ttdeci">void drv_sf_config(OM_SF_Type *sf, uint32_t cs, const drv_sf_config_t *config)</div><div class="ttdoc">sf config</div></div>
|
||
<div class="ttc" id="astructdrv__sf__config__t_html"><div class="ttname"><a href="structdrv__sf__config__t.html">drv_sf_config_t</a></div><div class="ttdoc">SF config.</div><div class="ttdef"><b>Definition:</b> drv_sf.h:180</div></div>
|
||
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md82"></a>
|
||
Software Block Protect</h2>
|
||
<p>Although flash supports HW protect pin (WP#) to lock all flash to prevent writing and erasing operations, there are still two disadvantages.</p>
|
||
<ol type="1">
|
||
<li>If WP# is used for flash protection, Quad mode (4-bit mode) is not allowed.</li>
|
||
<li>HW protection can just choose to protect all or protect none, can’t protect partially.</li>
|
||
</ol>
|
||
<p>A mechanism to solve these problems is flash software Blocks Protection (BPx). It uses some BP bits in flash status register to select the level (range) to protect.</p>
|
||
<p><em>The following table is the status register bitmap :</em></p>
|
||
<table class="markdownTable">
|
||
<tr class="markdownTableHead">
|
||
<th class="markdownTableHeadNone">Bit </th><th class="markdownTableHeadNone">S15 </th><th class="markdownTableHeadNone">S14 </th><th class="markdownTableHeadNone">S13 </th><th class="markdownTableHeadNone">S12 </th><th class="markdownTableHeadNone">S11 </th><th class="markdownTableHeadNone">S10 </th><th class="markdownTableHeadNone">S9 </th><th class="markdownTableHeadNone">S8 </th><th class="markdownTableHeadNone">S7 </th><th class="markdownTableHeadNone">S6 </th><th class="markdownTableHeadNone">S5 </th><th class="markdownTableHeadNone">S4 </th><th class="markdownTableHeadNone">S3 </th><th class="markdownTableHeadNone">S2 </th><th class="markdownTableHeadNone">S1 </th><th class="markdownTableHeadNone">S0 </th></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">Define </td><td class="markdownTableBodyNone">SUS1 </td><td class="markdownTableBodyNone">CMP </td><td class="markdownTableBodyNone">LB3 </td><td class="markdownTableBodyNone">LB2 </td><td class="markdownTableBodyNone">LB1 </td><td class="markdownTableBodyNone">SUS2 </td><td class="markdownTableBodyNone">QE </td><td class="markdownTableBodyNone">SRP1 </td><td class="markdownTableBodyNone">SRP0 </td><td class="markdownTableBodyNone">BP4 </td><td class="markdownTableBodyNone">BP3 </td><td class="markdownTableBodyNone">BP2 </td><td class="markdownTableBodyNone">BP1 </td><td class="markdownTableBodyNone">BP0 </td><td class="markdownTableBodyNone">WEL </td><td class="markdownTableBodyNone">WIP </td></tr>
|
||
</table>
|
||
<p>The definition of the status register bits is as below :</p>
|
||
<p><b>WIP bit</b> <br />
|
||
The Write in Progress(WIP)bit indicates whether the memory is busy in program/erase/write status register progress. When WIP bit sets to 1,means it is busy,otherwise not.</p>
|
||
<p><b>WEL bit</b> <br />
|
||
The Write Enable Latch(WEL) bit indicates the status of the internal Write Enable Latch. When set to 1 the internal Write Enable Latch is set, when set to 0 the internal Write Enable Latch is reset and no Write Status Register,Program or Erase command is accepted.</p>
|
||
<p><b>BP0 BP1 BP2 BP3 BP4 bits</b> <br />
|
||
The Block Protect (BP4, BP3, BP2, BP1, and BP0) bits are non-volatile. They define the size of the area to be software protected against Program and Erase commands.These bits are written with the Write Status Register(WRSR) command. When the Block Protect (BP4, BP3, BP2, BP1, BP0) bits are set to 1, the relevant memory area (as defined in Table “Protected Area Sizes”).becomes protected against Page Program (PP), Page Erase (PE), Sector Erase (SE) and Block Erase (BE) commands. The Block Protect (BP4, BP3, BP2, BP1, and BP0) bits can be written provided that the Hardware Protected mode has not been set. The Chip Erase (CE) command is executed, only if the Block Protect (BP4, BP3, BP2, BP1and BP0) are set to “None protected”.</p>
|
||
<p><b>SRP0 SRP1 bits</b> <br />
|
||
The Status Register Protect (SRP1 and SRP0) bits are non-volatile Read/Write bits in the status register. The SRP bits control the method of write protection: software protection, hardware protection, power supply lock-down or one time programmable protection.</p>
|
||
<table class="markdownTable">
|
||
<tr class="markdownTableHead">
|
||
<th class="markdownTableHeadNone">SRP1 </th><th class="markdownTableHeadNone">SRP0 </th><th class="markdownTableHeadNone">#WP </th><th class="markdownTableHeadNone">Status Register </th><th class="markdownTableHeadNone">Description </th></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">X </td><td class="markdownTableBodyNone">Software Protected </td><td class="markdownTableBodyNone">The Status Register can be written to after a Write Enable command, WEL=1.(Default) </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">Hardware Protected </td><td class="markdownTableBodyNone">WP#=0, the Status Register locked and cannot be written to. </td></tr>
|
||
</table>
|
||
<p><b>QE bit</b> <br />
|
||
The Quad Enable (QE) bit is a non-volatile Read/Write bit in the Status Register that allows Quad operation. When the QE pin is set to 1, the Quad IO2 and IO3 pins are enabled. (The QE bit should never be set to 1 during standard SPI or Dual SPI operation if the WP# or HOLD# pins are tied directly to the power supply or ground).</p>
|
||
<p><b>LB3 LB2 LB1 bits</b> <br />
|
||
The LB3, LB2, LB1, bits are non-volatile One Time Program (OTP) bits in Status Register (S13-S11) that provide the write protect control and status to the Security Registers. The default state of LB3-LB1are0, the security registers are unlocked. The LB3-LB1bitscan be set to 1 individually using the Write Register instruction. The LB3-LB1bits are One Time Programmable, once its set to 1, the Security Registers will become read-only permanently.</p>
|
||
<p><b>CMP bit</b> <br />
|
||
The CMP bit is a non-volatile Read/Write bit in the Status Register(S14). It is used in conjunction the BP4-BP0 bits to provide more flexibility for the array protection. Please see the table “Protected Area Size” for details. The default setting is CMP=0.</p>
|
||
<p><b>SUS1 SUS2 bits</b> <br />
|
||
The SUS1 and SUS2bit are read only bit in the status register (S15and S10) that are set to 1 after interrupting an program/erase/write status register progress by Program/Erase Suspend (75H or B0H) command (The Erase Suspend will set the SUS1 to 1,and the Program Suspend will set the SUS2 to 1). The SUS1 and SUS2 bit are cleared to 0 by Program/Erase Resume (7AH or 30H) command as well as a power-down, power-up cycle.</p>
|
||
<p><em>The following tables shows the Protected Area Sizes of (4Mb and 8Mb Flash), setting by CMP and BPx bits :</em> <br />
|
||
</p><ul>
|
||
<li><b>Flash Size : 4Mb, CMP=0.</b></li>
|
||
</ul>
|
||
<table class="markdownTable">
|
||
<tr class="markdownTableHead">
|
||
<th class="markdownTableHeadNone">BP4 </th><th class="markdownTableHeadNone">BP3 </th><th class="markdownTableHeadNone">BP2 </th><th class="markdownTableHeadNone">BP1 </th><th class="markdownTableHeadNone">BP0 </th><th class="markdownTableHeadNone">Blocks </th><th class="markdownTableHeadNone">Addresses </th><th class="markdownTableHeadNone">Density </th></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">7 </td><td class="markdownTableBodyNone">0x070000 - 0x07FFFF </td><td class="markdownTableBodyNone">64KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">6 and 7 </td><td class="markdownTableBodyNone">0x060000 - 0x07FFFF </td><td class="markdownTableBodyNone">128KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">4 to 7 </td><td class="markdownTableBodyNone">0x040000 - 0x07FFFF </td><td class="markdownTableBodyNone">256KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x00FFFF </td><td class="markdownTableBodyNone">64KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 and 1 </td><td class="markdownTableBodyNone">0x000000 - 0x01FFFF </td><td class="markdownTableBodyNone">128KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 3 </td><td class="markdownTableBodyNone">0x000000 - 0x03FFFF </td><td class="markdownTableBodyNone">256KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x07FFFF </td><td class="markdownTableBodyNone">512KB(ALL) </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">7 </td><td class="markdownTableBodyNone">0x07F000 - 0x07FFFF </td><td class="markdownTableBodyNone">4KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">7 </td><td class="markdownTableBodyNone">0x07E000 - 0x07FFFF </td><td class="markdownTableBodyNone">8KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">7 </td><td class="markdownTableBodyNone">0x07C000 - 0x07FFFF </td><td class="markdownTableBodyNone">16KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">7 </td><td class="markdownTableBodyNone">0x078000 - 0x07FFFF </td><td class="markdownTableBodyNone">32KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">7 </td><td class="markdownTableBodyNone">0x078000 - 0x07FFFF </td><td class="markdownTableBodyNone">32KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x00FFFF </td><td class="markdownTableBodyNone">4KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x001FFF </td><td class="markdownTableBodyNone">8KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x003FFF </td><td class="markdownTableBodyNone">16KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x007FFF </td><td class="markdownTableBodyNone">32KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x007FFF </td><td class="markdownTableBodyNone">32KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x07FFFF </td><td class="markdownTableBodyNone">512KB(ALL) </td></tr>
|
||
</table>
|
||
<ul>
|
||
<li><b>Flash Size : 4Mb, CMP=1.</b></li>
|
||
</ul>
|
||
<table class="markdownTable">
|
||
<tr class="markdownTableHead">
|
||
<th class="markdownTableHeadNone">BP4 </th><th class="markdownTableHeadNone">BP3 </th><th class="markdownTableHeadNone">BP2 </th><th class="markdownTableHeadNone">BP1 </th><th class="markdownTableHeadNone">BP0 </th><th class="markdownTableHeadNone">Blocks </th><th class="markdownTableHeadNone">Addresses </th><th class="markdownTableHeadNone">Density </th></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x07FFFF </td><td class="markdownTableBodyNone">512KB(ALL) </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 6 </td><td class="markdownTableBodyNone">0x000000 - 0x06FFFF </td><td class="markdownTableBodyNone">448KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 5 </td><td class="markdownTableBodyNone">0x000000 - 0x05FFFF </td><td class="markdownTableBodyNone">384KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 3 </td><td class="markdownTableBodyNone">0x000000 - 0x03FFFF </td><td class="markdownTableBodyNone">256KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 to 7 </td><td class="markdownTableBodyNone">0x010000 - 0x07FFFF </td><td class="markdownTableBodyNone">448KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">2 to 7 </td><td class="markdownTableBodyNone">0x020000 - 0x07FFFF </td><td class="markdownTableBodyNone">384KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">4 to 7 </td><td class="markdownTableBodyNone">0x040000 - 0x07FFFF </td><td class="markdownTableBodyNone">256KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x07EFFF </td><td class="markdownTableBodyNone">508KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x07DFFF </td><td class="markdownTableBodyNone">504KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x07BFFF </td><td class="markdownTableBodyNone">496KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x077FFF </td><td class="markdownTableBodyNone">480KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x077FFF </td><td class="markdownTableBodyNone">480KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x001000 - 0x07FFFF </td><td class="markdownTableBodyNone">508KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x002000 - 0x07FFFF </td><td class="markdownTableBodyNone">504KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x004000 - 0x07FFFF </td><td class="markdownTableBodyNone">496KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x008000 - 0x07FFFF </td><td class="markdownTableBodyNone">480KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x008000 - 0x07FFFF </td><td class="markdownTableBodyNone">480KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td></tr>
|
||
</table>
|
||
<ul>
|
||
<li><b>Flash Size : 8Mb, CMP=0.</b></li>
|
||
</ul>
|
||
<table class="markdownTable">
|
||
<tr class="markdownTableHead">
|
||
<th class="markdownTableHeadNone">BP4 </th><th class="markdownTableHeadNone">BP3 </th><th class="markdownTableHeadNone">BP2 </th><th class="markdownTableHeadNone">BP1 </th><th class="markdownTableHeadNone">BP0 </th><th class="markdownTableHeadNone">Blocks </th><th class="markdownTableHeadNone">Addresses </th><th class="markdownTableHeadNone">Density </th></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">15 </td><td class="markdownTableBodyNone">0x0F0000 - 0x0FFFFF </td><td class="markdownTableBodyNone">64KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">14 and 15 </td><td class="markdownTableBodyNone">0x0E0000 - 0x0FFFFF </td><td class="markdownTableBodyNone">128KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">12 to 15 </td><td class="markdownTableBodyNone">0x0C0000 - 0x0FFFFF </td><td class="markdownTableBodyNone">256KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">8 to 15 </td><td class="markdownTableBodyNone">0x080000 - 0x0FFFFF </td><td class="markdownTableBodyNone">512KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x00FFFF </td><td class="markdownTableBodyNone">64KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 and 1 </td><td class="markdownTableBodyNone">0x000000 - 0x01FFFF </td><td class="markdownTableBodyNone">128KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 3 </td><td class="markdownTableBodyNone">0x000000 - 0x03FFFF </td><td class="markdownTableBodyNone">256KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x07FFFF </td><td class="markdownTableBodyNone">512KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x000000 - 0x0FFFFF </td><td class="markdownTableBodyNone">1MB(ALL) </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x000000 - 0x0FFFFF </td><td class="markdownTableBodyNone">1MB(ALL) </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">15 </td><td class="markdownTableBodyNone">0x0FF000 - 0x0FFFFF </td><td class="markdownTableBodyNone">4KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">15 </td><td class="markdownTableBodyNone">0x0FE000 - 0x0FFFFF </td><td class="markdownTableBodyNone">8KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">15 </td><td class="markdownTableBodyNone">0x0FC000 - 0x0FFFFF </td><td class="markdownTableBodyNone">16KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">15 </td><td class="markdownTableBodyNone">0x0F8000 - 0x0FFFFF </td><td class="markdownTableBodyNone">32KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x00FFFF </td><td class="markdownTableBodyNone">4KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x001FFF </td><td class="markdownTableBodyNone">8KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x003FFF </td><td class="markdownTableBodyNone">16KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0x000000 - 0x007FFF </td><td class="markdownTableBodyNone">32KB </td></tr>
|
||
</table>
|
||
<ul>
|
||
<li><b>Flash Size : 8Mb, CMP=1.</b></li>
|
||
</ul>
|
||
<table class="markdownTable">
|
||
<tr class="markdownTableHead">
|
||
<th class="markdownTableHeadNone">BP4 </th><th class="markdownTableHeadNone">BP3 </th><th class="markdownTableHeadNone">BP2 </th><th class="markdownTableHeadNone">BP1 </th><th class="markdownTableHeadNone">BP0 </th><th class="markdownTableHeadNone">Blocks </th><th class="markdownTableHeadNone">Addresses </th><th class="markdownTableHeadNone">Density </th></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x000000 - 0x0FFFFF </td><td class="markdownTableBodyNone">1MB(ALL) </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 14 </td><td class="markdownTableBodyNone">0x000000 - 0x0EFFFF </td><td class="markdownTableBodyNone">960KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 13 </td><td class="markdownTableBodyNone">0x000000 - 0x0DFFFF </td><td class="markdownTableBodyNone">896KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 11 </td><td class="markdownTableBodyNone">0x000000 - 0x0BFFFF </td><td class="markdownTableBodyNone">768KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 7 </td><td class="markdownTableBodyNone">0x000000 - 0x07FFFF </td><td class="markdownTableBodyNone">512KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 to 15 </td><td class="markdownTableBodyNone">0x010000 - 0x0FFFFF </td><td class="markdownTableBodyNone">960KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">2 to 15 </td><td class="markdownTableBodyNone">0x020000 - 0x0FFFFF </td><td class="markdownTableBodyNone">896KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">4 to 15 </td><td class="markdownTableBodyNone">0x040000 - 0x0FFFFF </td><td class="markdownTableBodyNone">768KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">8 to 15 </td><td class="markdownTableBodyNone">0x080000 - 0x0FFFFF </td><td class="markdownTableBodyNone">512KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td><td class="markdownTableBodyNone">None </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x000000 - 0x0FEFFF </td><td class="markdownTableBodyNone">1020KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x000000 - 0x0FDFFF </td><td class="markdownTableBodyNone">1016KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x000000 - 0x0FBFFF </td><td class="markdownTableBodyNone">1008KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x000000 - 0x0F7FFF </td><td class="markdownTableBodyNone">992KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x001000 - 0x0FFFFF </td><td class="markdownTableBodyNone">1020KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x002000 - 0x0FFFFF </td><td class="markdownTableBodyNone">1016KB </td></tr>
|
||
<tr class="markdownTableRowEven">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x004000 - 0x0FFFFF </td><td class="markdownTableBodyNone">1008KB </td></tr>
|
||
<tr class="markdownTableRowOdd">
|
||
<td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">1 </td><td class="markdownTableBodyNone">0 </td><td class="markdownTableBodyNone">x </td><td class="markdownTableBodyNone">0 to 15 </td><td class="markdownTableBodyNone">0x008000 - 0x0FFFFF </td><td class="markdownTableBodyNone">992KB </td></tr>
|
||
</table>
|
||
<h3><a class="anchor" id="autotoc_md83"></a>
|
||
Flash Status Register Read and Write API</h3>
|
||
<ul>
|
||
<li>Read <div class="fragment"><div class="line"><span class="comment">// Return status register value</span></div>
|
||
<div class="line">uint16_t <a class="code hl_function" href="group__SF.html#gae2609884bbeb916e5517eb6c2f63a45d">drv_sf_read_sr_16bits</a>(OM_SF_Type *sf, uint32_t cs);</div>
|
||
<div class="ttc" id="agroup__SF_html_gae2609884bbeb916e5517eb6c2f63a45d"><div class="ttname"><a href="group__SF.html#gae2609884bbeb916e5517eb6c2f63a45d">drv_sf_read_sr_16bits</a></div><div class="ttdeci">uint16_t drv_sf_read_sr_16bits(OM_SF_Type *sf, uint32_t cs)</div><div class="ttdoc">read sr 16bits</div></div>
|
||
</div><!-- fragment --></li>
|
||
<li>Write <div class="fragment"><div class="line"><span class="comment">// Put status register value</span></div>
|
||
<div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__SF.html#gabe12755aaa5cf74d9bc720e6e2e2f9b5">drv_sf_write_sr_16bits</a>(OM_SF_Type *sf, uint32_t cs, uint16_t sr);</div>
|
||
<div class="ttc" id="agroup__SF_html_gabe12755aaa5cf74d9bc720e6e2e2f9b5"><div class="ttname"><a href="group__SF.html#gabe12755aaa5cf74d9bc720e6e2e2f9b5">drv_sf_write_sr_16bits</a></div><div class="ttdeci">void drv_sf_write_sr_16bits(OM_SF_Type *sf, uint32_t cs, uint16_t sr)</div><div class="ttdoc">write sr 16bits</div></div>
|
||
</div><!-- fragment --></li>
|
||
</ul>
|
||
<h2><a class="anchor" id="autotoc_md84"></a>
|
||
Power Mode</h2>
|
||
<p>The power mode of Flash is mainly divided into three scenarios: working, standby and Power Down. The power consumption of the working mode is generally about 10 mA, while the power consumption of standby mode is usually about 10uA order of magnitude. The power consumption of the Power Down mode is lower, even less than 1 uA.</p>
|
||
<p>Flash automatically enters the standby mode without any access, and automatically enters the working state when it needs to be accessed again.</p>
|
||
<p>After calling <a class="el" href="group__SF.html#ga540ff8c16137218283e82d8bf39cabad">drv_sf_enable()</a>, the flash will be power on. 1 second after calling the drv_sf_enable function, the flash will automatically power off. So just call drv_sf_enable function before operating flash.</p>
|
||
<dl class="section note"><dt>Note</dt><dd>Unlike SRAM, flash is a non-volatile second storage. Because of 100K times program / erase limitation, flash is not suggested for performing write/erase operations frequently.</dd></dl>
|
||
<h2><a class="anchor" id="autotoc_md85"></a>
|
||
XIP</h2>
|
||
<p>If the remaining RAM space is enough, APP code can be directly executed on RAM, which is conducive to improving performance and reducing power consumption. However, if the APP code is so large that the remaining RAM space is not enough, some or all of the APP codes need to be executed on flash.</p>
|
||
<p>All demos in <code>projects</code> directory are XIP mode. </p>
|
||
</div></div><!-- contents -->
|
||
</div><!-- PageDoc -->
|
||
</div><!-- doc-content -->
|
||
<!-- HTML footer for doxygen 1.9.1-->
|
||
<!-- start footer part -->
|
||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||
</div>
|
||
</body>
|
||
</html>
|