The fingerprint firmware divides flash into three sections: RO, Rollback, and RW. The RO (Read-only) section contains a minimal set of code to check the signature of the code in RW; it’s essentially a bootloader and once a device enters production it never changes. The RW section is the portion of flash that runs the matching algorithm and is the portion that we update over time. The Rollback section consists of two separate flash sectors that store the minimum RW version that is allowed to run; this prevents attacks where an older version of RW firmware has a security vulnerability, and we want to prevent it from ever being loaded again (even though it’s valid and will pass the signature check). The fingerprint firmware also uses the rollback section to store the entropy used for the encryption key that protects the fingerprint templates.
make BOARD=bloonchipper), the amount of flash and RAM remaining will be printed out.Total Flash: 2 MB
Total SRAM: 1 MB, but 864 KB is “user SRAM”. See Section 2.4 Embedded SRAM for more details.
| Flash section | Size | Amount Used |
|---|---|---|
| Read-only (RO) | 768 KB | See make BOARD=dartmonkey output. |
| Rollback | 256 KB total (two 128 KB sectors) | 44 bytes in each of the two sections |
| Read-write (RW) | 1024 KB | See make BOARD=dartmonkey output. |
| Flash sector | Flash sector size | Offset | Firmware Region |
|---|---|---|---|
| 1 | 128 KB | 0 | RO (768 KB) |
| 2 | 128 KB | 0x20000 (131072) | ... |
| 3 | 128 KB | 0x40000 (262144) | ... |
| 4 | 128 KB | 0x60000 (393216) | ... |
| 5 | 128 KB | 0x80000 (524288) | ... |
| 6 | 128 KB | 0xA0000 (655360) | ... |
| 7 | 128 KB | 0xC0000 (786432) | Rollback (256 KB) |
| 8 | 128 KB | 0xE0000 (917504) | ... |
| 9 | 128 KB | 0x100000 (1048576) | RW (1024 KB) |
| 10 | 128 KB | 0x120000 (1179648) | ... |
| 11 | 128 KB | 0x140000 (1310720) | ... |
| 12 | 128 KB | 0x160000 (1441792) | ... |
| 13 | 128 KB | 0x180000 (1572864) | ... |
| 14 | 128 KB | 0x1A0000 (1703936) | ... |
| 15 | 128 KB | 0x1C0000 (1835008) | ... |
| 16 | 128 KB | 0x1E0000 (1966080) | ... |
Total Flash: 1 MB
Total SRAM: 256 KB
| Flash section | Size | Amount Used |
|---|---|---|
| Read-only (RO) | 128 KB | See make BOARD=bloonchipper output. |
| Rollback | 256 KB (two 128 KB sectors) | 44 bytes in each of the two sections |
| Read-write (RW) | 640 KB | See make BOARD=bloonchipper output. |
| Flash sector | Flash sector size | Offset | Firmware Region |
|---|---|---|---|
| 1 | 16 KB | 0 | RO (128 KB) |
| 2 | 16 KB | 0x4000 (16384) | ... |
| 3 | 16 KB | 0x8000 (32768) | ... |
| 4 | 16 KB | 0xC000 (49152) | ... |
| 5 | 64 KB | 0x10000 (65536) | ... |
| 6 | 128 KB | 0x20000 (131072) | Rollback (256 KB) |
| 7 | 128 KB | 0x40000 (262144) | ... |
| 8 | 128 KB | 0x60000 (393216) | RW (640KB) |
| 9 | 128 KB | 0x80000 (524288) | ... |
| 10 | 128 KB | 0xA0000 (655360) | ... |
| 11 | 128 KB | 0xC0000 (786432) | ... |
| 12 | 128 KB | 0xE0000 (917504) | ... |
Total Flash: 1 MB
Total SRAM: 512 KB
helipilot is different from the other FPMCU boards in that it cannot execute code quickly from Flash. Instead, all code is loaded in RAM and execute from RAM. This means that RAM must be partitioned into Code RAM and Data RAM.
| Description | Size |
|---|---|
| Code RAM | 352 KB |
| Data RAM | 156 KB |
| Data RAM for ROM functions | 4 KB |
| Flash section | Size | Amount Used |
|---|---|---|
| Nuvoton bootloader header | 4 KB | 64 bytes |
| Read-only (RO) | 124 KB | See make BOARD=helipilot output. |
| Rollback | 128 KB (two 64 KB sectors) | 44 bytes in each of the two sections |
| Read-write (RW) | 768 KB (320 KB usable) | See make BOARD=helipilot output. Note that the usable RW size is limited by the amount of SRAM. |
NPCX99FP supports erase size of 64 KB, 32 KB, and 4 KB. Our code configures it with a uniform flash sector size of 64 KB.