If you don’t quite understand the title of this post, don’t worry that’s normal! So let me explains. TPMP stands for Thermo-regulated Power Measurement Platform, and PVT (Power, Voltage, Temperature) characterization is a step in semiconductor manufacturing that involves testing wafers with various voltages, clock frequencies, and temperatures – known as Operating Performance Points (OPP) – to see how the properties of the wafer change.
The equipment required to perform this characterization is usually very expensive, and the process takes time. So BayLibre was tasked by one of their customers to automate the process, and find a lower cost solution. That’s how BayLibre TPMP came to life.
The TPMP is comprised of six main hardware components in order to measure NXP i.MX8 processor die-temperature:
- Peltier element
- Meerstetter TEC-1091 Peltier controller
- Fan
- Heatsink temperature sensor
- Chip external temperature sensor
- LCD display to monitor temperature, voltage, and current.
The TEC-1091 chip controls both the Peltier element and the fan to heat or cool the die to the specified temperature. The system supports temperature from 12°C to 115°C, however there’s a delta between the measured and actual die temperature of about 2°C for low-temperature ranges and 8°C for high-temperature ranges due to thermal resistance. That means the system’s chip external sensor must be calibrated before measurement to adjust for this delta in software.
It takes between 5 and 10 minutes to ramp from 25°C (ambient room temperature) to 115°C and stabilize at this temperature. The software is written in Python3, and should be easy to integrate in an automation suite. BayLibre mentions the source code can be retrieved with Git:
1 |
git clone ssh://git@bitbucket.sw.nxp.com/mps/tpmp_ctrl.git |
But I get the following error while running the command:
1 |
ssh: connect to host bitbucket.sw.nxp.com port 22: Connection refused |
The script enable the user to set the die temperature, launch tests and save the results, and includes post-processing tools to analyze test results.
It’s what the output would look like when setting the die temperature to 30:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
2018-03-01 17:49:36,246:example:INFO:connected to 2 {'object temperature': (25.540390014648438, 'degC'), 'target object temperature': (25.0, 'degC'), 'output current': (0.2256602793931961, 'A'), 'loop status': (2, ''), 'output voltage': (0.5687777996063232, 'V'), 'sink temperature': (24.281158447265625, 'degC')} 2018-03-01 17:49:36,343:example:INFO:set object temperature for channel 1 to 30.0 C query for loop stability, loop is not stable, obj temp: 25.541671752929688 query for loop stability, loop is not stable, obj temp: 26.036972045898438 query for loop stability, loop is not stable, obj temp: 29.798294067382812 query for loop stability, loop is not stable, obj temp: 34.04029846191406 query for loop stability, loop is not stable, obj temp: 34.05628967285156 query for loop stability, loop is not stable, obj temp: 31.088790893554688 query for loop stability, loop is not stable, obj temp: 28.541671752929688 query for loop stability, loop is not stable, obj temp: 28.725234985351562 query for loop stability, loop is not stable, obj temp: 30.931259155273438 query for loop stability, loop is not stable, obj temp: 32.34950256347656 query for loop stability, loop is not stable, obj temp: 31.699417114257812 query for loop stability, loop is not stable, obj temp: 30.126022338867188 query for loop stability, loop is not stable, obj temp: 29.331558227539062 exit program with stability status: is stable {'object temperature': (29.967880249023438, 'degC'), 'target object temperature': (30.0, 'degC'), 'output current': (-0.5534029603004456, 'A'), 'loop status': (2, ''), 'output voltage': (-1.6266319751739502, 'V'), 'sink temperature': (24.3184814453125, 'degC')} |
The Peltier element temperature overshoots to 34°C before stabilizing at around 30°C.
The solution is said to cost around ten times less to build than standard equipment, and it’s easier and faster to use, as you can run hundreds of test scripts with different power, temperature and voltage values within two hours. Doing the same thing manually may take a full day.
Eventually support for TPMP may be integrated into KernelCI project. You’ll find more details on BayLibre blog post.
Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress
Where is Tkaiser 🙂 ? Thermal regulation is a game changer on those SBC’s. Just look at the RaspberryPi where the thermal regulation is controlled by an obscure ThreadX binary blob, and your CPU is only running at half the speed 🙂
> Thermal regulation is a game changer on those SBC’s
Clearly not. The Foundation “outdoes” itself with each new thermal design*, and yet they’re wildly successful compared to those wanna-be-Pi losers wasting time and money (no matter how little — any time or money > 0 is a waste) on such worthless automation as the one subject to this article. So I don’t know why Jean-Luc wastes the time of cnx readers with this Foundation-disproven pseudo-engineering /s
* RPi4 idling at 60C (post fix) at 27C amb is worthy of the Guiness book.
>thermal regulation is controlled by an obscure ThreadX binary blob,
I’m not totally sure that’s a bad thing. Seems a bit better than some random code written by an intern running on an invisible 8051 somewhere in the chip that has a port to main memory and io.
> some random code written by an intern running on an invisible 8051 somewhere in the chip that has a port to main memory and io
Aren’t we talking about this exactly? ThreadX doesn’t run on an 8051 but on the two VideoCore CPU cores…
>Aren’t we talking about this exactly?
Not really. You know the videocore cores are there. That’s better than the only hint of a pm core being hidden somewhere being a random mention of an interrupt for it in some header file.
>ThreadX doesn’t run on an 8051 but on the two VideoCore CPU cores…
ThreadX is documented, has support for some limited memory protection, presumably pretty battle hardened[0] and so on. If I have to have something that has unfettered access to everything I’d prefer it had the potential to be implemented properly at least.
0 – It’s in the ex-broadcom now-cypress WICED IoT platform and maybe broadcom wifi firmware, Marvell’s wifi firmware
“ThreadX is documented”
That’s like saying it is X86 is “standard”.
When you have a random chip with just some crappy vendor code to work from knowing what to use for the opp table for cpufreq is a guess really. This could help make some less than stable boards better.
BayLibre does seriously awesome work.
and additionally useful for hardware climate effects simulation also?
Not really. When you have an irregular chip with simply some bad seller code to work from realizing what to use for the opp table for cpufreq is an estimate truly.