{
  "backup": {
    "recorded_at": "2026-10-18T09:12:02.660127+02:00",
    "chip_id": "d4cdd489afe28cc5",
    "chip": "RP2350",
    "bootsel_serial": "XXXXXXXXXXXXXXXX",
    "jedec_id": "852016",
    "capacity_bytes": 4194304,
    "capacity_origin": "chip SFDP density; independently agrees with mapped-address alias test",
    "sector_erase": {
      "bytes": 4096,
      "opcode": "0x20",
      "origin": "chip SFDP basic parameter table"
    },
    "page_size_confirmed": true,
    "page_size_bytes": 256,
    "page_size_origin": "Matching PY25Q32HB manufacturer datasheet V1.7, sections 10.25 and 10.35; not a measured programming operation",
    "page_size_source": "https://www.puyasemi.com/download_path/%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C/Flash%20%E8%8A%AF%E7%89%87/PY25Q32HB_Datasheet_V1.7.pdf",
    "flash_programming_exercised": false,
    "pcb_model_confirmed_by_software": false,
    "original_firmware": "MicroPython v1.29.0, August 24 2026, SDK 2.3.0, pico2 firmware target",
    "images": [
      {
        "path": "mapped-flash-a.bin",
        "bytes": 4194304,
        "sha256": "d0edc9763780aee891a36a572759da4883b03f2f34cadd31a5564d5711270414"
      },
      {
        "path": "mapped-flash-b.bin",
        "bytes": 4194304,
        "sha256": "d0edc9763780aee891a36a572759da4883b03f2f34cadd31a5564d5711270414"
      },
      {
        "path": "mapped-flash-post-probe.bin",
        "bytes": 4194304,
        "sha256": "d0edc9763780aee891a36a572759da4883b03f2f34cadd31a5564d5711270414"
      }
    ],
    "complete_flash_backup_verified": true,
    "original_flash_unchanged_after_ram_probe": true,
    "replacement_installed_in_flash": false,
    "restore_instructions": "RESTORE.md",
    "restoration_exercised": false,
    "current_mode": "BOOTSEL",
    "evidence": [
      "preflight.json",
      "bootsel-info.txt",
      "flash-metadata.json",
      "sfdp-derived.json",
      "ram-probe-verification.json",
      "original-firmware-info.txt"
    ],
    "page_size_qualified_at": "2026-10-18T09:31:52.825196+02:00"
  },
  "chip_metadata": {
    "schema": 1,
    "ram_only": true,
    "ok": true,
    "serial": "XXXXXXXXXXXXXXXX",
    "system_clock_hz": 150000000,
    "jedec": "852016",
    "sfdp": "53464450000101ff00000109300000ff85000103600000ffffffffffffffffffffffffffffffffffffffffffffffffffe520f1ffffffff0144eb086b083b80bbfeffffffffff00ffffff44eb0c200f5210d80081ffffffffffffffffffffffff003600279ef97764d9c8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
    "captured_at": "2026-10-18T09:02:35.555660+02:00"
  },
  "sfdp_derivation": {
    "source": "flash-metadata.json",
    "jedec": "852016",
    "sfdp_major": 1,
    "sfdp_minor": 0,
    "parameters": [
      {
        "id": "0xff00",
        "major": 1,
        "minor": 0,
        "dwords": 9,
        "pointer": 48
      },
      {
        "id": "0xff85",
        "major": 1,
        "minor": 0,
        "dwords": 3,
        "pointer": 96
      }
    ],
    "density_bits": 33554432,
    "capacity_bytes": 4194304,
    "erase_types": [
      {
        "bytes": 4096,
        "opcode": "0x20"
      },
      {
        "bytes": 32768,
        "opcode": "0x52"
      },
      {
        "bytes": 65536,
        "opcode": "0xd8"
      }
    ],
    "page_size_from_basic_table": null,
    "note": "SFDP basic table revision 1.0 has no later page-size DWORD"
  },
  "ram_elf_verification": {
    "recorded_at": "2026-10-18T09:01:29.432817+02:00",
    "entry": "0x20000179",
    "load_segments": [
      {
        "address": "0x20000000",
        "file_bytes": 31392,
        "memory_bytes": 36796
      },
      {
        "address": "0x20081000",
        "file_bytes": 0,
        "memory_bytes": 2048
      }
    ],
    "all_load_segments_in_sram": true,
    "erase_program_symbols_absent": true,
    "elf_sha256": "d5e4935b51729815880f1f86baf6f28af1d645fba035ae67fee70358e9934b93",
    "source_sha256": "0884d75ab35ca579c595904a03b6ba75c7dfc044b2774ef03c93c89b9f270eb9",
    "expected_chip_id": "XXXXXXXXXXXXXXXX",
    "flash_replacement_performed": false
  },
  "original_firmware_info": "File ~/Developer/Projects/NeXTsound/.backups/d4cdd489afe28cc5-20261018-084812.RRIScF/mapped-flash-a.bin:\n\nProgram Information\n name:                MicroPython\n version:             v1.29.0\n features:            thread support\n                      USB REPL\n frozen modules:      neopixel, dht, ds18x20, onewire, uasyncio, asyncio/stream,\n                      asyncio/lock, asyncio/funcs, asyncio/event, asyncio/core,\n                      asyncio, _boot_fat, _boot, rp2\n binary start:        0x10000000\n binary end:          0x10050a4c\n embedded drive:      0x10100000-0x10400000 (3072K): MicroPython flags 0x0003 rw\n target chip:         RP2350\n image type:          ARM Secure\n\nFixed Pin Information\n none\n\nBuild Information\n sdk version:         2.3.0\n pico_board:          pico2\n boot2_name:          boot2_w25q080\n build date:          Aug 24 2026\n build attributes:    MinSizeRel\n\nMetadata Block 1\n address:             0x10000138\n next block address:  0x10050a38\n block type:          image def\n target chip:         RP2350\n image type:          ARM Secure\n extra security:      not enabled\n\nMetadata Block 2\n address:             0x10050a38\n next block address:  0x10000138\n block type:          ignored\n",
  "raw_flash_included": false
}
