O:23:"Drupal\node\Entity\Node":25:{s:10:"in_preview";N;s:9:"*values";a:22:{s:3:"vid";a:1:{s:9:"x-default";s:3:"637";}s:8:"langcode";a:1:{s:9:"x-default";s:3:"und";}s:18:"revision_timestamp";a:1:{s:9:"x-default";s:10:"1500990045";}s:12:"revision_uid";a:1:{s:9:"x-default";s:1:"1";}s:12:"revision_log";a:1:{s:9:"x-default";N;}s:3:"nid";a:1:{s:9:"x-default";s:3:"466";}s:4:"type";a:1:{s:9:"x-default";s:5:"paper";}s:4:"uuid";a:1:{s:9:"x-default";s:36:"c75f1175-eb9e-4081-89ae-53bfad24a474";}s:17:"isDefaultRevision";a:1:{s:9:"x-default";s:1:"1";}s:6:"status";a:1:{s:9:"x-default";s:1:"1";}s:5:"title";a:1:{s:9:"x-default";s:46:"Considerations in Choosing a Flash File System";}s:3:"uid";a:1:{s:9:"x-default";s:1:"4";}s:7:"created";a:1:{s:9:"x-default";s:10:"1401281609";}s:7:"changed";a:1:{s:9:"x-default";s:10:"1500990045";}s:7:"promote";a:1:{s:9:"x-default";s:1:"1";}s:6:"sticky";a:1:{s:9:"x-default";s:1:"0";}s:29:"revision_translation_affected";a:1:{s:9:"x-default";N;}s:16:"default_langcode";a:1:{s:9:"x-default";s:1:"1";}s:4:"body";a:1:{s:9:"x-default";a:1:{i:0;a:3:{s:5:"value";s:26385:"	<p class="western">We have been developing flash file system for
	embedded systems since 1995. During that time, we have gained a
	wealth of knowledge and experience.</p>
	<p class="western">This document outlines some of the major issues
	that must be considered when selecting a Flash File system for
	embedded use. It also explains how using the Yaffs File System
	increases reliability, reduces risk and saves money.</p>

</p>
<h1 class="western" style="page-break-before: always">Introduction</h1>
<p class="western" align="left">As embedded system complexity
increases and flash storage prices decrease, we see more use of
embedded file systems to store data, and so data corruption and loss
has become an important cause of system failure.</p>
<p class="western" align="left">When Aleph One began the development
of Yaffs in late 2001, we built on experience in flash file system
design since 1995. This experience helped to identify the key factors
in making Yaffs a fast and robust flash file system now being widely
used around the world.</p>
<p class="western" align="left">Although it was originally developed
for Linux, Yaffs was designed to be highly portable. This has allowed
Yaffs to be ported to many different OSs (including Linux, BSD,
Windows CE) and numerous RTOSs (including VxWorks, eCos and pSOS).</p>
<p class="western" align="left">Yaffs is written in fully portable C
code and has been used on many different CPU architectures – both
little- and big-endian. These include ARM, x86 and PowerPC, soft
cores such as NIOS and Microblaze and even various DSP architectures.</p>
<p class="western" align="left">We believe that the Yaffs code base
has been used on more OS types and more CPU types than any other file
system code base.</p>
<p class="western" align="left">Since its introduction, Yaffs has
been used in hundreds of different products and hundreds of millions
of different devices in widely diverse application areas from mining
to aerospace and everything in between.</p>
<p class="western" align="left">Specific examples include:</p>
<ul>
	<li/>
<p class="western" align="left">communications (two-way radios
	and infrastructure, mobile phones, cell towers, modems, routers...)</p>
	<li/>
<p class="western" align="left">retail (point of sale,
	inventory control...)</p>
	<li/>
<p class="western" align="left">entertaiment (video cameras,
	TV sets, DVD players, set-top boxes...)</p>
	<li/>
<p class="western" align="left">sewing machines and office
	copiers</p>
	<li/>
<p class="western" align="left">industrial equipment (PLCs,
	machinery control...)</p>
	<li/>
<p class="western" align="left">construction/surveying
	equipment (theodolites, machinery control...)</p>
	<li/>
<p class="western" align="left">avionics and satellite
	equipment</p>
	<li/>
<p class="western" align="left">transport (bus, train and
	traffic-signal management/information systems...)</p>
	<li/>
<p class="western" align="left">and many more.</p>
</ul>
<p class="western" align="left"><br/>
<br/>

</p>
<p class="western" align="center"><i><b>You may be using Yaffs every
day without even realising it.</b></i></p>
<p class="western" align="center"><i><b>We have a gratifying number
of repeat customers for licences.</b></i></p>
<h1 class="western"><br/>
<br/>

</h1>
<h1 class="western" style="page-break-before: always">Do Embedded
Systems have different file system needs?</h1>
<p class="western">To answer this question, we really have to start
by asking a slightly different question:</p>
<p class="western" align="center"><i>How are embedded systems
different than regular computers?</i></p>
<p class="western" align="justify" style="font-style: normal">When a
customer buys a regular computer system, they go shopping for a
computer. They talk to the salesperson about Gigabytes, Megahertz and
operating systems. They treat it as a computer and expect it to
behave like a computer (including shutting it down properly and
occasionally having file system problems or needing upgrades).</p>
<p class="western" align="justify" style="font-style: normal">When
they buy a fancy sewing machine, it probably has an embedded file
system controlling it. The customer went shopping for a sewing
machine and bought a computer that they don't even know about. They
don't treat it like a computer, but like a sewing machine; they
certainly do not expect it to have file system problems.</p>
<h4 class="western">How people treat computers differently from
embedded systems</h4>
<table width="100%" cellpadding="4" cellspacing="0" style="page-break-inside: avoid">
	<col width="85*">
	<col width="85*">
	<col width="85*">
	<tr valign="top">
		<td width="33%" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt"><b>Issue</b></font></p>
		</td>
		<td width="33%" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt"><b>Computer</b></font></p>
		</td>
		<td width="33%" style="border: 1px solid #000000; padding: 0.1cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt"><b>Embedded
			system</b></font></p>
		</td>
	</tr>
	<tr valign="top">
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Shut
			down</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">User
			expects to do a clean shut down.</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">User
			just unplugs device.</font></p>
		</td>
	</tr>
	<tr valign="top">
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Reinstalling
			software</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Users
			expect to have to deal with corruption and reinstall software
			occasionally.</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Users
			do not expect to deal with upgrades or data loss or corruption.</font></p>
		</td>
	</tr>
	<tr valign="top">
		<td width="33%" height="11" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Software
			Upgrade Failure</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Annoying</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Can
			be devastating</font></p>
		</td>
	</tr>
	<tr valign="top">
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Attitude
			to data loss</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Annoying,
			but expected</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">System
			has failed.</font></p>
		</td>
	</tr>
	<tr valign="top">
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Cost
			of failure</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Relatively
			minor</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Can
			shut down factory or even cause injury/death.</font></p>
		</td>
	</tr>
	<tr valign="top">
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Delayed
			boot due to file system recovery</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">Annoying,
			but expected.</font></p>
		</td>
		<td width="33%" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm">
			<p class="western" align="left"><font size="2" style="font-size: 11pt">This
			is as bad as a failure.</font></p>
		</td>
	</tr>
</table>
<p class="western" align="left" style="font-style: normal"><br/>
<br/>

</p>
<p class="western" align="justify">So people have different attitudes
to computers and embedded systems. As a result, embedded systems need
to be designed differently from computers. That is particularly
important with reliability issues.</p>
<p class="western" align="center" style="margin-bottom: 0.01cm"><i><b>Data
corruption is a leading cause of embedded system failure, </b></i>
</p>
<p class="western" align="center" style="margin-bottom: 0.01cm"><i><b>product
returns and warranty costs.</b></i> 
</p>
<p class="western" align="center" style="margin-bottom: 0.01cm"><br/>
<br/>

</p>
<p class="western" align="justify">The differences outlined above
show some of the reasons why embedded systems must perform
differently to regular computers, particularly in the way data
storage is handled. These examples allow us to identify some very
important product-level criteria for embedded file systems:</p>
<ul>
	<li/>
<p class="western" align="left">High resilience against data
	corruption, particularly in the event of power loss.</p>
	<li/>
<p class="western" align="left">Prompt file system recovery
	after power loss - no excessive time penalty</p>
	<li/>
<p class="western" align="left">Simple data integrity model to
	ensure data is not compromised.</p>
</ul>
<p class="western" align="left">Of course we also want the embedded
file system to have some other very useful features:</p>
<ul>
	<li/>
<p class="western" align="left">High read/write performance
	with low latency.</p>
	<li/>
<p class="western" align="left">Familiar programming models to
	facilitate development.</p>
	<li/>
<p class="western" align="left">Proven track record to reduce
	risk.</p>
	<li/>
<p class="western" align="left">Full source code access to aid
	development.</p>
	<li/>
<p class="western" align="left">Portability to provide a
	future-proof solution for new products.</p>
</ul>
<p class="western" align="center"><i><b>Selecting an appropriate file
system is crucial to product success.</b></i></p>
<h1 class="western" style="page-break-before: always">Why does power
failure corrupt data?</h1>
<p class="western">Most power fail data loss in a File System is
caused through two mechanisms:</p>
<ul>
	<li/>
<p class="western">Corruption of allocation tables 
	</p>
	<li/>
<p class="western">Loss of cached data that was not yet
	written to the flash.</p>
</ul>
<h2 class="western">Corruption of allocation tables and similar
structures.</h2>
<p class="western">Most file systems have allocation tables, bitmaps
or similar structures which hold pointers showing which parts of the
file storage medium are being used and which parts of which file are
stored there. These tables are critical to looking up files and data
in the file system. If they are corrupted, then files and data become
corrupted. In the most dramatic cases, table corruption can destroy
the whole system.  
</p>
<p class="western">Some file systems make these tables more robust by
keeping two copies, or by using journaling (which keeps a short log
of changes, allowing the tables to be fixed up if the table changing
gets interrupted) but this causes extra writes to the media, making
the file system slower.</p>
<p class="western">These tables are typically updated many times
during writing any file, so there are multiple opportunities for the
tables to be corrupted or left in an inconsistent state due to a
power loss.</p>
<p class="western">If power is interrupted at a critical point, then
some restoration (such as Microsoft chkdsk or booting in <span style="font-style: normal">safe
mode</span>) is often required to try to restore the tables. This may
be automatic, but then system start-up is delayed.</p>
<p class="western">Yaffs is very different; it is a log structured
file system which writes tagged data to the flash, and does not store
allocation tables or such.</p>
<p class="western" align="center"><i><b>If it isn't even stored, it
can't be corrupted!</b></i></p>
<p class="western">This has three dramatic effects:</p>
<ul>
	<li/>
<p class="western">Yaffs has no tables, so is immune to these
	failure modes.</p>
	<li/>
<p class="western">There are no extra tables to be written, so
	Yaffs does not have to resort to caching to achieve good
	performance.</p>
	<li/>
<p class="western">Fewer flash writes means less flash wear,
	improving product life and reducing power consumption.</p>
</ul>
<p class="western">When a Yaffs file system is booted, the normal
boot up sequence takes care of building up system state. There is
thus no need for any special restoration code to be run. A boot up
after a power failure is not a special recovery condition, it is just
a normal boot up.</p>
<p class="western" align="center"><i><b>Yaffs does not have, or need,
special recovery handling.</b></i></p>
<h2 class="western" style="page-break-after: avoid"><font face="Liberation Sans, sans-serif"><i><b>Trade-off
in cached data</b></i></font></h2>
<p class="western"><font face="Liberation Sans, sans-serif"><font size="2" style="font-size: 11pt">File
systems tend to be inefficient in the way they write data.  Writing
just one file requires many changes to the allocation tables; writing
many files requires far more changes, often to those same tables. By
delaying those writes and holding data in RAM briefly the file system
can do fewer writes to achieve the same set of changes. This can
improve write speed, at a price.</font></font></p>
<p class="western"><font face="Liberation Sans, sans-serif"><font size="2" style="font-size: 11pt">Data
which has not been written but just cached in RAM is vulnerable while
it is there; it can all be lost if power fails, even including some
that the FS had apparently written already.</font></font></p>
<p class="western"><font face="Liberation Sans, sans-serif"><font size="2" style="font-size: 11pt">Most
file systems support functions to reduce this inefficiency and force
the cache to be written out, but this may take many seconds, leaving
a significant period of vulnerability, and delaying system
operations.  Excessive use of these functions to improve reliability
will typically impair write performance.</font></font></p>
<p class="western"><font face="Liberation Sans, sans-serif"><font size="2" style="font-size: 11pt">A
particularly serious example of critical data loss can occur if power
or communication fails during a firmware upgrade.  Such a failure
cripples the product, which must be returned for servicing.  Yaffs
has caching policies and data integrity models which make it easier
to avoid this kind of fatal failure, and which have been tested very
extensively. </font></font>
</p>
<p class="western"><font face="Liberation Sans, sans-serif"><font size="2" style="font-size: 11pt">Since
Yaffs is inherently faster and simpler, it does not need deep
caching. The Yaffs cache is small and used only for data alignment
purposes and improving the throughput of very small reads and writes.
Yaffs files are always flushed from the cache when they are closed.
Yaffs also provides its own cache-flushing functions, but these are
very fast because the cache is small.</font></font></p>
<p class="western" align="center"><font face="Liberation Sans, sans-serif"><font size="2" style="font-size: 11pt"><i><b>By
the time Yaffs closes a file, all the data is guaranteed to be safe
on the flash.</b></i></font></font></p>
<p class="western"><font face="Liberation Sans, sans-serif"><font size="2" style="font-size: 11pt">This
simple caching policy makes it very easy for programmers to write
software that is robust against power loss and avoids obscure failure
modes.  The simplicity confers more reliable operation, faster
product development and huge savings in development and maintenance
costs.</font></font></p>
<p class="western" align="center"><font face="Liberation Sans, sans-serif"><font size="2" style="font-size: 11pt"><i><b>Reliable
file systems pay for themselves many times over.</b></i></font></font></p>
<h1 class="western" style="page-break-before: always">Product risk
reduction</h1>
<p class="western">At first glance, a file system seems like it
should be a simple body of code: just a few functions that read,
write data and look things up by name. However, the reality is much
more complex than that.</p>
<p class="western">One of the most challenging aspects of file
systems is that errors are stored and incremental. Unlike most
software errors which can be cleared by a reset, storage errors are
persistent.</p>
<p class="western" align="center"><i><b>A reboot will typically not
fix file-system errors.</b></i></p>
<p class="western">Customers might tolerate a product that needs to
be reset once in a while, but file system failures are often fatal.
As a result, file system issues can be very damaging to long-term
product reliability.</p>
<p class="western">This is further complicated by flash memory. NAND
flash is the only type of semiconductor hardware which leaves the
factory with known variable errors, expecting the file system
software to handle the problems.</p>
<p class="western">Flash, NAND in particular, has its own failure
modes and these are best handled by a file system specifically
designed for NAND.</p>
<p class="western" align="center"><i><b>Yaffs was specifically
designed to use with NAND and NOR flash chips.</b></i></p>
<p class="western">Flash memory chip errors may only show up after
the product has been used a while, or in a fraction of the flash
parts. Typical testing during development (e.g. bench testing) will
often fail to expose all types of flash chip error, and others will
only be exposed during pilot- or early-production. These put release
dates at risk, which can cause huge revenue losses.</p>
<p class="western">We have a few clients who only determined that
they had file system issues when they did a pilot run. That prompted
them to try Yaffs and get their products shipping. While we are glad 
they ended up with a good product, unfortunately they lost revenue
and customer goodwill.</p>
<p class="western" align="center"><i><b>Finding problems late in
development creates business risk.</b></i></p>
<p class="western">It is thus not surprising that much of our
business is repeat business. 
</p>
<h1 class="western" style="page-break-before: always">Yaffs testing</h1>
<p class="western">Testing on its own does not create good software
but it does help to verify that the software is working correctly.</p>
<p class="western">Yaffs has many automated tests that are run on a
regular basis. Automated tests allow the testing to be run without
human intervention, thus allowing more testing to be done.</p>
<p class="western">The tests are too numerous to discuss completely
(see the Further Information below). W<span style="font-weight: normal">e</span>
highlight one: the power-fail stress test.</p>
<p class="western">The power-fail stress test is a test harness that
uses software simulations of flash devices and some software and
scripts to simulate the effects of removing power from a Yaffs-based
system <span style="font-weight: normal">while it is writing</span>
to flash. This test is normally run for 100,0000 to 1 million
power-fail simulation cycles, taking many days.</p>
<p class="western">This particular test suite was originally
developed in 2008 during the development of some new features. The
tests are very rigorous. In the beginning, this test suite would find
a problem after less than 100 power fail iterations. As we identified
and fixed the bugs, this number crept up and we now run millions of
cycles without seeing a single problem.</p>
<p class="western" align="center"><i><b>Yaffs survives millions of
power failures in simulation test benches.</b></i></p>
<p class="western">In addition, many of our clients have also run
hardware power failure tests, using a relay and a micro-controller to
kill power to the device under test.  They have been very satisfied
with the results.</p>
<p class="western" align="left" style="margin-bottom: 0cm; orphans: 0; widows: 0; page-break-before: auto">
<br/>

</p>
<p class="western"><font size="4" style="font-size: 16pt"><b>Licensing</b></font></p>
<p class="western">Yaffs is available under GNU Public License V2,
GPL2, from our git repository at <a href="http://www.yaffs.net/">www.yaffs.net</a>.
You may use that code for testing free of charge and for as long as
you want.</p>
<p class="western" align="left" style="font-weight: normal"><i>You
will be using it under the conditions of GPL2 with the obligation to
release your associated source code when you start to sell or
distribute a product.</i></p>
<p class="western" align="left" style="font-weight: normal"><i>We can
then sell you a Licence to use Yaffs which removes that obligation
and protects your intellectual property.</i></p>
<p class="western" align="center"><i><b>With Yaffs you can try before
you buy!</b></i></p>
<h1 class="western">Conclusions</h1>
<p class="western">Selecting a robust flash file system is key to :</p>
<ul>
	<li/>
<p class="western">building a successful product.</p>
	<li/>
<p class="western">reducing risk, warranty costs and
	liability.</p>
	<li/>
<p class="western">reducing development costs.</p>
</ul>
<p class="western" align="center"><i><b>Yaffs has proven itself and
can pay for itself many times over.</b></i></p>
<h1 class="western">Further information</h1>
<p class="western">This document is intentionally brief. There are
many documents at <a href="http://www.yaffs.net/">http://www.yaffs.net</a>
for those that want more information, including:</p>
<p class="western"><b>How Yaffs Works:</b> detailed description of
internal design.</p>
<p class="western"><b>Yaffs Robustness and Testing:</b> how  we know
Yaffs handles various flash failure scenarios.</p>
<p class="western"><br/>
<br/>

</p>
<p class="western">For further information please contact
<a href="mailto:info@yaffs.net">info@yaffs.net</a> or access
<a href="http://www.yaffs.net/">http://www.yaffs.net</a></p>";s:7:"summary";s:267:"Failures in an embedded File System in a product are much more serious to the user than failures in an office computer.&nbsp; Power failures and failures to cache data properly can be avoided by choosing a FFS specifically designed for reliability from the ground up.";s:6:"format";s:8:"raw_html";}}}s:19:"field_document_type";a:1:{s:9:"x-default";a:1:{i:0;a:1:{s:9:"target_id";s:3:"343";}}}s:6:"upload";a:1:{s:9:"x-default";a:1:{i:0;a:3:{s:9:"target_id";s:2:"77";s:7:"display";s:1:"1";s:11:"description";s:0:"";}}}s:18:"field_teaser_image";a:1:{s:9:"x-default";a:1:{i:0;a:5:{s:9:"target_id";s:3:"110";s:3:"alt";s:55:"Preview of ConsiderationsInChoosingAFlashFileSystem.pdf";s:5:"title";s:0:"";s:5:"width";s:3:"150";s:6:"height";s:3:"212";}}}}s:9:"*fields";a:0:{}s:19:"*fieldDefinitions";N;s:12:"*languages";N;s:14:"*langcodeKey";s:8:"langcode";s:21:"*defaultLangcodeKey";s:16:"default_langcode";s:17:"*activeLangcode";s:9:"x-default";s:18:"*defaultLangcode";s:3:"und";s:15:"*translations";a:1:{s:9:"x-default";a:1:{s:6:"status";i:1;}}s:24:"*translationInitialize";b:0;s:14:"*newRevision";b:0;s:20:"*isDefaultRevision";s:1:"1";s:13:"*entityKeys";a:4:{s:6:"bundle";s:5:"paper";s:2:"id";s:3:"466";s:8:"revision";s:3:"637";s:4:"uuid";s:36:"c75f1175-eb9e-4081-89ae-53bfad24a474";}s:25:"*translatableEntityKeys";a:6:{s:5:"label";a:1:{s:9:"x-default";s:46:"Considerations in Choosing a Flash File System";}s:8:"langcode";a:1:{s:9:"x-default";s:3:"und";}s:6:"status";a:1:{s:9:"x-default";s:1:"1";}s:9:"published";a:1:{s:9:"x-default";s:1:"1";}s:3:"uid";a:1:{s:9:"x-default";s:1:"4";}s:16:"default_langcode";a:1:{s:9:"x-default";s:1:"1";}}s:12:"*validated";b:0;s:21:"*validationRequired";b:0;s:19:"*loadedRevisionId";s:3:"637";s:15:"*entityTypeId";s:4:"node";s:15:"*enforceIsNew";N;s:12:"*typedData";N;s:16:"*cacheContexts";a:0:{}s:12:"*cacheTags";a:0:{}s:14:"*cacheMaxAge";i:-1;s:14:"*_serviceIds";a:0:{}}