SPRUHX5I August 2014 – May 2024 TMS320F28374S , TMS320F28375S , TMS320F28375S-Q1 , TMS320F28376S , TMS320F28377S , TMS320F28377S-Q1 , TMS320F28378S , TMS320F28379S
For each of the two security zones a dedicated OTP memory block exists that holds the configuration related to zone’s security. The following are the available programmed configurations:
Since OTP memory cannot be erased, to provide flexibility of configuring some of the security settings like CSM passwords, allocation of RAM/Flash sectors and the attributes, multiple times by the user, the following configurations are placed in zone select regions of each zone’s OTP Flash.
The location of the zone select region in OTP memory is decided based on the value of three 29-bit link pointers (Zx-LINKPOINTERx) programmed in the OTP memory of each zone . All OTP memory locations except link pointer locations are protected with ECC. Since the link pointer locations are not protected with ECC, three link pointers are provided that need to be programmed with the same value. The final value of the link pointer is resolved in hardware when a dummy read is done to all the link pointers by comparing all the three values (bit-wise voting logic). Since in OTP memory, a 1 can be flipped by the user to 0 but a 0 cannot be flipped to a 1 (no erase operation for OTP memory), the most-significant bit position in the resolved link pointer that is 0 defines the valid base address for the zone select region. While generating the final link pointer value, if the bit patterns is not one of those listed in Figure 3-21, the final link pointer value becomes All_1 (0xFFFF_FFFF) that selects the Zone-Select-Block1 (also known as the default zone select block).
Since linkpointer location in USER OTP does not have ECC, the user must always define a separate structure and section for linkpointers.
There are two banks in this device, Flash Bank 0 and Flash Bank 1. Each bank contains 14 sectors, Bank0 (sectors 0 to 13) and Bank1 (sectors 14 to 27). It is possible to selectively allocate the sectors in Bank0 to either Zone1 or Zone 2 using the Z1_GRABSECTR register or Z2_GRABSECTR register, respectively. However, sectors in Bank1 can only be allocated “as a whole” to either Zone1 or Zone2. This is done using the GRAB_BANK1 bit-field in the Z1_GRABSECTR register or Z2_GRABSECTR register. Note that sectors 0 to 13 of Bank0 are labeled as A through N in the Zx_GRABSECTR registers.