rockbox/utils/ipodnano3g/RESULTS.md
Andrew Rice bd24fddb7e ipodnano3g: mark the 4-CE B614D5EC row checked
A contributor's check archive matches the row exactly and passes
test_crash clean. test_ftl disagrees with the oracle on two logical
pages in one block - a second, distinct false positive from the
A5D5D589 x2 case: a closed data block addressed purely by position,
with one stale leftover page. Confirmed against the decode notes
(_FTLRestore's "closed blocks -> map" step) and documented in
test_ftl.c alongside the existing false positive.

Testing evidence: utils/ipodnano3g/RESULTS.md.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ib24d2df18e2b0e60e000ee6ea43bef9c214f7f72
2026-09-21 09:16:33 -04:00

4.1 KiB

Nano 3G storage validation results

Results below were recorded on 2026-09-13. Hardware results used a 4 GB Nano 3G with Hynix NAND ID 0xA514D3AD.

Host tests

  • The independent newest-page oracle agreed with ftl_read() for all 1,982,464 logical sectors in the device image.
  • Read/write, wear-level, bad-block injection, allocation eligibility, restore and mock-NAND suites completed without failures.
  • Power was cut at 300 operation boundaries in each of 48 deterministic campaigns. Half modeled a torn page program or half-completed erase. All acknowledged writes survived each remount and no page was programmed twice or out of order.
  • The 600-file write replay retained 66,388 copy-merge reads and 34,816 delete-merge reads. Batched reads reduced these to 528 and 280 controller calls respectively, averaging 125.7 and 124.3 pages per call.
  • Driver and emulator register traces were identical in all write scenarios: one page, single-plane rows, repeated-bank pages, and one through three two-plane rows.
  • Driver and emulator register traces were identical for one read, four-bank reads, repeated-bank reads and a mixed duplicate-bank split.

Hardware tests

  • A complete NAND dump produced 184 VFL context pages that all passed the format's checksums.
  • Rockbox mounted and restored the uncommitted state left by Apple disk mode.
  • A 77,067,368-byte, 600-file tree written through Rockbox read back with all SHA-256 hashes intact through both Rockbox and Apple disk mode.
  • The same tree read at 7.550 MB/s through Rockbox USB and 9.745 MB/s through Apple disk mode. Rockbox wrote and synced it at 0.731 MB/s; Apple wrote and synced it at 1.026 MB/s.
  • A setting survived reset and restore, and Apple firmware subsequently read the volume successfully.

Bad-block remapping and forced program/erase failure recovery have extensive host fault-injection coverage, including validation of the persisted remap after remount. They have not been deliberately triggered on hardware. The implemented layout and recovery order follow the decoded Apple FTL/VFL process documented in decode/APPLE-FTL-WRITE.md; that correspondence is evidence for the implementation, not a substitute for destructive hardware fault testing.

Later additions

  • NAND check tool update, 2026-09-17. The rebuilt check image reads a 4GB unit with no ECC failures or timeouts; two independent collections from it agree byte for byte.
  • 2-CE Micron A5D5D52C, enabled 2026-09-18. A contributor's check archive matches the table row exactly, including a derived vflspares of 89. Replayed against the host suite: test_ftl agrees with the oracle on all 1,982,464 sectors; test_crash survives 100 power cuts (172 writes, 6 syncs, 0 sectors wrong). No on-device write test.
  • B614D5EC x2, A5D5D589 x2/x4, 3E94D589 x2, 2026-09-19. Four contributors' check archives all match their rows and pass test_crash clean. test_ftl passes three outright; A5D5D589 x2 disagrees with the oracle on two logical pages - confirmed against Apple's own disassembly (_FTLRestore, osos 1.1.3) to be that algorithm's own tie-break between two competing logs, not a defect (see the note in ftltest/test_ftl.c).
  • BA94D598 x4, 2026-09-20. A contributor's check archive matches the row exactly (Toshiba, mode 1, vflspares 201 by our own formula). Clean on both host tests: test_ftl agrees with the oracle on all 3,964,928 sectors; test_crash survives 100 power cuts (344 writes, 11 syncs, 0 sectors wrong). No on-device write test.
  • B614D5EC x4, 2026-09-21. A contributor's check archive matches the row exactly (mode 1, vflspares 201 by our own formula). test_crash is clean (100 power cuts, 349 writes, 9 syncs, 0 sectors wrong). test_ftl disagrees with the oracle on two logical pages in one block; traced to a second, distinct false positive from the one already documented for A5D5D589 x2 - a closed data block addressed purely by position, with one stale leftover page - confirmed against the decode notes (_FTLRestore's "closed blocks -> map" step) and not a defect (see ftltest/test_ftl.c).