<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://xinu.cs.mu.edu/index.php?action=history&amp;feed=atom&amp;title=Flash_memory</id>
	<title>Flash memory - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://xinu.cs.mu.edu/index.php?action=history&amp;feed=atom&amp;title=Flash_memory"/>
	<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;action=history"/>
	<updated>2026-06-15T14:45:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;diff=3475&amp;oldid=prev</id>
		<title>Michael: /* Data Locations */ re wiki-linked TRX header</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;diff=3475&amp;oldid=prev"/>
		<updated>2009-07-29T18:10:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Data Locations: &lt;/span&gt; re wiki-linked &lt;a href=&quot;/index.php/TRX_header&quot; title=&quot;TRX header&quot;&gt;TRX header&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 18:10, 29 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot; &gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F408&amp;lt;/tt&amp;gt; is a unique private key for device (should match the NVRAM setting for &amp;lt;code&amp;gt;eou_private_key&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F408&amp;lt;/tt&amp;gt; is a unique private key for device (should match the NVRAM setting for &amp;lt;code&amp;gt;eou_private_key&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F508&amp;lt;/tt&amp;gt; is a unique public key for device (should match the NVRAM setting for &amp;lt;code&amp;gt;eou_public_key&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F508&amp;lt;/tt&amp;gt; is a unique public key for device (should match the NVRAM setting for &amp;lt;code&amp;gt;eou_public_key&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC04 0000&amp;lt;/tt&amp;gt; is the beginning of the operating system kernel ([[Embedded Xinu]] or some Linux variant).  Typically, this will be a gzipped version of the raw kernel code prefixed with a [[TRX]] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;header&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC04 0000&amp;lt;/tt&amp;gt; is the beginning of the operating system kernel ([[Embedded Xinu]] or some Linux variant).  Typically, this will be a gzipped version of the raw kernel code prefixed with a [[TRX &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;header&lt;/ins&gt;]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC3F 8000&amp;lt;/tt&amp;gt; is the location of proper [[#NVRAM|NVRAM settings]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC3F 8000&amp;lt;/tt&amp;gt; is the location of proper [[#NVRAM|NVRAM settings]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Michael</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;diff=3474&amp;oldid=prev</id>
		<title>Michael: /* NVRAM */ Added disclaimer about header</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;diff=3474&amp;oldid=prev"/>
		<updated>2009-07-29T18:08:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;NVRAM: &lt;/span&gt; Added disclaimer about header&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 18:08, 29 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l45&quot; &gt;Line 45:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 45:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  |                        NCDL value (?)                         |&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  |                        NCDL value (?)                         |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  +---------------------------------------------------------------+&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  +---------------------------------------------------------------+&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Several of the values are not used by Embedded Xinu as the values represent something that is not fully understood (all the SDRAM values and the NCDL value).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Immediately after the header begins the NVRAM settings as NULL delimited &amp;lt;code&amp;gt;name=value&amp;lt;/code&amp;gt; tuples stored as plain text.  It is possible that after the final tuple the settings are NULL character padded to the nearest 4 byte word.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Immediately after the header begins the NVRAM settings as NULL delimited &amp;lt;code&amp;gt;name=value&amp;lt;/code&amp;gt; tuples stored as plain text.  It is possible that after the final tuple the settings are NULL character padded to the nearest 4 byte word.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Michael</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;diff=3473&amp;oldid=prev</id>
		<title>Michael: Created more extensive Flash memory page</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;diff=3473&amp;oldid=prev"/>
		<updated>2009-07-29T18:06:59Z</updated>

		<summary type="html">&lt;p&gt;Created more extensive Flash memory page&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 18:06, 29 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[[Image:Flash_memory.png|thumb|150px|right|Quick reference guide to Flash &lt;/del&gt;memory &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;on XINU.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Like other &lt;/ins&gt;memory &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;mapped hardware &lt;/ins&gt;devices on the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;MIPS platform, &lt;/ins&gt;Flash &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;memory has an address range in KSEG1.  This means that the &lt;/ins&gt;memory is &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''unmapped''' and '''uncached'''.  An interesting, and important&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;piece of information &lt;/ins&gt;is &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;that all 4 megabytes &lt;/ins&gt;of &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Flash memory is mapped 1-1 into &lt;/ins&gt;the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;address &lt;/ins&gt;range between &amp;lt;tt&amp;gt;0xBC00 0000&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;0xBC3F FFFF&amp;lt;/tt&amp;gt;.  &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;This allows for random read-access without using an interface to load the data a fixed amount of registers.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Unlike other &lt;/del&gt;devices on the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;system &lt;/del&gt;Flash memory is &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;fully mapped&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;meaning it &lt;/del&gt;is &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;possible to access every location &lt;/del&gt;of the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;four megabyte &lt;/del&gt;range &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;by simply dereferencing a pointer &lt;/del&gt;between &amp;lt;tt&amp;gt;0xBC00 0000&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;0xBC3F FFFF&amp;lt;/tt&amp;gt;.  &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Within &lt;/del&gt;Flash memory &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;there &lt;/del&gt;are a &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;number &lt;/del&gt;of &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;notable addresses:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC00 1000&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: Generic &lt;/del&gt;backup NVRAM &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;variables (if &lt;/del&gt;proper &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;variables &lt;/del&gt;become corrupt, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;these are the values that &lt;/del&gt;will replace &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;them)&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC00 1E00&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: &lt;/del&gt;&amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;True&lt;/del&gt;&amp;quot; MAC address of device, this is the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;mac &lt;/del&gt;address &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;CFE &lt;/del&gt;will &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;use during the boot process&lt;/del&gt;.  Once &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;the system is booted, &lt;/del&gt;the MAC address &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;is not necessarily the same as the value stored here.  The value is stored in ASCII as 6 colon separated octets for a total of 17 bytes&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;== Data Locations ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC00 1F00&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: &lt;/del&gt;CFE &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Boot Version variable &lt;/del&gt;(&amp;quot;v3.7&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC00 2000&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: &lt;/del&gt;CFE code &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;begins&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Stored on &lt;/ins&gt;Flash memory are &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;several important parts to make &lt;/ins&gt;a &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;backend work properly, some &lt;/ins&gt;of &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;these data points are listed below.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F400&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: Unique &lt;/del&gt;device ID&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;, this is loaded into &lt;/del&gt;NVRAM &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;variables as &lt;/del&gt;eou_device_id&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F408&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: Private &lt;/del&gt;key for device&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;, also loaded into &lt;/del&gt;NVRAM &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;variables as &lt;/del&gt;eou_private_key&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC00 1000&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;has &lt;/ins&gt;backup NVRAM &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;settings. If the &amp;quot;&lt;/ins&gt;proper&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot; settings &lt;/ins&gt;become corrupt, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[CFE]] &lt;/ins&gt;will replace &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the proper settings with these&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F508&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: Public &lt;/del&gt;key for device&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;, also loaded into &lt;/del&gt;NVRAM &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;variables as &lt;/del&gt;eou_public_key&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC00 1E00&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;holds the &lt;/ins&gt;&amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;true&lt;/ins&gt;&amp;quot; MAC address of device&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.  During CFE boot&lt;/ins&gt;, this is the address &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;that &lt;/ins&gt;will &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;be used&lt;/ins&gt;.  Once &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;a full kernel has been loaded &lt;/ins&gt;the MAC address &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;may be different&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC04 0000&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: XINU code&lt;/del&gt;, gzipped raw &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;binary &lt;/del&gt;prefixed with a TRX header &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;containing &lt;/del&gt;the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;length and &lt;/del&gt;a &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;checksum among other &lt;/del&gt;data.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC00 1F00&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;holds the current &lt;/ins&gt;CFE &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;boot version &lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;should be &lt;/ins&gt;&amp;quot;v3.7&amp;quot; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;for [[WRT54GL|WRT54GLs]]&lt;/ins&gt;)&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* &lt;/del&gt;&amp;lt;tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;0xBC06 0000&lt;/del&gt;&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: Beginning of XINU &lt;/del&gt;file system&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC00 2000&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;is the beginning of &lt;/ins&gt;CFE code&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* &lt;/del&gt;&amp;lt;tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;0xBC3F 8000&lt;/del&gt;&amp;lt;/tt&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: NVRAM variables &lt;/del&gt;are &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;stored here&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;prefix with &lt;/del&gt;a &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;padded length &lt;/del&gt;and &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;checksum among other data &lt;/del&gt;for a 20 byte header&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;. &lt;/del&gt; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Each variable is stored &lt;/del&gt;as &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;a &lt;/del&gt;name=value &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pair (&lt;/del&gt;as &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ASCII data) and separated by a single null &lt;/del&gt;character.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F400&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;is a unique &lt;/ins&gt;device ID &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(should match the &lt;/ins&gt;NVRAM &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;setting for &amp;lt;code&amp;gt;&lt;/ins&gt;eou_device_id&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/code&amp;gt;).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F408&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;is a unique private &lt;/ins&gt;key for device &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(should match the &lt;/ins&gt;NVRAM &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;setting for &amp;lt;code&amp;gt;&lt;/ins&gt;eou_private_key&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/code&amp;gt;).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC03 F508&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;is a unique public &lt;/ins&gt;key for device &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(should match the &lt;/ins&gt;NVRAM &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;setting for &amp;lt;code&amp;gt;&lt;/ins&gt;eou_public_key&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/code&amp;gt;).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;tt&amp;gt;0xBC04 0000&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;is the beginning of the operating system kernel ([[Embedded Xinu]] or some Linux variant).  Typically&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;this will be a &lt;/ins&gt;gzipped &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;version of the &lt;/ins&gt;raw &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;kernel code &lt;/ins&gt;prefixed with a &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[&lt;/ins&gt;TRX&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]] &lt;/ins&gt;header&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* &amp;lt;tt&amp;gt;0xBC3F 8000&amp;lt;/tt&amp;gt; is &lt;/ins&gt;the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;location of proper [[#NVRAM|NVRAM settings]].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;This is not a comprehensive list of memory locations within Flash memory, but a guide of where some values may be stored when trying to interface with a new system.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;== Writing Flash ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Writing data to Flash memory is not simply &lt;/ins&gt;a &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;matter of writing data to the memory address.  For the WRT54GL backends the common NOR type of Flash memory is used.  As with all Flash memories there are certain properties that must be followed when storing &lt;/ins&gt;data.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;An important property of NOR based Flash memory is that each bit on Flash can only be changed from a &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; to a &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt; and not the other way around.  So if a byte has the pattern &lt;/ins&gt;&amp;lt;tt&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1001 1101&lt;/ins&gt;&amp;lt;/tt&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;only the high bits can be written.  This presents an interesting challenge for efficient &lt;/ins&gt;file system &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;structures.  Once a bit has been set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt; and the operating system wishes to reset the bit to &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; a special erase command must be sent to the device.  Because of this Flash memory is broken down into several distinct segments called ''erase blocks''.  These erase blocks can vary in size between Flash memory chips and even within the same chip.  After sending the command to erase an erase block, the entire erase block will be set to &lt;/ins&gt;&amp;lt;tt&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1&lt;/ins&gt;&amp;lt;/tt&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;s, allowing any data to be written.  The specific method of erasing and writing data depends on the manufacturer of the underlying hardware.  In general it is a matter of writing a sequence of values to a certain location to prepare the device, then writing the new data to the correct position.  These operations &lt;/ins&gt;are &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;more detailed on the [[Flash driver]] page under [[Flash driver#Physical Layer|physical layer]].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;== Common Flash Interface ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Luckily for software authors, the manufacturers of Flash memory have developed a standard for discovering information about a Flash device, called the Common Flash Interface (CFI).  By implementing a CFI query routine, the operating system can discover what command set the chip implements (Intel, AMD&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;and Mitsubishi all have &lt;/ins&gt;a &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;standard command set &lt;/ins&gt;and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;extended command set).  Other information that can be queried is voltages, timeouts &lt;/ins&gt;for &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;writing and erasing, access mode (word or byte), device size (as &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;), and information about up-to four erase block regions.  The information about each erase block region will consist of the size of an erase block in the region and the number of equally sized erase blocks that exist in the regions.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;== NVRAM ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;While technically a misnomer, NVRAM (non-volatile random access memory) refers specifically to the platform settings stored across power cycles of the device.  These settings will always begin 8 pages (32 kilobytes) away from the end of Flash memory.  In the case of the WRT54GL, this means NVRAM settings are stored beginning at &amp;lt;tt&amp;gt;0xBC3F 8000&amp;lt;/tt&amp;gt;.  At this point there is &lt;/ins&gt;a 20 byte header &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;which is laid out as follows:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;  0                   1                   2                   3   &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; +---------------------------------------------------------------+&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; |                     magic number ('FLSH')                     |&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; +---------------------------------------------------------------+&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; |                length (header size + variables)               |&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; +---------------+---------------+-------------------------------+&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; |      CRC      |    version    |         SDRAM Init (?)        |&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; +---------------+---------------+-------------------------------+&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; |       SDRAM config (?)        |       SDRAM refresh (?)       |&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; +-------------------------------+-------------------------------+&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; |                        NCDL value (?)                         |&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;+---------------------------------------------------------------+&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Immediately after the header begins the NVRAM settings &lt;/ins&gt;as &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;NULL delimited &amp;lt;code&amp;gt;&lt;/ins&gt;name=value&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/code&amp;gt; tuples stored &lt;/ins&gt;as &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;plain text.  It is possible that after the final tuple the settings are NULL &lt;/ins&gt;character &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;padded to the nearest 4 byte word&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Michael</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;diff=3468&amp;oldid=prev</id>
		<title>Michael: Created page for flash memory</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Flash_memory&amp;diff=3468&amp;oldid=prev"/>
		<updated>2009-07-29T01:29:13Z</updated>

		<summary type="html">&lt;p&gt;Created page for flash memory&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Image:Flash_memory.png|thumb|150px|right|Quick reference guide to Flash memory on XINU.]]&lt;br /&gt;
Unlike other devices on the system Flash memory is fully mapped, meaning it is possible to access every location of the four megabyte range by simply dereferencing a pointer between &amp;lt;tt&amp;gt;0xBC00 0000&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;0xBC3F FFFF&amp;lt;/tt&amp;gt;.  Within Flash memory there are a number of notable addresses:&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC00 1000&amp;lt;/tt&amp;gt;: Generic backup NVRAM variables (if proper variables become corrupt, these are the values that will replace them).&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC00 1E00&amp;lt;/tt&amp;gt;: &amp;quot;True&amp;quot; MAC address of device, this is the mac address CFE will use during the boot process.  Once the system is booted, the MAC address is not necessarily the same as the value stored here.  The value is stored in ASCII as 6 colon separated octets for a total of 17 bytes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC00 1F00&amp;lt;/tt&amp;gt;: CFE Boot Version variable (&amp;quot;v3.7&amp;quot;)&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC00 2000&amp;lt;/tt&amp;gt;: CFE code begins&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC03 F400&amp;lt;/tt&amp;gt;: Unique device ID, this is loaded into NVRAM variables as eou_device_id&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC03 F408&amp;lt;/tt&amp;gt;: Private key for device, also loaded into NVRAM variables as eou_private_key&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC03 F508&amp;lt;/tt&amp;gt;: Public key for device, also loaded into NVRAM variables as eou_public_key&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC04 0000&amp;lt;/tt&amp;gt;: XINU code, gzipped raw binary prefixed with a TRX header containing the length and a checksum among other data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC06 0000&amp;lt;/tt&amp;gt;: Beginning of XINU file system&lt;br /&gt;
* &amp;lt;tt&amp;gt;0xBC3F 8000&amp;lt;/tt&amp;gt;: NVRAM variables are stored here, prefix with a padded length and checksum among other data for a 20 byte header.  Each variable is stored as a name=value pair (as ASCII data) and separated by a single null character.&lt;/div&gt;</summary>
		<author><name>Michael</name></author>
		
	</entry>
</feed>