pureboot: every libavr chip — 37 loaders, the m48 class, the 644 geometry
The chip table becomes family blocks covering all 37 targets. The m48s are a new deployment class: no boot section, so the tiny profile spoken over the hardware USART — host-patched reset vector, trampoline hand-over, a 510-byte budget (474 B built), no fuse preflight — while their RWWSRE store stays the buffer discard (Atmel-8271 §26.2); the device keys the patch flag and the CPU-halt waits on the curated boot-section capability and the discard on the RWWSRE bit itself. The 644s' 64 KiB is exactly the 16-bit byte space: plain LPM, byte wire addresses, 498 B in a 512-byte slot — and their 1 KiB minimum boot section holds the resident and staging slots together, so self-update needs no fuse step (the update test's slot pick now keys word-flash on base >= 64 KiB; base + slot merely touching the boundary stays byte-addressed). The 1284 joins the 1284P's word-addressed 1 KiB slot at 558 B. BOOT_FUSE gains every boot-sectioned family's ladder and fuse byte; the planner exercises them all. The sim scaffolding keys patch-vector-ness instead of the atmega name prefix, the fixture app picks its clock by family (the tiny25/45/13 builds surfaced the 16 MHz fallthrough as garbled banners), and the runner's wrapped flash ioctl performs the m48 discard simavr's no-RWW cores turn into a stray buffer fill. Sizes across the fleet: 466-504 B megas, 474 B m48s, 498 B 644s, 488-502 B tinies, 558 B 1284s — every chip passing size/pi/planner/protocol/reloc/update. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -518,15 +518,34 @@ def covered(pages, info, skip_blank):
|
||||
|
||||
# Per-chip boot fuse geometry, keyed by the signature's family/part bytes:
|
||||
# which byte of the 'F' reply (low, lock, extended, high) carries BOOTSZ/
|
||||
# BOOTRST, and the BOOTSZ->words ladder. Sources: Atmel-2486/2466/2503
|
||||
# (HIGH fuse), Atmel-8271 (m168A: EXTENDED; m328P: HIGH), Atmel-42719.
|
||||
# BOOTRST, and the BOOTSZ->words ladder. A die revision shares its base
|
||||
# signature, so one row covers it. The m48s have no boot section and no
|
||||
# row — their info block says patch-vector and this table is never
|
||||
# consulted. Sources: Atmel-2486/2466/2503 (HIGH fuse), Atmel-2545/8271/
|
||||
# DS40002065 (x8: EXTENDED, except the m328s' HIGH), Atmel-8272/8011/2593/
|
||||
# 42719 (x4: HIGH).
|
||||
_LADDER_128 = {0b11: 128, 0b10: 256, 0b01: 512, 0b00: 1024}
|
||||
_LADDER_256 = {0b11: 256, 0b10: 512, 0b01: 1024, 0b00: 2048}
|
||||
_LADDER_512 = {0b11: 512, 0b10: 1024, 0b01: 2048, 0b00: 4096}
|
||||
BOOT_FUSE = {
|
||||
bytes((0x93, 0x07)): (3, {0b11: 128, 0b10: 256, 0b01: 512, 0b00: 1024}), # m8/8A
|
||||
bytes((0x94, 0x03)): (3, {0b11: 128, 0b10: 256, 0b01: 512, 0b00: 1024}), # m16
|
||||
bytes((0x95, 0x02)): (3, {0b11: 256, 0b10: 512, 0b01: 1024, 0b00: 2048}), # m32/32A
|
||||
bytes((0x94, 0x06)): (2, {0b11: 128, 0b10: 256, 0b01: 512, 0b00: 1024}), # m168A
|
||||
bytes((0x95, 0x0F)): (3, {0b11: 256, 0b10: 512, 0b01: 1024, 0b00: 2048}), # m328P
|
||||
bytes((0x97, 0x05)): (3, {0b11: 512, 0b10: 1024, 0b01: 2048, 0b00: 4096}), # 1284P
|
||||
bytes((0x93, 0x07)): (3, _LADDER_128), # m8/8A
|
||||
bytes((0x94, 0x03)): (3, _LADDER_128), # m16/16A
|
||||
bytes((0x95, 0x02)): (3, _LADDER_256), # m32/32A
|
||||
bytes((0x93, 0x0A)): (2, _LADDER_128), # m88/88A
|
||||
bytes((0x93, 0x0F)): (2, _LADDER_128), # m88P/88PA
|
||||
bytes((0x94, 0x06)): (2, _LADDER_128), # m168/168A
|
||||
bytes((0x94, 0x0B)): (2, _LADDER_128), # m168P/168PA
|
||||
bytes((0x95, 0x14)): (3, _LADDER_256), # m328
|
||||
bytes((0x95, 0x0F)): (3, _LADDER_256), # m328P
|
||||
bytes((0x94, 0x0F)): (3, _LADDER_128), # m164A
|
||||
bytes((0x94, 0x0A)): (3, _LADDER_128), # m164P/164PA
|
||||
bytes((0x95, 0x15)): (3, _LADDER_256), # m324A
|
||||
bytes((0x95, 0x08)): (3, _LADDER_256), # m324P
|
||||
bytes((0x95, 0x11)): (3, _LADDER_256), # m324PA
|
||||
bytes((0x96, 0x09)): (3, _LADDER_512), # m644/644A
|
||||
bytes((0x96, 0x0A)): (3, _LADDER_512), # m644P/644PA
|
||||
bytes((0x97, 0x06)): (3, _LADDER_512), # m1284
|
||||
bytes((0x97, 0x05)): (3, _LADDER_512), # m1284P
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user