blob: 79b82d0840dc917c44daf675eadbc8a6e20eac10 [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>Newtron Flash Filesystem (nffs) &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="File System Abstraction" href="fs.html"/>
<link rel="next" title="The FAT File System" href="fatfs.html"/>
<link rel="prev" title="File System Abstraction" href="fs.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="fs.html">File System Abstraction</a> /
Newtron Flash Filesystem (nffs)
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-core/edit/master/docs/os/modules/fs/nffs.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"><a class="reference internal" href="../hal/hal.html">Hardware Abstraction</a></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 current"><a class="reference internal" href="fs.html">File System</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">Newtron Flash Filesystem (nffs)</a></li>
<li class="toctree-l3"><a class="reference internal" href="fatfs.html">The FAT File System</a></li>
<li class="toctree-l3"><a class="reference internal" href="otherfs.html">Other File Systems</a></li>
<li class="toctree-l3"><a class="reference internal" href="fs_add.html">Adding a new file system</a></li>
</ul>
</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="newtron-flash-filesystem-nffs">
<h1>Newtron Flash Filesystem (nffs)<a class="headerlink" href="#newtron-flash-filesystem-nffs" title="Permalink to this headline"></a></h1>
<p>Mynewt includes the Newtron Flash File System (nffs). This file system
is designed with two priorities that makes it suitable for embedded use:</p>
<ul class="simple">
<li><p>Minimal RAM usage</p></li>
<li><p>Reliability</p></li>
</ul>
<p>Mynewt also provides an abstraction layer API (fs) to allow you to swap
out nffs with a different file system of your choice.</p>
<div class="section" id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
<div class="section" id="areas">
<h3>Areas<a class="headerlink" href="#areas" title="Permalink to this headline"></a></h3>
<p>At the top level, an nffs disk is partitioned into <em>areas</em>. An area is a
region of disk with the following properties:</p>
<ol class="arabic simple">
<li><p>An area can be fully erased without affecting any other areas.</p></li>
<li><p>Writing to one area does not restrict writes to other areas.</p></li>
</ol>
<p><strong>Regarding property 1:</strong> Generally, flash hardware divides its memory
space into “blocks.” When erasing flash, entire blocks must be erased in
a single operation; partial erases are not possible.</p>
<p><strong>Regarding property 2:</strong> Furthermore, some flash hardware imposes a
restriction with regards to writes: writes within a block must be
strictly sequential. For example, if you wish to write to the first 16
bytes of a block, you must write bytes 1 through 15 before writing byte
16. This restriction only applies at the block level; writes to one
block have no effect on what parts of other blocks can be written.</p>
<p>Thus, each area must comprise a discrete number of blocks.</p>
</div>
<div class="section" id="initialization">
<h3>Initialization<a class="headerlink" href="#initialization" title="Permalink to this headline"></a></h3>
<p>As part of overall system initialization, mynewt re-initialized the
filesystem as follows:</p>
<ol class="arabic simple">
<li><p>Restores an existing file system via detection.</p></li>
<li><p>Creates a new file system via formatting.</p></li>
</ol>
<p>A typical initialization sequence is the following:</p>
<ol class="arabic simple">
<li><p>Detect an nffs file system in a specific region of flash.</p></li>
<li><p>If no file system was detected, if configured to do so, format a new
file system in the same flash region.</p></li>
</ol>
<p>Note that in the latter case, the behavior is controlled with a variable
in the syscfg.yml file. If NFFS_DETECT_FAIL is set to 1, the system
ignores NFFS filesystem detection issues, but unless a new filesystem is
formatted manually, all filesystem access will fail. If
NFFS_DETECT_FAIL is set to 2, the system will format a new filesystem
- note however this effectively deletes all existing data in the NFFS
flash areas.</p>
<p>Both methods require the user to describe how the flash memory should be
divided into nffs areas. This is accomplished with an array of <a class="reference external" href="nffs_area_desc.html">struct
nffs_area_desc</a> configured as part of the BSP
configureation.</p>
<p>After nffs has been initialized, the application can access the file
system via the <a class="reference external" href="../fs/fs.html">file system abstraction layer</a>.</p>
</div>
</div>
<div class="section" id="data-structures">
<h2>Data Structures<a class="headerlink" href="#data-structures" title="Permalink to this headline"></a></h2>
<p>The <code class="docutils literal notranslate"><span class="pre">fs/nffs</span></code> package exposes the following data structures:</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 57%" />
<col style="width: 43%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Struct</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><a class="reference external" href="nffs_area_desc.html">struct nffs_area_desc</a></p></td>
<td><p>Descriptor for a single nffs area.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference external" href="nffs_config.html">struct nffs_config</a></p></td>
<td><p>Configuration struct for nffs.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="miscellaneous-measures">
<h2>Miscellaneous measures<a class="headerlink" href="#miscellaneous-measures" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>RAM usage:</p>
<ul>
<li><p>24 bytes per inode</p></li>
<li><p>12 bytes per data block</p></li>
<li><p>36 bytes per inode cache entry</p></li>
<li><p>32 bytes per data block cache entry</p></li>
</ul>
</li>
<li><p>Maximum filename size: 256 characters (no null terminator required)</p></li>
<li><p>Disallowed filename characters: <code class="docutils literal notranslate"><span class="pre">/</span></code> and <code class="docutils literal notranslate"><span class="pre">\0</span></code></p></li>
</ul>
</div>
<div class="section" id="internals">
<h2>Internals<a class="headerlink" href="#internals" title="Permalink to this headline"></a></h2>
<p>nffs implementation details can be found here:</p>
<ul class="simple">
<li><p><a class="reference external" href="nffs_internals.html">nffs_internals</a></p></li>
</ul>
</div>
<div class="section" id="future-enhancements">
<h2>Future enhancements<a class="headerlink" href="#future-enhancements" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Error correction.</p></li>
<li><p>Encryption.</p></li>
<li><p>Compression.</p></li>
</ul>
</div>
<div class="section" id="api">
<h2>API<a class="headerlink" href="#api" title="Permalink to this headline"></a></h2>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-defines">Defines</p>
<dl class="c macro">
<dt id="c.NFFS_FILENAME_MAX_LEN">
<span class="target" id="nffs_8h_1a7165a9d8ddf806efd075dc411038f404"></span><code class="sig-name descname"><span class="pre">NFFS_FILENAME_MAX_LEN</span></code><a class="headerlink" href="#c.NFFS_FILENAME_MAX_LEN" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.NFFS_MAX_AREAS">
<span class="target" id="nffs_8h_1ada177c73e8555570a99b2066ec16321e"></span><code class="sig-name descname"><span class="pre">NFFS_MAX_AREAS</span></code><a class="headerlink" href="#c.NFFS_MAX_AREAS" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-functions">Functions</p>
<dl class="c function">
<dt id="c.nffs_init">
<span class="target" id="nffs_8h_1a037daa1834f8b5487e48950a4e6628fa"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">nffs_init</span></code><span class="sig-paren">(</span><span class="pre">void</span><span class="sig-paren">)</span><a class="headerlink" href="#c.nffs_init" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.nffs_detect">
<span class="target" id="nffs_8h_1a83ae04c9725939fa14c1a2b64504fea3"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">nffs_detect</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.nffs_area_desc" title="nffs_area_desc"><span class="pre">nffs_area_desc</span></a> <span class="pre">*</span><em><span class="pre">area_descs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.nffs_detect" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.nffs_format">
<span class="target" id="nffs_8h_1a412bbdde1b8296c03a0e8b3bf597fbb5"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">nffs_format</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.nffs_area_desc" title="nffs_area_desc"><span class="pre">nffs_area_desc</span></a> <span class="pre">*</span><em><span class="pre">area_descs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.nffs_format" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.nffs_misc_desc_from_flash_area">
<span class="target" id="nffs_8h_1a165f1a37a4083ae95187016abadea162"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">nffs_misc_desc_from_flash_area</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">idx</span></em>, <span class="pre">int</span> <span class="pre">*</span><em><span class="pre">cnt</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.nffs_area_desc" title="nffs_area_desc"><span class="pre">nffs_area_desc</span></a> <span class="pre">*</span><em><span class="pre">nad</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.nffs_misc_desc_from_flash_area" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-variables">Variables</p>
<dl class="c var">
<dt id="c.nffs_config">
<span class="target" id="nffs_8h_1a1a16b761c50a83c25ffd465d558d6bb2"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.nffs_config" title="nffs_config"><span class="pre">nffs_config</span></a> <code class="sig-name descname"><span class="pre">nffs_config</span></code><a class="headerlink" href="#c.nffs_config" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
</div>
<dl class="c struct">
<dt>
<span class="target" id="structnffs__config"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">nffs_config</span></code><br /></dt>
<dd><em>#include &lt;nffs.h&gt;</em><div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-members">Public Members</p>
<dl class="c var">
<dt id="c.nffs_config.nc_num_inodes">
<span class="target" id="structnffs__config_1a4479129030847a79d4570022f84dff4b"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">nc_num_inodes</span></code><a class="headerlink" href="#c.nffs_config.nc_num_inodes" title="Permalink to this definition"></a><br /></dt>
<dd><p>Maximum number of inodes; default=1024. </p>
</dd></dl>
<dl class="c var">
<dt id="c.nffs_config.nc_num_blocks">
<span class="target" id="structnffs__config_1a36394cea7be3a00b19dd3a25bc3638b1"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">nc_num_blocks</span></code><a class="headerlink" href="#c.nffs_config.nc_num_blocks" title="Permalink to this definition"></a><br /></dt>
<dd><p>Maximum number of data blocks; default=4096. </p>
</dd></dl>
<dl class="c var">
<dt id="c.nffs_config.nc_num_files">
<span class="target" id="structnffs__config_1a73eb5761e5200380305c807e18d7db3c"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">nc_num_files</span></code><a class="headerlink" href="#c.nffs_config.nc_num_files" title="Permalink to this definition"></a><br /></dt>
<dd><p>Maximum number of open files; default=4. </p>
</dd></dl>
<dl class="c var">
<dt id="c.nffs_config.nc_num_dirs">
<span class="target" id="structnffs__config_1ad82c4b704cae2cfb8bdbce7f26f685e9"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">nc_num_dirs</span></code><a class="headerlink" href="#c.nffs_config.nc_num_dirs" title="Permalink to this definition"></a><br /></dt>
<dd><p>Maximum number of open directories; default=4. </p>
</dd></dl>
<dl class="c var">
<dt id="c.nffs_config.nc_num_cache_inodes">
<span class="target" id="structnffs__config_1a4178d3a71edc6cdf7f8a53f5a7a8406d"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">nc_num_cache_inodes</span></code><a class="headerlink" href="#c.nffs_config.nc_num_cache_inodes" title="Permalink to this definition"></a><br /></dt>
<dd><p>Inode cache size; default=4. </p>
</dd></dl>
<dl class="c var">
<dt id="c.nffs_config.nc_num_cache_blocks">
<span class="target" id="structnffs__config_1aa9a848e68cb85d4a3c4270262004ce1f"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">nc_num_cache_blocks</span></code><a class="headerlink" href="#c.nffs_config.nc_num_cache_blocks" title="Permalink to this definition"></a><br /></dt>
<dd><p>Data block cache size; default=64. </p>
</dd></dl>
</div>
</dd></dl>
<dl class="c struct">
<dt id="c.nffs_area_desc">
<span class="target" id="structnffs__area__desc"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">nffs_area_desc</span></code><a class="headerlink" href="#c.nffs_area_desc" title="Permalink to this definition"></a><br /></dt>
<dd><em>#include &lt;nffs.h&gt;</em><div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-members">Public Members</p>
<dl class="c var">
<dt id="c.nffs_area_desc.nad_offset">
<span class="target" id="structnffs__area__desc_1a18cba47a9191dc2353c48392081ecc0d"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">nad_offset</span></code><a class="headerlink" href="#c.nffs_area_desc.nad_offset" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.nffs_area_desc.nad_length">
<span class="target" id="structnffs__area__desc_1ac69d607a6a4681fd146af743dfa6f90c"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">nad_length</span></code><a class="headerlink" href="#c.nffs_area_desc.nad_length" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.nffs_area_desc.nad_flash_id">
<span class="target" id="structnffs__area__desc_1a6e5d691742f2988b24cf999b84bc55f7"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">nad_flash_id</span></code><a class="headerlink" href="#c.nffs_area_desc.nad_flash_id" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
</div>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="fatfs.html" class="btn btn-neutral float-right" title="The FAT File System" accesskey="n">Next: The FAT File System <span class="fa fa-arrow-circle-right"></span></a>
<a href="fs.html" class="btn btn-neutral" title="File System Abstraction" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: File System Abstraction</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>