O:31:"Drupal\Core\Render\HtmlResponse":8:{s:7:"headers";O:50:"Symfony\Component\HttpFoundation\ResponseHeaderBag":5:{s:23:"*computedCacheControl";a:2:{s:7:"max-age";s:3:"300";s:6:"public";b:1;}s:10:"*cookies";a:0:{}s:14:"*headerNames";a:14:{s:12:"content-type";s:12:"Content-Type";s:13:"cache-control";s:13:"Cache-Control";s:4:"date";s:4:"Date";s:22:"x-drupal-dynamic-cache";s:22:"X-Drupal-Dynamic-Cache";s:4:"link";s:4:"Link";s:15:"x-ua-compatible";s:15:"X-UA-Compatible";s:16:"content-language";s:16:"Content-language";s:22:"x-content-type-options";s:22:"X-Content-Type-Options";s:15:"x-frame-options";s:15:"X-Frame-Options";s:7:"expires";s:7:"Expires";s:13:"last-modified";s:13:"Last-Modified";s:4:"etag";s:4:"ETag";s:4:"vary";s:4:"Vary";s:11:"x-generator";s:11:"X-Generator";}s:10:"*headers";a:14:{s:12:"content-type";a:1:{i:0;s:24:"text/html; charset=UTF-8";}s:13:"cache-control";a:1:{i:0;s:19:"max-age=300, public";}s:4:"date";a:1:{i:0;s:29:"Tue, 14 Nov 2017 13:39:35 GMT";}s:22:"x-drupal-dynamic-cache";a:1:{i:0;s:4:"MISS";}s:4:"link";a:6:{i:0;s:48:"</archive/jffs2-and-nand-study>; rel="canonical"";i:1;s:27:"</node/41>; rel="shortlink"";i:2;s:47:"</archive/jffs2-and-nand-study>; rel="revision"";i:3;s:108:"</sites/default/files/css/css_YGKHk3qOgVcGqV_6s_kZUGJkGYQEouHb462Ja18qfRA.css?ozekku>; rel=preload; as=style";i:4;s:108:"</sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ozekku>; rel=preload; as=style";i:5;s:99:"</sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js>; rel=preload; as=script";}s:15:"x-ua-compatible";a:1:{i:0;s:7:"IE=edge";}s:16:"content-language";a:1:{i:0;s:2:"en";}s:22:"x-content-type-options";a:1:{i:0;s:7:"nosniff";}s:15:"x-frame-options";a:1:{i:0;s:10:"SAMEORIGIN";}s:7:"expires";a:1:{i:0;s:29:"Sun, 19 Nov 1978 05:00:00 GMT";}s:13:"last-modified";a:1:{i:0;s:29:"Tue, 14 Nov 2017 13:39:35 GMT";}s:4:"etag";a:1:{i:0;s:12:""1510666775"";}s:4:"vary";a:1:{i:0;s:6:"Cookie";}s:11:"x-generator";a:1:{i:0;s:33:"Drupal 8 (https://www.drupal.org)";}}s:15:"*cacheControl";a:2:{s:7:"max-age";s:3:"300";s:6:"public";b:1;}}s:10:"*content";s:22723:"<!DOCTYPE html>
<html  lang="en" dir="ltr" prefix="content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# ">
  <head>
    <meta charset="utf-8" />
<meta name="title" content="JFFS2 and NAND study | Yaffs - A Flash File System for embedded use" />
<meta name="news_keywords" content="Flash File System" />
<meta name="description" content="Discussion of the characteristics of NAND and NOR flash and how those interact with JFFS2 to produce significant boot-time delays and high RAM consumption, especially with large flash chips." />
<meta name="abstract" content="Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One." />
<meta name="keywords" content="flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs" />
<meta name="Generator" content="Drupal 8 (https://www.drupal.org)" />
<meta name="MobileOptimized" content="width" />
<meta name="HandheldFriendly" content="true" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css" media="all" />
<link rel="stylesheet" href="https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css" media="all" />
<link rel="stylesheet" href="https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css" media="all" />
<link rel="stylesheet" href="https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css" media="all" />
<link rel="stylesheet" href="https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css" media="all" />
<link rel="stylesheet" href="https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css" media="all" />
<link rel="stylesheet" href="https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css" media="all" />
<link rel="stylesheet" href="https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css" media="all" />
<link rel="shortcut icon" href="/sites/default/files/yaffs_favicon.png" type="image/png" />
<link rel="canonical" href="/archive/jffs2-and-nand-study" />
<link rel="shortlink" href="/node/41" />
<link rel="revision" href="/archive/jffs2-and-nand-study" />

    <title>JFFS2 and NAND study | Yaffs - A Flash File System for embedded use</title>
    <link rel="stylesheet" href="/sites/default/files/css/css_YGKHk3qOgVcGqV_6s_kZUGJkGYQEouHb462Ja18qfRA.css?ozekku" media="all" />
<link rel="stylesheet" href="/sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ozekku" media="all" />

    
<!--[if lte IE 8]>
<script src="/sites/default/files/js/js_VtafjXmRvoUgAzqzYTA3Wrjkx9wcWhjP0G4ZnnqRamA.js"></script>
<![endif]-->

  </head>
  <body class="fontyourface path-node page-node-type-page navbar-is-fixed-top has-glyphicons">
    <a href="#main-content" class="visually-hidden focusable skip-link">
      Skip to main content
    </a>
    <div style="background-color: ; color: " id="environment-indicator">
  
    </div>

              <header class="navbar navbar-default navbar-fixed-top" id="navbar" role="banner">
              <div class="container">
            <div class="navbar-header">
          <div class="region region-navigation">
          <a class="logo navbar-btn pull-left" href="/" title="Home" rel="home">
      <img src="/themes/custom/yaffs/logo.svg" alt="Home" />
    </a>
      
  </div>

                          <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>

                    <div id="navbar-collapse" class="navbar-collapse collapse">
            <div class="region region-navigation-collapsible">
    <nav role="navigation" aria-labelledby="block-mainnavigation-menu" id="block-mainnavigation">
            <h2 class="sr-only" id="block-mainnavigation-menu">Main navigation</h2>

      
              <ul class="menu nav navbar-nav">
                            <li>
        <a href="/" data-drupal-link-system-path="&lt;front&gt;">Home</a>
                  </li>
                        <li>
        <a href="/support" title="Help for Yaffs" data-drupal-link-system-path="node/380">Support</a>
                  </li>
                        <li>
        <a href="/documents" data-drupal-link-system-path="documents">Documents</a>
                  </li>
                        <li>
        <a href="/get-yaffs" data-drupal-link-system-path="node/382">Download</a>
                  </li>
                        <li>
        <a href="/about-us" data-drupal-link-system-path="node/325">About us</a>
                  </li>
                        <li>
        <a href="/contact" data-drupal-link-system-path="node/73">Contact</a>
                  </li>
        </ul>
  


  </nav>
<div class="search-block-form block block-search block-search-form-block" data-drupal-selector="search-block-form" id="block-searchform" role="search">
  
    
      <form action="/search/node" method="get" id="search-block-form" accept-charset="UTF-8">
  <div class="form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group">
      <label for="edit-keys" class="control-label sr-only">Search</label>
  
  
  <div class="input-group"><input title="Enter the terms you wish to search for." data-drupal-selector="edit-keys" class="form-search form-control" placeholder="Search" type="search" id="edit-keys" name="keys" value="" size="15" maxlength="128" data-toggle="tooltip" /><span class="input-group-btn"><button type="submit" value="Search" class="button js-form-submit form-submit btn-primary btn icon-only" name=""><span class="sr-only">Search</span><span class="icon glyphicon glyphicon-search" aria-hidden="true"></span></button></span></div>

  
  
  </div>
<div class="form-actions form-group js-form-wrapper form-wrapper" data-drupal-selector="edit-actions" id="edit-actions"></div>

</form>

  </div>

  </div>

        </div>
                    </div>
          </header>
  
  <div role="main" class="main-container container js-quickedit-main-content">
    <div class="row">

            
            
                  <section class="col-sm-12">

                                      <div class="highlighted">  <div class="region region-highlighted">
      


  </div>
</div>
                  
                
                
                                      
                  
                          <a id="main-content"></a>
            <div class="region region-content">
        <h1 class="page-header"><span property="schema:name">JFFS2 and NAND study</span>
</h1>

  <article role="article" about="/archive/jffs2-and-nand-study" typeof="schema:WebPage" class="page full clearfix">

  
      <span property="schema:name" content="JFFS2 and NAND study" class="hidden"></span>


  
  <div class="content">
    
            <div property="schema:text" class="field field--name-body field--type-text-with-summary field--label-hidden field--item">
<p>For the purposes of this discussion, the term NAND will mean both AND and NAND type flash memories, both sharing similar properties from a system perspective.</p>
<h3>A bit of history -</h3>
<p>History on my perspective, not the history of JFFS2.</p>
<p>&nbsp;</p>
<p>Some years ago I wrote a flash file system for Trimble. Trimble patented this system. This FFS runs on NOR flash and uses a concepts very similar to JFFS to overcome problems associated with Flash Translation Layers, FTLs and flash. This FFS was rigorously tested for block failure, stress tested in various ways and deliberately crashed with an emulator at critical stages to attempt to damage data integrity. The FFS held up to all this.</p>
<p>Thus, when looking at JFFS2 I can immediately understand why certain things are being done and various benefits of this approach over FTLs.</p>
<p>At first I thought that using an FTL would be better than JFFS2 for NAND because NAND has a different set of constraints. After a bit of analysis, I came around to thinking that using JFFS2 would still be better than an FTL mainly because JFFS2 dispenses with the need for a logical to physical translation layer.</p>
<p>&nbsp;</p>
<h3>NOR and NAND</h3>
<p>The following table highlights some of the important properties of NOR and NAND flash. This table holds true for most devices, though there are some odd-ball devices out there.</p>
<p>&nbsp;</p>
<table border="1" cellpadding="1" style="border-spacing: 0px; width: 568px;">
<tbody>
 <tr valign="top">
  <td style="width: 281px;">
  <p><strong>NOR</strong></p>
   </td>
  <td style="width: 281px;">
  <p><strong>NAND</strong></p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Cost $HIGHER</p>
   </td>
  <td style="width: 281px;">
  <p>Cost LOWER</p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Low density (approx 8MB max device size)</p>
   </td>
  <td style="width: 281px;">
  <p>Higher density (approx 256MB max device size)</p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Linear random access:</p>
  <ul>
   <li>
   <p>Like RAM</p>
    </li>
   <li>
   <p>Can be used for XIP</p>
    </li>
  </ul>
   </td>
  <td style="width: 281px;">
  <p>Sector read/write:</p>
  <ul>
   <li>
   <p>Almost like a disk.</p>
    </li>
   <li>
   <p>Can't be used for XIP</p>
    </li>
  </ul>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Structured as erasable blocks of 8kB to 128kB typical.</p>
   </td>
  <td style="width: 281px;">
  <p>Structured as erasable blocks of 32x512-byte pages. Each page has 16-bytes of extra management data.</p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Endurance 100k to 1M erasures</p>
   </td>
  <td style="width: 281px;">
  <p>Endurance 100k to 1M erasures</p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Erase time 1second/erasable block</p>
   </td>
  <td style="width: 281px;">
  <p>Erase time 2ms</p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Designed as ROM replacements</p>
   </td>
  <td style="width: 281px;">
  <p>Designed as mass storage replacements</p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Byte-by-byte programming allowing single-bit modification. Any single bit can be modified from a 1 to a 0 by programming that byte. However, the only way to modify a 0 to a 1 is to erase the entire erasable block.</p>
   </td>
  <td style="width: 281px;">
  <p>Page or partial-page programming. A page may be programmed a maximum number of times. After that number of times, the erasable block must be erased to allow further programming. Write operations can only modify 1s to 0s. Changing 0s to 1s requires an erasure.</p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>Random access programming.</p>
   </td>
  <td style="width: 281px;">
  <p>Pages must be written sequentially within a block.</p>
   </td>
 </tr>
 <tr valign="top">
  <td style="width: 281px;">
  <p>No bad blocks when delivered, but the devices wear out. Thus file systems should be fault tolerant.</p>
   </td>
  <td style="width: 281px;">
  <p>Bad blocks are expected when the devices are delivered. Further degradation is expected with use. Thus fault tolerance is an absolute necessity.</p>
   </td>
 </tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>It is important to note the various differences between NOR and NAND flash, because these are material in choosing the appropriate file systems for each. In particular:</p>
<ul>
<li>
<p>The erasure times are very different. This impacts on the selection of appropriate garbage collection and erasure strategies. NOR's 1 second erasure time is significant and needs to be considered; NAND's 2msec erasure time is virtually insignificant.</p>
 </li>
</ul>
<ul>
<li>
<p>The programming access restrictions that apply to NAND do not apply to NOR.</p>
 </li>
<li>
<p>Errors are far more likely in NAND devices, therefore error detection and correction is highly desirable.</p>
 </li>
<li>
<p>NAND flash is arranged in pages/sectors of 512b and is inherently block structured.</p>
 </li>
</ul>
<p>Both families of flash technology have significant usage restrictions which require special consideration when using the devices for file storage:</p>
<ul>
<li>
<p>All flash memory blocks can only endure a limited number of erasure cycles. Some wear levelling strategy is required to prevent often-used sectors wearing out faster.</p>
 </li>
<li>
<p>Sectors, are smaller than an erasable block. Thus, some garbage collection strategy is required to reclaim deleted/dirty sectors. To accomplish this, the "good data" must be copied off the selected block so that the whole block can be erased without losing data.</p>
 </li>
<li>
<p>If a part of a file needs to be overwritten, it is a limitation of flash memory that the new data cannot just overwrite the data at the same physical location. Instead the data must be written at a new location. Thus, some sort of logical to physical mapping layer (ie. FTL) or alternative data storage approach is required (eg. JFFS2). Such logical to physical decoupling is also required to perform garbage collection.</p>
 </li>
</ul>
<p>&nbsp;</p>
<h3>Flash file systems in general</h3>
<p>Flash file systems can essentially be implemented in two possible ways:</p>
<ul>
<li>
<p>Custom-built file system. ie. the whole file system is designed so as to operate with flash memory. An example of this is JFFS2 or Microsoft FFS2.</p>
 </li>
<li>
<p>Use a standard file system with a custom block driver (ie Flash Translation Layer - FTL).</p>
 </li>
</ul>
<p>Each of these approaches have their pros and cons. FTLs are particularly suited to situations where the file system is pre-ordained; a custom file system is able to be more "flash friendly".</p>
<h3>An appraisal of the JFFS2 file system</h3>
<p>JFFS, and JFFS2, achieve the logical decoupling between logical file positions and physical memory by using journaling. For this to work, the entire file system must be designed to support journaling - as appropriate to flash memory. This is not excessively restrictive with non-removable media and embedded systems since there is no need to conform to a legacy file system layout.</p>
<p>JFFS2 is designed to support NOR flash, but is currently not suited to NAND flash since it does not handle bad blocks. If this deficiency was addressed would it be a better choice for NAND than an FTL? Probably not directly, some other tweaks would be needed.</p>
<p>Journaling is particularly useful: Garbage collection, bad block handling and the restrictions which prevent flash sectors being overwritten mean that data in flash file systems is forever being moved around. For FTLs this means storing logical to physical mappings. Journaling neatly sidesteps this overhead.</p>
<p>One of the most thorny issues with flash file systems is that there are many patents covering both FTL-like block drivers and various approaches to custom file systems.</p>
<p>These patents are particularly restrictive in FTL-like block drivers (especially the M-Systems patents). JFFS2 does not violate any patents I am aware of, but it probably comes quite close to some - particularly the Trimble one. Thus it is highly beneficial to have a GPL'ed system that can be extended.</p>
<h3>Work needed</h3>
<p>The following effort is required to make JFFS2 work with NAND:</p>
<ul>
<li>
<p>New MTDs for NAND flash. A new interface is probably required for NAND since many of the functions for NOR make no sense on NAND.</p>
 </li>
</ul>
<ul>
<li>
<p>Bad block handling. This could be handled in a NOR-specific layer, although it should really be generically supported since NOR can fail too.</p>
 </li>
<li>
<p>ECC for data security. Code available from Samsung www. This can be handled as part of the write and read. When a journaling node is written, it should be verified. If the data cannot be retrieved, then a new node is created.</p>
 </li>
<li>
<p>Fixed size journaling nodes (since NAND is page oriented with limited writes per page). This might make compression challenging - maybe compression can't be used with NAND? Anyway, fixed-size journaling nodes probably reduce fragmentation too (since there's an integer number of these per erasable block).</p>
 </li>
</ul>
<p>&nbsp;</p>
<p>The following are possible improvements:</p>
<ul>
<li>
<p>Tuning garbage collection/erasure strategies to suite NAND (eg. NAND erasure time is much faster). Using fixed-size nodes will probably strip out a chunk of code too.</p>
 </li>
<li>
<p>Attempting to use the spare 16 bytes per page for journalling tags (if there's a useful amount of space left after ECC and bad block management).</p>
 </li>
</ul>
<p>Thus, my preliminary suggestion would be to add a NAND sub-system to JFFS2. This subsystem would use the same journaling file system core. Fixing the size of journaling nodes to "pages" of 512 bytes quite likely simplifies the interfaces, node management and garbage collection.</p>
<p>Error handling would fit within the NAND subsystem. Since NOR fails too, bad block handling is really required for NOR too. Whether the same management is appropriate for both is TBD. ECC is only required for NAND.</p>
<p>&nbsp;</p>
<p><a name="_1065327724" id="_1065327724"></a> <a name="_1065291949" id="_1065291949"><img border="0" height="190" src="/sites/yaffs.net/files/sv9379380.gif" width="227" alt="image" /></a></p>
<p><a name="_1065291949"></a></p>
<h3><a name="_1065291949">References</a></h3>
<p><a name="_1065291949">Samsung and Toshiba NAND part data sheets and www. Samsung in particular has useful applications notes and code.</a></p>
<p><a name="_1065291949">JFFS2 presentation materials. http://sources.redhat.com/jffs2/</a></p>
</div>
      
  </div>

</article>


  </div>

              </section>

                </div>
  </div>

      <footer class="footer container" role="contentinfo">
        <div class="primary_footer row">
            <div class="col-sm-3">
                  <div class="region region-footer-col1">
    <section id="block-yaffs-block-6" class="block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix">
  
    

      
            <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item">
<ul class="fa-ul">
<li><i class="fa-li fa fa-phone"></i>+44 (0)1223 811679</li>
<li><i class="fa-li fa fa-envelope"></i><a href="denied:mailto:info@aleph1.co.uk?Subject=Website contact" target="_top">info@aleph1.co.uk</a></li>
</ul>
</div>
      
  </section>


  </div>

            </div>
            <div class="col-sm-3">
                
            </div>
            <div class="col-sm-3">
                
            </div>
            <div class="col-sm-3">
                  <div class="region region-footer-col4">
    <section id="block-footerlegal" class="block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix">
  
    

      
            <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item">
<p class="text-align-right">&nbsp;<a href="/legal">Legal &amp; Cookies</a></p>
</div>
      
  </section>

<section id="block-cookieinfo" class="block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix">
  
    

      
            <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item">
<p class="text-align-justify"><br />
We use <a href="/legal">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>
</div>
      
  </section>


  </div>

            </div>
        </div>
        <div class = "secondary_footer row">
            <div class="col-sm-12">
                <div class="region region-footer">
    <nav role="navigation" aria-labelledby="block-yaffs-account-menu-menu" id="block-yaffs-account-menu">
            <h2 class="sr-only" id="block-yaffs-account-menu-menu">User account menu</h2>

      
              <ul class="menu nav navbar-nav navbar-right">
                            <li>
        <a href="/user/login" data-drupal-link-system-path="user/login">Log in</a>
                  </li>
        </ul>
  


  </nav>

  </div>

            </div>
        </div>
    </footer>
  
    
    <script type="application/json" data-drupal-selector="drupal-settings-json">{"path":{"baseUrl":"\/","scriptPath":null,"pathPrefix":"","currentPath":"node\/41","currentPathIsAdmin":false,"isFront":false,"currentLanguage":"en"},"pluralDelimiter":"\u0003","bootstrap":{"forms_has_error_value_toggle":1,"modal_animation":1,"modal_backdrop":"true","modal_keyboard":1,"modal_show":1,"modal_size":"","popover_enabled":1,"popover_animation":1,"popover_container":"body","popover_content":"","popover_delay":"0","popover_html":0,"popover_placement":"right","popover_selector":"","popover_title":"","popover_trigger":"click","popover_trigger_autoclose":1,"tooltip_enabled":1,"tooltip_animation":1,"tooltip_container":"body","tooltip_delay":"0","tooltip_html":0,"tooltip_placement":"auto left","tooltip_selector":"","tooltip_trigger":"hover"},"ajaxTrustedUrl":{"\/search\/node":true},"user":{"uid":0,"permissionsHash":"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01"}}</script>
<script src="/sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js"></script>

  </body>
</html>
";s:10:"*version";s:3:"1.0";s:13:"*statusCode";i:200;s:13:"*statusText";s:2:"OK";s:10:"*charset";N;s:23:"*cacheabilityMetadata";O:35:"Drupal\Core\Cache\CacheableMetadata":3:{s:16:"*cacheContexts";a:18:{i:0;s:28:"languages:language_interface";i:1;s:5:"route";i:2;s:32:"route.menu_active_trails:account";i:3;s:29:"route.menu_active_trails:main";i:4;s:30:"route.menu_active_trails:tools";i:5;s:5:"theme";i:6;s:8:"timezone";i:7;s:3:"url";i:8;s:8:"url.path";i:9;s:17:"url.path.is_front";i:10;s:15:"url.path.parent";i:11;s:30:"url.query_args:_wrapper_format";i:12;s:4:"user";i:13;s:21:"user.node_grants:view";i:14;s:16:"user.permissions";i:15;s:10:"user.roles";i:16;s:20:"user.roles:anonymous";i:17;s:24:"user.roles:authenticated";}s:12:"*cacheTags";a:50:{i:0;s:16:"block_content:18";i:1;s:16:"block_content:23";i:2;s:15:"block_content:7";i:3;s:18:"block_content_view";i:4;s:10:"block_view";i:5;s:32:"config:block.block.choosingyaffs";i:6;s:29:"config:block.block.cookieinfo";i:7;s:32:"config:block.block.downloadyaffs";i:8;s:30:"config:block.block.footerlegal";i:9;s:39:"config:block.block.frontimagehighlight2";i:10;s:32:"config:block.block.frontpagehero";i:11;s:39:"config:block.block.frontpageprimeryaffs";i:12;s:33:"config:block.block.mainnavigation";i:13;s:35:"config:block.block.mainnavigation_2";i:14;s:29:"config:block.block.searchform";i:15;s:31:"config:block.block.sitebranding";i:16;s:66:"config:block.block.views_block__highlighted_yaffs_features_block_1";i:17;s:66:"config:block.block.views_block__yaffs_admin_recent_content_block_1";i:18;s:66:"config:block.block.views_block__yaffs_documents_highlights_block_1";i:19;s:56:"config:block.block.views_block__yaffs_user_logos_block_1";i:20;s:37:"config:block.block.yaffs_account_menu";i:21;s:33:"config:block.block.yaffs_block_10";i:22;s:32:"config:block.block.yaffs_block_5";i:23;s:32:"config:block.block.yaffs_block_6";i:24;s:32:"config:block.block.yaffs_block_8";i:25;s:32:"config:block.block.yaffs_block_9";i:26;s:36:"config:block.block.yaffs_breadcrumbs";i:27;s:32:"config:block.block.yaffs_content";i:28;s:29:"config:block.block.yaffs_help";i:29;s:36:"config:block.block.yaffs_local_tasks";i:30;s:33:"config:block.block.yaffs_messages";i:31;s:35:"config:block.block.yaffs_page_title";i:32;s:32:"config:block.block.yaffs_user_21";i:33;s:31:"config:block.block.yaffsinspace";i:34;s:17:"config:block_list";i:35;s:24:"config:color.theme.yaffs";i:36;s:30:"config:filter.format.full_html";i:37;s:29:"config:filter.format.raw_html";i:38;s:22:"config:search.settings";i:39;s:26:"config:system.menu.account";i:40;s:23:"config:system.menu.main";i:41;s:24:"config:system.menu.tools";i:42;s:18:"config:system.site";i:43;s:26:"config:user.role.anonymous";i:44;s:13:"http_response";i:45;s:7:"node:41";i:46;s:9:"node_view";i:47;s:8:"rendered";i:48;s:6:"user:0";i:49;s:6:"user:4";}s:14:"*cacheMaxAge";i:-1;}s:14:"*attachments";a:5:{s:7:"library";a:9:{i:0;s:14:"core/html5shiv";i:1;s:11:"system/base";i:2;s:15:"bootstrap/theme";i:3;s:20:"yaffs/global-styling";i:4;s:23:"yaffs/bootstrap-scripts";i:5;s:19:"yaffs/yaffs-helpers";i:6;s:17:"bootstrap/popover";i:7;s:17:"bootstrap/tooltip";i:8;s:50:"environment_indicator/drupal.environment_indicator";}s:9:"html_head";a:22:{i:0;a:2:{i:0;a:2:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:5:"title";s:7:"content";s:67:"JFFS2 and NAND study | Yaffs - A Flash File System for embedded use";}}i:1;s:5:"title";}i:1;a:2:{i:0;a:2:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:13:"news_keywords";s:7:"content";s:17:"Flash File System";}}i:1;s:13:"news_keywords";}i:2;a:2:{i:0;a:2:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:11:"description";s:7:"content";s:190:"Discussion of the characteristics of NAND and NOR flash and how those interact with JFFS2 to produce significant boot-time delays and high RAM consumption, especially with large flash chips.";}}i:1;s:11:"description";}i:3;a:2:{i:0;a:2:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:8:"abstract";s:7:"content";s:352:"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.";}}i:1;s:8:"abstract";}i:4;a:2:{i:0;a:2:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:8:"keywords";s:7:"content";s:82:"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs";}}i:1;s:8:"keywords";}i:5;a:2:{i:0;a:3:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:1:{s:7:"charset";s:5:"utf-8";}s:7:"#weight";i:-1000;}i:1;s:24:"system_meta_content_type";}i:6;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:9:"Generator";s:7:"content";s:33:"Drupal 8 (https://www.drupal.org)";}}i:1;s:21:"system_meta_generator";}i:7;a:2:{i:0;a:2:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:15:"MobileOptimized";s:7:"content";s:5:"width";}}i:1;s:15:"MobileOptimized";}i:8;a:2:{i:0;a:2:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:16:"HandheldFriendly";s:7:"content";s:4:"true";}}i:1;s:16:"HandheldFriendly";}i:9;a:2:{i:0;a:2:{s:4:"#tag";s:4:"meta";s:11:"#attributes";a:2:{s:4:"name";s:8:"viewport";s:7:"content";s:37:"width=device-width, initial-scale=1.0";}}i:1;s:8:"viewport";}i:10;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:10:"stylesheet";s:4:"href";s:125:"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css";s:5:"media";s:3:"all";}}i:1;s:21:"fontsquirrel-api-1151";}i:11;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:10:"stylesheet";s:4:"href";s:124:"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css";s:5:"media";s:3:"all";}}i:1;s:21:"fontsquirrel-api-1152";}i:12;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:10:"stylesheet";s:4:"href";s:122:"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css";s:5:"media";s:3:"all";}}i:1;s:21:"fontsquirrel-api-1153";}i:13;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:10:"stylesheet";s:4:"href";s:123:"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css";s:5:"media";s:3:"all";}}i:1;s:21:"fontsquirrel-api-1149";}i:14;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:10:"stylesheet";s:4:"href";s:129:"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css";s:5:"media";s:3:"all";}}i:1;s:21:"fontsquirrel-api-1150";}i:15;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:10:"stylesheet";s:4:"href";s:125:"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css";s:5:"media";s:3:"all";}}i:1;s:21:"fontsquirrel-api-1148";}i:16;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:10:"stylesheet";s:4:"href";s:126:"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css";s:5:"media";s:3:"all";}}i:1;s:21:"fontsquirrel-api-1147";}i:17;a:2:{i:0;a:3:{s:5:"#type";s:8:"html_tag";s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:10:"stylesheet";s:4:"href";s:128:"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css";s:5:"media";s:3:"all";}}i:1;s:21:"fontsquirrel-api-1154";}i:18;a:2:{i:0;a:2:{s:4:"#tag";s:4:"link";s:11:"#attributes";a:3:{s:3:"rel";s:13:"shortcut icon";s:4:"href";s:38:"/sites/default/files/yaffs_favicon.png";s:4:"type";s:9:"image/png";}}i:1;s:67:"html_head_link:shortcut icon:/sites/default/files/yaffs_favicon.png";}i:19;a:2:{i:0;a:2:{s:4:"#tag";s:4:"link";s:11:"#attributes";a:2:{s:3:"rel";s:9:"canonical";s:4:"href";s:29:"/archive/jffs2-and-nand-study";}}i:1;s:54:"html_head_link:canonical:/archive/jffs2-and-nand-study";}i:20;a:2:{i:0;a:2:{s:4:"#tag";s:4:"link";s:11:"#attributes";a:2:{s:3:"rel";s:9:"shortlink";s:4:"href";s:8:"/node/41";}}i:1;s:33:"html_head_link:shortlink:/node/41";}i:21;a:2:{i:0;a:2:{s:4:"#tag";s:4:"link";s:11:"#attributes";a:2:{s:3:"rel";s:8:"revision";s:4:"href";s:29:"/archive/jffs2-and-nand-study";}}i:1;s:53:"html_head_link:revision:/archive/jffs2-and-nand-study";}}s:12:"placeholders";a:0:{}s:14:"drupalSettings";a:5:{s:4:"path";a:7:{s:7:"baseUrl";s:1:"/";s:10:"scriptPath";N;s:10:"pathPrefix";s:0:"";s:11:"currentPath";s:7:"node/41";s:18:"currentPathIsAdmin";b:0;s:7:"isFront";b:0;s:15:"currentLanguage";s:2:"en";}s:15:"pluralDelimiter";s:1:"";s:9:"bootstrap";a:25:{s:28:"forms_has_error_value_toggle";i:1;s:15:"modal_animation";i:1;s:14:"modal_backdrop";s:4:"true";s:14:"modal_keyboard";i:1;s:10:"modal_show";i:1;s:10:"modal_size";s:0:"";s:15:"popover_enabled";i:1;s:17:"popover_animation";i:1;s:17:"popover_container";s:4:"body";s:15:"popover_content";s:0:"";s:13:"popover_delay";s:1:"0";s:12:"popover_html";i:0;s:17:"popover_placement";s:5:"right";s:16:"popover_selector";s:0:"";s:13:"popover_title";s:0:"";s:15:"popover_trigger";s:5:"click";s:25:"popover_trigger_autoclose";i:1;s:15:"tooltip_enabled";i:1;s:17:"tooltip_animation";i:1;s:17:"tooltip_container";s:4:"body";s:13:"tooltip_delay";s:1:"0";s:12:"tooltip_html";i:0;s:17:"tooltip_placement";s:9:"auto left";s:16:"tooltip_selector";s:0:"";s:15:"tooltip_trigger";s:5:"hover";}s:14:"ajaxTrustedUrl";a:1:{s:12:"/search/node";b:1;}s:4:"user";a:2:{s:3:"uid";i:0;s:15:"permissionsHash";s:64:"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01";}}s:11:"http_header";a:3:{i:0;a:3:{i:0;s:4:"Link";i:1;s:48:"</archive/jffs2-and-nand-study>; rel="canonical"";i:2;b:0;}i:1;a:3:{i:0;s:4:"Link";i:1;s:27:"</node/41>; rel="shortlink"";i:2;b:0;}i:2;a:3:{i:0;s:4:"Link";i:1;s:47:"</archive/jffs2-and-nand-study>; rel="revision"";i:2;b:0;}}}}