SPRUIW9C October 2021 – March 2024 TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1
The device contains an additional PIE vector table, in addition to the typical PIE vector table that is present. This allows PIE vector addresses for the new firmware to be populated prior to the LFU switchover. During LFU switchover, a simple swap operation which activates the PIE vector swap table and deactivates the previously active PIE vector table is initiated by user application code, and this operation takes just 1 CPU clock cycle. To initiate the swap, user application code sets LFUConfig.PieVectorSwap = 1. The PIE vector table swap features are also implemented on a redundant PIE vector table implemented for safety. Therefore, to implement PIE vector table swap, the sizes of PIE vector memory and redundant PIE vector memory are both doubled.
The changes are summarized in Figure 3-17. In previous devices, PIE vector RAM and redundant PIE vector RAM are present. In this device, these are duplicated. There are now four physical PIE vector RAM memories – Block A, Block B, Block C, and Block D. By default, Block A and Block B are active, and are mapped to addresses 0x0000_0D00-0x0000_0EFF and 0x0100_0D00-0x0100_0EFF respectively. Block C and Block D are inactive, and are mapped to addresses 0x0100_0900-0x0100_0AFF and 0x0100_0B00-0x0100_0CFF respectively.
When user application code initiates a PIE vector table swap by setting LFUConfig.PieVectorSwap = 1, Block C and Block D become active, and are mapped to addresses 0x0000_0D00-0x0000_0EFF and 0x0100_0D00-0x0100_0EFF respectively. Block A and Block B become inactive, and are mapped to addresses 0x0100_0900-0x0100_0AFF and 0x0100_0B00-0x0100_0CFF respectively.
Thus, note that the active addresses are always 0x0000_0D00-0x0000_0EFF, and 0x0100_0D00-0x0100_0EFF (for redundancy). The inactive addresses are always 0x0100_0900-0x0100_0AFF, and 0x0100_0B00-0x0100_0CFF (for redundancy). As mentioned above, prior to the LFU switchover, user application code needs to write to the inactive addresses with the PIE vector locations corresponding to the new firmware.
The register bit LFUStatus.PieVectorSwap provides the status of Pie Vector Swap.
Writes to addresses 0x0000_0D00-0x0000_0EFF update both the currently active block and the redundant counterpart. Writes to addresses 0x0100_0900-0x0100_0AFF update both the currently inactive block and the redundant counterpart.
Reads from addresses 0x0000_0D00-0x0000_0EFF issue reads from both addresses 0x0000_0D00-0x0000_0EFF and the redundant counterpart 0x0100_0D00-0x0100_0EFF. The read values are compared, and any data mismatches generate the same error response as that of the existing PIE vector fetch mismatch (refer to PIEVERRADDR). A read from or write to the redundant PIE vector RAM (0x0100_0D00-0x0100_0EFF or 0x0100_0B00-0x0100_0CFF) impacts only the redundant PIE vector RAM.