Skip to content

Thermal Management

Intermediate10 min read
Assumes: 0.1 Anatomy of an SoC, 0.4 Power Architecture & PMIC
TL;DR

Heat is the invisible enemy of automotive electronics. A cockpit SoC dissipates 5–15W inside a sealed dashboard cavity with no fan. Thermal management determines whether your system runs at full speed or throttles to a crawl. AEC-Q100 grades define operating temperature ranges. TSENS monitors junction temperature. Understanding the thermal path — junction → TIM → heatsink → ambient — is what separates “my board works on the bench” from “my board works in a car parked in Phoenix.”

You’ve been there: bench demo flawless, every KPI green, VP already drafting the press release — then summer field trials turn the cluster into a slideshow and someone asks if you pushed a bad OTA. You didn’t. The die is just cooking behind a sun-baked dash. You can flash perfect images and tune every partition, but if the die can’t shed heat, Kryo cores drop frequency, Adreno frame rates collapse, and the cluster goes black. Thermal isn’t a hardware-team footnote — it’s a daily debug variable on QNX, AAOS, and AMSS stacks.

Phones have fans (sometimes), users hold them in open air, and throttling just means a slower scroll. Cars are different.

Factor Phone / Lab Bench Automotive Cockpit
Cooling Open air, user hand as heat sink Sealed plastic housing, no fan
Ambient ~25°C office, AC on -40°C to +85°C cabin; dashboard sun load 80°C+
Consequence of throttle User waits 2 seconds Cluster freezes at 70 mph
SoC junction (Tj) Rarely hits trip points Can reach 125°C under sustained GPU + camera load

Mnemonic: “Phone throttles, user waits. Car throttles, driver panics.”

Cockpit SoCs (SA8155P, SA8295P) live behind the display stack — sandwiched between a sun-loaded dash surface and a PCB with limited airflow. Every watt the PMIC delivers (Page 0.4: P = V × I) becomes heat the package must reject. There is no escape valve except conduction through TIM and convection through whatever air gap the mechanical team left you.

Mental Model

Think of the SoC as a stove burner in a sealed kitchen — except it’s noon in Phoenix, not a cooking-show set with overhead ventilation. The burner (die junction) heats a cast-iron plate (heat spreader / package lid). The plate sits on a countertop whose quality varies by factory shift (TIM + heatsink). The kitchen has one window cracked (enclosure vent slots, if ME remembered them). Block any step in that chain and you’re basically running a sauna at 70 mph. Mnemonic: “Junction heats, case spreads, ambient absorbs.”

Before you grep sysfs, know which temperature grade your BOM actually promises — silicon qualified for the wrong zone is a layout problem you can’t patch in software.

Automotive silicon is qualified to AEC-Q100, which assigns temperature grades based on where the part lives in the vehicle. Your cockpit SoC BOM will cite a grade — verify it matches the mounting location.

Grade Ambient Range Typical Location
Grade 0 -40°C to +150°C Under-hood, adjacent to engine/exhaust
Grade 1 -40°C to +125°C Under-hood, general powertrain ECUs
Grade 2 -40°C to +105°C Passenger compartment — cockpit SoCs live here
Grade 3 -40°C to +85°C Passenger compartment, less thermally harsh mounting
Grade 4 0°C to +70°C Consumer / commercial — NOT for automotive

Rule of thumb: If someone hands you a Grade 4 part for an IVI project, reject it before layout. Grade 2 is the default assumption for Qualcomm SA8155P/SA8295P cockpit designs.

Think About It

Your pager goes off at 2:47 AM: “IVI throttling at 95°C on the bring-up bench — but the environmental chamber run at 85°C ambient passed clean.” The bench room is 25°C. You’re on-call. What explains the mismatch?

Reveal Answer

On the bench at 25°C, a bad TIM bond or blocked vent breaks the thermal path (Rcs + Rsa) — TSENS reads 95°C junction while room ambient looks fine because heat can’t escape the sealed housing. The 85°C chamber applies uniform ambient with airflow but doesn’t replicate sun-loaded dashboard heating or factory TIM defects. Use an IR camera on the heatsink and read /sys/class/thermal/thermal_zone* — don’t trust room temperature alone when junction is throttling.

Grades tell you what ambient the part survives; the thermal path tells you how fast heat actually leaves the die.

Heat flows from where it’s generated (transistor junctions) to where it’s dumped (ambient air). Each interface adds thermal resistance (°C/W).

flowchart LR
    TJ["Die Junction (Tj)<br/>Heat source"]
    TIM["Thermal Interface Material<br/>TIM / paste / pad"]
    HS["Heat Spreader + Heatsink<br/>Aluminum / copper"]
    AMB["Ambient Air (Ta)<br/>Sealed enclosure"]

    TJ -->|"Rjc"| TIM
    TIM -->|"Rcs"| HS
    HS -->|"Rsa"| AMB

Steady-state equation:

Tj = Ta + P × (Rjc + Rcs + Rsa)

Where P is power dissipation (watts), Ta is ambient temperature, and Rjc / Rcs / Rsa are junction-to-case, case-to-sink, and sink-to-ambient resistances.

Resistance What It Represents Automotive Pain Point
Rjc Die → package lid Fixed by silicon vendor; you don’t tune this
Rcs Package → heatsink TIM quality — factory application, voids, dry-out
Rsa Heatsink → ambient Dominant term in sealed enclosures with poor airflow

In a phone with vapor chamber and open air, Rsa is small. In a dashboard module with a plastic shroud and zero fan, Rsa dominates — which is why mechanical design matters as much as BSP tuning.

Resistance is the physics; TSENS is where the BSP turns physics into policy.

Qualcomm cockpit SoCs embed multiple TSENS (temperature sensor) points across the die — not one reading for the whole chip.

Zone Typical Location What Overheats It
CPU (Kryo) Core cluster Hypervisor load, AAOS app bursts
GPU (Adreno) Graphics block Cluster rendering, 3D nav, multi-display
Modem / compute Modem subsystem AMSS sustained data, RF heat
Memory controller DDR interface Bandwidth-heavy camera + GPU workloads
ISP / camera Spectra pipeline 4–6 camera streams, surround-view

The thermal driver escalates through trip points as temperature rises:

stateDiagram-v2
    [*] --> Normal: Boot / idle
    Normal --> Throttle: Trip point 1 exceeded
    Throttle --> Normal: Temp drops below hysteresis
    Throttle --> Critical: Trip point 2 exceeded
    Critical --> Shutdown: Emergency cutoff
    Shutdown --> [*]: Power cycle required

    note right of Normal: Full freq / voltage
    note right of Throttle: Reduce CPU/GPU clocks,<br/>lower display brightness policy
    note right of Critical: Force shutdown to<br/>prevent silicon damage

On AAOS, thermal policy lives in the kernel and vendor HAL:

  • /sys/class/thermal/thermal_zone* — one entry per zone; type names the sensor, temp reports millidegrees Celsius
  • trip_point_* — temperature thresholds that trigger mitigation
  • cooling_device* — linked devices (CPU freq, GPU devfreq, display brightness) the framework throttles
  • Device tree — thermal-zones node maps TSENS to trip points and cooling maps

QNX doesn’t expose Android’s sysfs tree, but thermal data is still reachable:

  • pidin -F "%a %b %c %p" — process CPU; correlate with suspected throttle windows
  • Vendor thermal plugins / BSP utilities — OEM-specific; often read the same TSENS via SPMI
  • sysinfo — system load snapshot during thermal events
  • Screen / compositor logs — frame drops when GPU is throttled show up before CPU metrics move

When cluster FPS drops but top shows low CPU, check GPU thermal zone and devfreq governor state before rewriting application code.

Common Gotcha

“Bench testing proves thermal robustness.” That’s like claiming your winter coat works because you wore it indoors. Your bench sits in a 25°C office with open airflow around the bare board. The actual car has the SoC behind a display, in a sealed plastic housing, with sun load heating the dashboard to 80°C+. The delta between bench ambient and in-vehicle ambient can be 60°C. A design that idles at 55°C on the bench can sit at 105°C junction in a parked Arizona lot.

Common Gotcha

“Thermal warnings are just noise — ignore them and keep testing.” Sure — and smoke alarms are just ambiance until the kitchen catches fire. The SoC will progressively reduce CPU/GPU frequency to shed heat. UI frame rate drops from 60 fps to 20 fps. Touch latency spikes. If temperature keeps rising past the critical trip point, the SoC performs an emergency shutdown to prevent silicon damage. In a cockpit, that means cluster and infotainment go black while driving.

Trip points tell you when things hurt; TDP tells you how many watts you’re allowed to generate in the first place.

TDP is the sustained power the thermal solution must handle — not peak burst, not idle.

Platform Typical TDP Cooling Strategy
SA8155P ~5–8W Passive heatsink + TIM; sealed enclosure
SA8295P ~10–15W Larger spreader; premium designs add heat pipe / cold plate
Strategy How It Works Trade-off
Passive Heatsink + conduction to enclosure chassis Zero moving parts; depends on Rsa — hard in sealed dash
Active Fan or blower (rare in cockpit) Noise, dust, warranty failures — OEMs avoid
Heat pipe / cold plate Moves heat to a remote sink or metal structure Cost + mechanical complexity; common in premium multi-display platforms

TDP budgeting crosses teams: camera team wants 4 ISP streams, HMI wants 3D cluster, telematics wants modem always-on. Sum the rails (Page 0.4) and compare to what the heatsink can reject at Grade 2 ambient + sun load.

Reading Thermal Data from the Bench

Find your zones:

Terminal window
# AAOS / adb shell
for z in /sys/class/thermal/thermal_zone*; do
echo "$(cat $z/type): $(cat $z/temp) m°C"
done

Interpret policy:

Terminal window
cat /sys/class/thermal/thermal_zone0/policy # step_wise, power_allocator, etc.
cat /sys/class/thermal/thermal_zone0/trip_point_0_temp
cat /sys/class/thermal/thermal_zone0/trip_point_0_type # passive, hot, critical

Device tree (BSP source): search for thermal-zones and cooling-maps — trip points bind TSENS readings to CPU freq caps and GPU devfreq limits.

IR camera vs TSENS: An IR gun measures package surface temperature — always lower than junction (Tj). TSENS reads die-adjacent sensors; trust TSENS for trip-point logic, use IR to find TIM voids and airflow dead zones.

Provoke throttling for test: Run GPU stress (GL benchmark loop) plus sustained camera preview on all ports. Log thermal_zone* temps every second. You want to see the Normal → Throttle transition and confirm cooling maps respond before summer field trials do it for you.

Where You'll See This

“Works in spring, fails in summer” is a thermal pattern — not a mystery regression. Before blaming a software release for performance drops, always check thermal_zone temps and correlate with ambient / sun-load conditions.

Symptom mapping:

Symptom Check First
UI jank after 15–30 min parked GPU / CPU thermal zone temps
Camera freeze under surround-view ISP thermal zone + GPU load
Random reboot, no crash dump Critical thermal shutdown trip
Fine in winter, bad in summer Ambient + enclosure sun load

War story: An OEM launched in Q1 (winter). Summer came, and the surround-view camera stream would freeze after 20 minutes in parked cars. Logs showed no software fault — frame drops coincided with ISP thermal zone hitting throttle trip. Root cause: heatsink compound (TIM) applied unevenly at factory, creating a 15°C hot spot on the ISP zone. Fix: tighter TIM application spec and inline thermal imaging at production — zero BSP changes required.

When performance “regresses” seasonally, ask “what’s the junction temperature?” before opening a JIRA on the app team.

Connect the Dots

Page 0.4 (Power Architecture): Power dissipation IS heat generation. Every rail you probe — P = V × I — adds to the watt count the thermal path must reject. Page 5.1 (Platform Overview): AEC-Q100 qualification includes thermal stress and temperature cycling — the grade on your BOM is earned, not assumed. Page 9.7 (Validation): Environmental chambers (-40°C to +105°C) verify thermal behavior before SOP. Page 10.1 (Debug Bench): Bench thermal ≠ vehicle thermal — always replicate sealed-enclosure conditions before signing off.

  1. Automotive cockpits are sealed, sun-loaded, fanless — Rsa (sink-to-ambient) dominates the thermal chain.
  2. AEC-Q100 Grade 2 (-40°C to +105°C) is the default for passenger-compartment cockpit SoCs.
  3. TSENS zones drive throttle policy; frame drops with low CPU usage mean GPU/ISP thermal, not app bugs.
  4. Ignore thermal warnings → progressive throttle → emergency shutdown → black cluster while driving.
  5. Check thermal_zone temps before every seasonal performance investigation.

Check Your Understanding

1. Which AEC-Q100 grade applies to cockpit SoCs in the passenger compartment?

Recall

2. SoC is at 98°C and UI frame rate drops to 15 fps. No software changes were made. Most likely cause?

Applied

3. In the thermal resistance chain (Rjc + Rcs + Rsa), which gap typically contributes the most resistance in automotive?

Applied

4. Cluster rendering shows low CPU usage in `top` but visible frame drops after 20 minutes parked in sun. Which diagnostic step comes first?

Recall

5. An OEM launches in Q1 with no thermal issues. In summer, surround-view freezes after 20 minutes in parked cars. Logs show ISP thermal zone hitting trip point 1. Root cause investigation finds uneven TIM application at factory. Why did winter testing miss this?

Applied

6. Under simultaneous 4K cluster rendering, navigation GPU load, and four camera ISP streams, the display tears despite low CPU utilization. Thermal zones are normal. Which cross-domain explanation fits?

Synthesis

Connects to: Module 0.1 — Anatomy of an SoC · Module 6 — Three Operating Systems

Further Reading