blob: 4e6083dcc46d72b774eb8208e8041c7c66e9cc29 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flash &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../../../../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../../../genindex.html"/>
<link rel="search" title="Search" href="../../../../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../../../../index.html"/>
<link rel="up" title="Hardware Abstraction Layer" href="../hal.html"/>
<link rel="next" title="hal_flash_int" href="hal_flash_int.html"/>
<link rel="prev" title="I2C" href="../hal_i2c/hal_i2c.html"/>
<script src="../../../../_static/js/modernizr.min.js"></script>
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../../../../_static/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.11.0, Apache NimBLE 1.6.0 </a> released September 7, 2023)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li class="important">
<a href="/quick-start/">Quick Start</a>
</li>
<li>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
<a href="../../../os_user_guide.html">OS User Guide</a> /
<a href="../hal.html">Hardware Abstraction Layer</a> /
Flash
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-core/edit/master/docs/os/modules/hal/hal_flash/hal_flash.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</option>
<option value="/v1_11_0" >
Version: 1.11.0
</option>
<option value="/v1_10_0" selected="selected" >
Version: 1.10.0
</option>
<option value="/v1_9_0" >
Version: 1.9.0
</option>
<option value="/v1_8_0" >
Version: 1.8.0
</option>
<option value="/v1_7_0" >
Version: 1.7.0
</option>
<option value="/v1_6_0" >
Version: 1.6.0
</option>
<option value="/v1_5_0" >
Version: 1.5.0
</option>
<option value="/v1_4_0" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../tutorials/tutorials.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../../os_user_guide.html">OS User Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../../core_os/mynewt_os.html">Kernel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../system_modules.html">System</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../hal.html">Hardware Abstraction</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../hal_timer/hal_timer.html">Timer</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_gpio/hal_gpio.html">GPIO</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_uart/hal_uart.html">UART</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_spi/hal_spi.html">SPI</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_i2c/hal_i2c.html">I2C</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Flash</a><ul>
<li class="toctree-l4"><a class="reference internal" href="hal_flash_int.html">hal_flash_int</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../hal_system/hal_sys.html">System</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_watchdog/hal_watchdog.html">Watchdog</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_bsp/hal_bsp.html">BSP</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_os_tick/hal_os_tick.html">OS Tick</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_creation.html">Creating New HAL Interfaces</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_in_libraries.html">Using HAL in Your Libraries</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../bootloader/bootloader.html">Secure Bootloader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../split/split.html">Split Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../core_os/porting/port_os.html">Porting Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../baselibc.html">Baselibc</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../drivers/driver.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../devmgmt/newtmgr.html">Device Management with Newt Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../mcumgr/mcumgr.html">Device Management with MCUmgr</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../imgmgr/imgmgr.html">Image Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sysinitconfig/sysinitconfig.html">Compile-Time Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sysinitdown/sysinitdown.html">System Initialization and Shutdown</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../extcmd/extcmd.html">Build-Time Hooks</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../fs/fs.html">File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../fcb/fcb.html">Flash Circular Buffer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sensor_framework/sensor_framework.html">Sensor Framework</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../testutil/testutil.html">Test Utilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../json/json.html">JSON</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../mfg/mfg.html">Manufacturing support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../bsp/index.html">Board support</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../../network/index.html">BLE User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.10.0 is not the most recent version of the
Apache Mynewt documentation. Click <a href="/latest">here</a> to
read the latest version.
</p>
</div>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="flash">
<h1>Flash<a class="headerlink" href="#flash" title="Permalink to this headline"></a></h1>
<p>The hardware independent interface to flash memory that is used by
applications.</p>
<div class="toctree-wrapper compound">
</div>
<div class="section" id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
<p>The API offers basic initialization, read, write, erase, sector erase,
and other operations.</p>
</div>
<div class="section" id="api">
<h2>API<a class="headerlink" href="#api" title="Permalink to this headline"></a></h2>
<dl class="c function">
<dt id="c.hal_flash_ioctl">
<span class="target" id="group___h_a_l_flash_1ga83c52b5bc0db02dac40effe1275613bc"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_ioctl</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">flash_id</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">cmd</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">args</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_ioctl" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.hal_flash_read">
<span class="target" id="group___h_a_l_flash_1gab52a043a8dc3b929f40f356c50b46e84"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_read</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">flash_id</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">address</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">dst</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">num_bytes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_read" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads a block of data from flash. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success; SYS_EINVAL on bad argument error; SYS_EIO on flash driver error. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">flash_id</span></code>: The ID of the flash device to read from. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">address</span></code>: The address to read from. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dst</span></code>: A buffer to fill with data read from flash. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">num_bytes</span></code>: The number of bytes to read.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_write">
<span class="target" id="group___h_a_l_flash_1gac08fc3f0c55c2e15f3249af4a16f85ae"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_write</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">flash_id</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">address</span></em>, <em class="property"><span class="pre">const</span></em> <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">src</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">num_bytes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_write" title="Permalink to this definition"></a><br /></dt>
<dd><p>Writes a block of data to flash. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success; SYS_EINVAL on bad argument error; SYS_EACCES if flash region is write protected; SYS_EIO on flash driver error. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">flash_id</span></code>: The ID of the flash device to write to. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">address</span></code>: The address to write to. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">src</span></code>: A buffer containing the data to be written. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">num_bytes</span></code>: The number of bytes to write.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_erase_sector">
<span class="target" id="group___h_a_l_flash_1gaea93a1a08bb8bd22eb54c2d5178a2a13"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_erase_sector</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">flash_id</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">sector_address</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_erase_sector" title="Permalink to this definition"></a><br /></dt>
<dd><p>Erases a single flash sector. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success; SYS_EINVAL on bad argument error; SYS_EACCES if flash region is write protected; SYS_EIO on flash driver error. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">flash_id</span></code>: The ID of the flash device to erase. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sector_address</span></code>: An address within the sector to erase.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_erase">
<span class="target" id="group___h_a_l_flash_1ga9f610de40a496b16602074e1d6459433"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_erase</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">flash_id</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">address</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">num_bytes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_erase" title="Permalink to this definition"></a><br /></dt>
<dd><p>Erases a contiguous sequence of flash sectors. </p>
<p>If the specified range does not correspond to a whole number of sectors, any partially-specified sectors are fully erased. For example, if a device has 1024-byte sectors, then these arguments: o address: 300 o num_bytes: 1000 cause the first two sectors to be erased in their entirety.</p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success; SYS_EINVAL on bad argument error; SYS_EACCES if flash region is write protected; SYS_EIO on flash driver error. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">flash_id</span></code>: The ID of the flash device to erase. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">address</span></code>: An address within the sector to begin the erase at. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">num_bytes</span></code>: The length, in bytes, of the region to erase.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_isempty">
<span class="target" id="group___h_a_l_flash_1ga4e9ed50e1d25beb34d8b5eddb7369314"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_isempty</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">flash_id</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">address</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">dst</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">num_bytes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_isempty" title="Permalink to this definition"></a><br /></dt>
<dd><p>Determines if the specified region of flash is completely unwritten. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 if any written bytes were detected; 1 if the region is completely unwritten; SYS_EINVAL on bad argument error; SYS_EIO on flash driver error. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">id</span></code>: The ID of the flash hardware to inspect. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">address</span></code>: The starting address of the check. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dst</span></code>: A buffer to hold the contents of the flash region. This must be at least <code class="docutils literal notranslate"><span class="pre">num_bytes</span></code> large. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">num_bytes</span></code>: The number of bytes to check.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_isempty_no_buf">
<span class="target" id="group___h_a_l_flash_1gaf81a38a3497772d83a86921a7c1cd58e"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_isempty_no_buf</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">id</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">address</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">num_bytes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_isempty_no_buf" title="Permalink to this definition"></a><br /></dt>
<dd><p>Determines if the specified region of flash is completely unwritten. </p>
<p>This function is like <code class="docutils literal notranslate"><a class="reference internal" href="#group___h_a_l_flash_1ga4e9ed50e1d25beb34d8b5eddb7369314"><span class="std std-ref"><span class="pre">hal_flash_isempty()</span></span></a></code>, except the caller does not need to provide a buffer. Instead, a buffer of size MYNEWT_VAL(HAL_FLASH_VERIFY_BUF_SZ) is allocated on the stack.</p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 if any written bytes were detected; 1 if the region is completely unwritten; SYS_EINVAL on bad argument error; SYS_EIO on flash driver error. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">id</span></code>: The ID of the flash hardware to inspect. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">address</span></code>: The starting address of the check. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">num_bytes</span></code>: The number of bytes of flash to check.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_align">
<span class="target" id="group___h_a_l_flash_1ga9dda1efff3a52a664d9f76f35e25b60c"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">hal_flash_align</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">flash_id</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_align" title="Permalink to this definition"></a><br /></dt>
<dd><p>Determines the minimum write alignment of a flash device. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>The flash device’s minimum write alignment. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">id</span></code>: The ID of the flash hardware to check.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_erased_val">
<span class="target" id="group___h_a_l_flash_1ga1602078f370fbee63ddab7d195e1dc4a"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">hal_flash_erased_val</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">flash_id</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_erased_val" title="Permalink to this definition"></a><br /></dt>
<dd><p>Determines the value of an erased byte for a particular flash device. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>The value of an erased byte. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">id</span></code>: The ID of the flash hardware to check.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_init">
<span class="target" id="group___h_a_l_flash_1gaa3aed2bc9e984945102ec5d9a92f4a10"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_init</span></code><span class="sig-paren">(</span><span class="pre">void</span><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_init" title="Permalink to this definition"></a><br /></dt>
<dd><p>Initializes all flash devices in the system. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success; SYS_EIO on flash driver error. </p>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_flash_write_protect">
<span class="target" id="group___h_a_l_flash_1ga75ac8e02486cc9ad5671a723652316fb"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_flash_write_protect</span></code><span class="sig-paren">(</span><span class="pre">uint8_t</span> <em><span class="pre">id</span></em>, <span class="pre">uint8_t</span> <em><span class="pre">protect</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_flash_write_protect" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set or clears write protection. </p>
<p>This function allows to disable write to the device if for some reason (i.e. low power state) writes could result in data corruption.</p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>SYS_EINVAL - if flash id is not valid SYS_OK - on success </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">id</span></code>: The ID of the flash </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">protect</span></code>: 1 - disable writes 0 - enable writes</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="hal_flash_int.html" class="btn btn-neutral float-right" title="hal_flash_int" accesskey="n">Next: hal_flash_int <span class="fa fa-arrow-circle-right"></span></a>
<a href="../hal_i2c/hal_i2c.html" class="btn btn-neutral" title="I2C" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: I2C</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<img src="../../../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt project logo are either
registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
</small>
<a href="">
<img src="../../../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../../../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../../../../_static/js/affix.js"></script>
<script type="text/javascript" src="../../../../_static/js/main.js"></script>
</body>
</html>