rockbox/utils
Andrew Rice b58c7505a0 utils: iPod Nano 3G NAND check for contributors
Apple fitted at least five makers' NAND to the Nano 3G, in eighteen
chip and chip-enable combinations. Rockbox's Nano 3G NAND support can
only be enabled for writing on a chip that has been validated on
hardware, and so far one has. This gives owners of the others a way to
send what validation needs without installing anything.

nano3g-check.dfu runs from DFU mode (mks5lboot --dfusend). It reads the
chip ids on every chip enable, matches Apple's chip table, tries a
read-only mount, and shows a short summary. It then serves the raw NAND
over USB as a write-protected disk: sector 0 a text report, then 16-byte
spare records for every page, then page data. Nothing is written to the
iPod's NAND or NOR.

nandcheck.py collect finds that disk on Linux, macOS or Windows and
writes a few-MB archive: the report, every page's spare metadata and
read result, and every page that is not user data or erased (the FTL
and VFL control structures and Apple's bad-block records). It includes
no file contents and not the serial number. The README lists the chips,
how to tell which one an iPod has, and the procedure.

The image is the Nano 3G bootloader built with -DNAND_CHECK from the
Nano 3G NAND driver work, which is not merged yet.

Tested on a 4GB Nano 3G (Hynix A514D3AD x4): sent with mks5lboot
--dfusend, the disk appears within seconds, and collect reads it in 7
minutes with no ECC failures or timeouts. The archive mounts in the
driver's host FTL tests with every sector resolving to its newest copy.

AI provenance: developed with Claude Opus 5 (Anthropic), used through
Claude Code. The model wrote most of the code and this message under
Andrew Rice's direction. Any hardware testing described above was
carried out by Andrew Rice, who is responsible for this change.

Change-Id: Id790997768ee79451b7adeb5e9764dc8054faf4c
2026-09-15 16:22:40 -04:00
..
AMS/hacking amsinfo: save files with .bin extension 2011-12-13 03:01:16 +00:00
analysis chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
atj2137 chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
bootchart chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
bspatch bspatch: Fix compile warnings on Apple Clang 21 2026-06-29 23:11:33 -04:00
bzip2 chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
chinachippatcher tools: fix up build warnings 2026-06-26 21:38:57 -04:00
cmake rbutilqt/themeeditor: Allow specifying the Apple code signing ID using an environment variable 2026-07-29 22:55:40 +03:00
common rbutil: Update tarball scripts 2025-04-02 08:21:38 -04:00
disassembler/arm Make sure files which aren't windows-specific use \n line endings only 2010-06-17 16:59:51 +00:00
e200rpatcher chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
e200tool chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
editors chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
hwpatcher chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
hwstub chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
ibassoboot/jni rbutil: Merge rbutil with utils folder. 2021-12-24 18:05:53 +01:00
imxtools mkimxboot: Fix up a large pile of compile warnings with -Wextra 2026-06-22 20:59:18 -04:00
ingenic_tools chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
ipod chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
ipodnano3g/nandcheck utils: iPod Nano 3G NAND check for contributors 2026-09-15 16:22:40 -04:00
ipodpatcher ipodpatcher: Correct use of FormatMessageA() for windows builds 2026-07-04 12:36:38 -04:00
jz4740_tools chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
jz4760_tools chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
jztool chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
mkamsboot chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
mkimxboot mkimxboot: Fix potentially unaligned pointer access of a packed structure 2026-07-01 17:27:49 +03:00
mkmpioboot chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
mknwzboot chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
mkrk27boot chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
mks5lboot mks5lboot: support the iPod Nano 3G 2026-09-15 16:22:11 -04:00
mktccboot chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
mkzenboot chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
MTP chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
nwztools utils: Fix a small pile of warnings 2026-06-17 10:39:57 -04:00
rbpms Add iPod Nano 2G post-mortem memory dumper by Michael Sparmann 2025-08-14 20:45:19 -04:00
rbutilqt FS#13993 - rbutl push decompression onto a separate thread (Alessio Lenzi) 2026-09-01 07:36:48 -04:00
reggen-ng stm32h743: add intitial register definitions 2025-04-21 14:15:31 -04:00
regtools chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
rk27utils utils: More warning fixes 2026-06-17 13:56:29 -04:00
rknanoutils chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
rockbox_api chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
samsungtools chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
sansapatcher sansapatcher: Correct use of FormatMessageA() for windows builds 2026-07-04 13:04:05 -04:00
scsi chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
skinupdater chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
tcctool chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
themeeditor desktop: Drop the 'version' fields 2026-07-29 10:27:35 -04:00
time-sync time-sync: Fix arguments order in linker command 2025-01-16 16:05:18 -05:00
tomcrypt tomcrypt: Set target macOS version. 2020-10-31 19:20:36 +01:00
tools rbutil: Merge rbutil with utils folder. 2021-12-24 18:05:53 +01:00
ypr0tools Samsung YP-R1: fix OF boot shortcut 2020-07-07 17:52:17 +00:00
zenutils chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
CMakeLists.txt rbutil: Rephrase optional component "not found" messages 2026-07-09 22:40:44 -04:00
libtools.make rbutil: Merge rbutil with utils folder. 2021-12-24 18:05:53 +01:00
parse_testcodec.rb utils/parse_testcodec.rb: add support for Opus files 2015-07-17 00:51:22 +02:00