skip to Main Content

AU6987HL Page Updates

For whatever reason transactional update blocks are ignored by Alcor Micro assemblers. These updates hold the last modifications written to the device that weren’t committed to a full block. Controllers use these blocks in their wear leveling/garbage collection routines to reduce erasing and writing a single block. In an effort to help develop better assemblers here are some quick insights.

Controller: AU6987HL
Page Size: 0x2000
Block Size: 0x180000
Bank Size: 0x400

Logical blocks 0x3f8 though 0x3fb in each bank contain the update blocks for that bank stored in page increments starting at Page 1. Page 0 in these blocks contains metadata. ushort[1] contains the logical block number in little endian. For example: logical block 0x001d

00 1d 1d 00 69 86 00 00 00 00 00 05 40 01 01 00

Using your favorite SA parser we skip the first page containing metadata. Byte[0] in the SA is the page offset in the logical block number. Simply overwrite the data on page boundaries in the master image with the updated data. Once you read an empty page your done with that block.

Dump 0x05580000 (2ac0)  Block 03f9  SA f9 f0 00 00   
Dump 0x05582000 (2ac1)  Block 01b7  SA b7 d0 01 00   (lBlk: 0x1d page 0xb7)
Dump 0x05584000 (2ac2)  Block 01b7  SA b7 d0 02 00   (lBlk: 0x1d page 0xb7)
Dump 0x05586000 (2ac3)  Block 01b8  SA b8 d0 03 00   (lBlk: 0x1d page 0xb8)

That’s how its done, not very complicated.