SNIU028D February 2016 – September 2020 UCD3138 , UCD3138064 , UCD3138064A , UCD3138128 , UCD3138A , UCD3138A64
The UCD3138128 uses checksums to verify the integrity of the first 2kB, 32kB and 64kB of program flash just like the UCD3138A64. It also has checksums to verify the second 64kB and for the full 128kB of program flash. This provides Boot ROM support for 2 independent versions of the firmware in a single device. The checksums and their locations are shown in Table 13-6.
Checksum Location | Purpose |
---|---|
0x007F8 | Checksum for 2kB boot in program flash 0 |
0x07FF8 | Checksum for 32kB program in program flash 0 |
0x0FFF8 | Checksum for 64kB program in program flash 0 and 1 |
0x1FFF8 | Checksum for 64kB program in program flash 2 and 3 or |
Checksum for 128kB program in program flash 0, 1, 2 and 3 |
The locations above assume that Block 0 is mapped to address 0x0000, Block 1 is mapped to address 0x8000, Block 2 is mapped to address 0x10000, and Block 3 is mapped to 0x18000.
Figure 13-5 is a flowchart showing the order in which the ROM verifies the integrity of the different areas of program flash using the checksums. The branch instruction check at the beginning prevents the Boot ROM checksum program from checking the integrity of an empty block of memory. Otherwise a block filled with zeroes would pass the checksum test.
The UCD3138 has a PMBus command called “execute flash” with a command code of 0xF0. This causes the program to execute. On the UCD3138128, the same command code cause:
The code then starts executing from the start of program flash block 1 (at address 0).
Setting the command code to 0xF7 causes:
The code then starts executing from the start of program flash block 2 (at address 0). See Section 13.6.3 for more details on the “execute flash” command.