Device Descriptor Table
290
SLAU356I – March 2015 – Revised June 2019
Copyright © 2015–2019, Texas Instruments Incorporated
System Controller (SYSCTL)
4.9.1 Tag Length Value (TLV) Descriptors
Each TLV descriptor contains a tag field that identifies the descriptor type.
lists the supported
tags. Each tag field is unique to its respective descriptor and is always followed by a length field. The
length field represents the length of the descriptor in words. See the device-specific data sheet for the
complete TLV structure and which descriptors are available.
Table 4-4. Tag Values
Short Name
Value
Description
Reserved
00000001h
Reserved for future use
Reserved
00000002h
Reserved for future use
TAG_CS
00000003h
Clock System Calibration Tag
TAG_FLASH
00000004h
Flash Info Tag
TAG_ADC14
00000005h
ADC14 Calibration Tag
Reserved
00000006h
Reserved for future use
Reserved
00000007h
Reserved for future use
TAG_REF
00000008h
REF Calibration Tag
Reserved
00000009h
Reserved for future use
Reserved
0000000Ah
Reserved for future use
TAG_DEVINFO
0000000Bh
Device Info Tag
TAG_DIEREC
0000000Ch
Die Record Tag
TAG_RANDNUM
0000000Dh
Random Number Tag
Reserved
0000000Eh
Reserved for future use
TAG_BSL
0000000Fh
BSL Configuration Tag
4.9.2 TLV Checksum
The Fletcher-32 checksum is used in the TLV. The checksum can be computed with the following code
snippet and with a seed value of DADA0000h.
//Calculates a Fletcher-32 checksum, which consists of two parts.
//The first is a checksum of the data values. The second
//is a checksum of the intermediate values of the first checksum.
uint32 Calc_Fletcher32_Chksum(uint16 *data_start, uint32 num_data_values, uint32 seed)
{
uint32 sum1, sum2, c;
sum1 = seed & 0xFFFF;
sum2 = (seed & 0xFFFF0000) >> 16;
for (c = 0; c < num_data_values; c++)
{
//Add the new data value, doing an end-around carry to implement a
//one's complement sum. This is mostly done for better error detection
//since it makes an MSB flip affect more than just the MSB of the
//checksum. It's also endian-independent (up to a bit rotation) and
//provides easy match detection, although those features don't work in
//a Fletcher checksum. This step can be optimized for speed by
//accumulating carries for up to 360 sums, but since the function is
//only used once per run the code size is optimized instead.
sum1 += data_start[c];
sum1 = (sum1 >> 16) + (sum1 & 0xFFFF);
sum2 += sum1;
sum2 = (sum2 >> 16) + (sum2 & 0xFFFF);
}
return (sum2<<16) | sum1;
}