<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Nand on tsvinc</title>
		<link>https://tsvinc.dev/tags/nand/</link>
		<description>Recent content in Nand on tsvinc</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Sun, 31 May 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://tsvinc.dev/tags/nand/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>FiiO X1 FTL reversed: the map was in the OOB bytes I never dumped</title>
				<link>https://tsvinc.dev/posts/fiio-x1-margins-we-threw-away-part-18/</link>
				<pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/fiio-x1-margins-we-threw-away-part-18/</guid>
				<description>&lt;p&gt;Rockbox&#39;s hwstub tools have a Lua function for NAND flash called &lt;code&gt;read_page&lt;/code&gt;, and it does exactly what it says. You give it a page and a length, it gives you that many bytes of the page. I gave it 2,048, the size of a page&#39;s data area, 65,536 times, and it never once complained. Good tool. The complaint is about the length.&lt;/p&gt;&#xA;&lt;p&gt;The flash belongs to a FiiO X1, a second-hand music player whose 128 MB NAND chip I copied in full over USB in &lt;a href=&#34;https://tsvinc.dev/posts/fiio-x1-128mb-one-page-part-6/&#34;&gt;Part 6&lt;/a&gt;, using hwstub, Rockbox&#39;s debug stub, and that function. Each page on this chip is 2,112 bytes: 2,048 of data and 64 of spare area, the OOB (&amp;quot;out of band&amp;quot;) bytes where flash keeps error-correction codes and bookkeeping. &lt;a href=&#34;https://tsvinc.dev/posts/fiio-x1-twelve-thousand-songs-part-16/&#34;&gt;Part 16&lt;/a&gt; carved a SQLite database out of that copy, found pages from different versions of the file side by side in it, and blamed the flash translation layer (FTL), the firmware code that decides which physical block holds which logical one. &amp;quot;The FTL did it&amp;quot; is the flash-storage version of &amp;quot;works on my machine&amp;quot;. This part reads the X1&#39;s FTL in the firmware to see what it actually does, and finds out where it keeps its map.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
