This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28388D: Invalid Internal Temperature Sensor TI OTP values - can't measure MCU temperature

Part Number: TMS320F28388D
Other Parts Discussed in Thread: C2000WARE

Hi,
I have some Rev.A TMS320F28388D MCUs that I'm prototyping on.
I tried to make some use of the internal temperature sensor in the chip, but the ADC_getTemperatureC() function returns invalid temp, in my case 32767 (I use the latest C2000Ware 4.01).
I checked the values of TI OTP calibration params at 0x701C8 and 0x701CA addresses, and there are invalid numbers:

0x000701C8    0x0000 0x0001 0x0000 0x0000

Why is that? Which MCUs has been programmed properly and how to detect such situation?
In errata there is no mention about this issue.
Are there some default calibration values that can be used to get approximate temp results? What will be the typical measurement error when the sensor is not calibrated at TI?

Best regards,
Andy

  • Hi Andy,

    Yes, those values do not seem right.  Is it possible to take a picture of the F28388D device showing the markings on the package?  We will use the markings on the device package and try to trace why the values needed by the temp sensor function in locations 0x701C8 and 0x701CA have been populated correctly.   ADC_getTemparatureC() function will only return valid values (no default) if the contents of 0x701C8 and 0x701CA are correct.

    Regards,

    Joseph

  • Hi Joseph,

    it seems that the OTP is programmed correctly after all. 
    In our device the ADCA and the temperature sensor is assigned to CPU2, but the CPU2 doesn't have access to OTP ROM (or does it?).

    The above memory view was taken from CPU2 view, hence the populated values were wrong.

    So the ADC_getTemperatureC() cannot be used on CPU2. The slope and offset values must be read by CPU1 and somehow transferred to CPU2 (for example via GSRAM), and then one can use custom version of ADC_getTemperatureC() function.

    Thanks and regards,
    Andy

  • Hi Andy,

    Each CPU has it's own OTP ROM and relevant trim and calibration items are programmed in CPU1's OTP.  As you have indicated, you would have to read the slope and offset values through CPU1 and pass those to a common location like GSRAM or through the message RAMs.  Take note that when choosing to do this, offset and slope are stored as 32-bit float so the destination has to start at an even address to have alignment.

    Another option is to just use CPU1, prior to allocating ADC to CPU2, if possible to simplify temp sensor routines reading.

    Regards,

    Joseph