Diagnostics & Protection
Diagnostic System Overview
The TLE92466ED provides comprehensive diagnostics for fault detection, protection, and system monitoring.
Diagnostic Architecture
```text Diagnostic Flow:
1
2
3
4
5
6
7
8
9
10
11
12
13
Channels (6) โโโฌโโโถ Per-Channel Errors โโโถ DIAG_ERR_CHGRx
โ
โโโโถ Per-Channel Warnings โโถ DIAG_WARN_CHGRx
โ
โโโโถ Feedback Values โโโโโโโถ FB_xxx registers
Global โโโโโโโโโฌโโโถ Supply Faults โโโโโโโโโถ GLOBAL_DIAG0
โ
โโโโถ Internal Faults โโโโโโโถ GLOBAL_DIAG1
โ
โโโโถ Memory Faults โโโโโโโโโถ GLOBAL_DIAG2
Fault Output โโโถ FAULTN Pin (open drain, active low) ```text
Global Diagnostics
GLOBAL_DIAG0 - Supply & Temperature
| Bit | Flag | Type | Description |
|---|---|---|---|
| 14 | SPI_WD_ERR | Error | SPI watchdog timeout |
| 10 | POR_EVENT | Event | Power-on reset occurred |
| 9 | RES_EVENT | Event | External reset (RESN pin) |
| 8 | COTWARN | Warning | Central over-temperature warning |
| 7 | COTERR | Error | Central over-temperature error |
| 6 | CLK_NOK | Error | Clock fault detected |
| 5 | VDD_OV | Error | VDD overvoltage |
| 4 | VDD_UV | Error | VDD undervoltage |
| 3 | VIO_OV | Error | VIO overvoltage |
| 2 | VIO_UV | Error | VIO undervoltage |
| 1 | VBAT_OV | Error | VBAT overvoltage |
| 0 | VBAT_UV | Error | VBAT undervoltage |
Clearing: Write 1 to clear (rwh type)
GLOBAL_DIAG1 - Internal Supplies
| Bit | Flag | Description |
|---|---|---|
| 15 | HVADC_ERR | HV ADC error |
| 6 | VPRE_OV | Pre-regulator OV |
| 5 | REF_OV | Reference OV |
| 4 | REF_UV | Reference UV |
| 3 | VDD2V5_OV | 2.5V supply OV |
| 2 | VDD2V5_UV | 2.5V supply UV |
| 1 | VR_IREF_OV | Bias current OV |
| 0 | VR_IREF_UV | Bias current UV |
GLOBAL_DIAG2 - Memory & ECC
| Bit | Flag | Description |
|---|---|---|
| 4 | OTP_VIRGIN | OTP not configured |
| 3 | OTP_ECC_ERR | OTP multi-bit error |
| 1 | REG_ECC_ERR | Register ECC error |
Channel Diagnostics
DIAG_ERR_CHGRx - Error Flags
Per-channel error register (one per channel):
| Bit | Flag | Description | Action |
|---|---|---|---|
| 4 | OLSG | Open load or short to ground | Check load connection |
| 3 | OTE | Over-temperature error | Reduce current/improve cooling |
| 2 | OL | Open load | Check load connection |
| 1 | SG | Short to ground | Check wiring |
| 0 | OC | Over-current | Reduce setpoint/check load |
Reading:
cpp
auto diag = driver.get_channel_diagnostics(Channel::CH0);
if (diag->overcurrent) {
// Handle OC fault
}
text
DIAG_WARN_CHGRx - Warning Flags
| Bit | Flag | Description |
|---|---|---|
| 3 | OLSG_WARN | OLSG warning |
| 2 | PWM_REG_WARN | PWM regulation warning |
| 1 | I_REG_WARN | Current regulation warning |
| 0 | OTW | Over-temperature warning |
Protection Features
Over-Current Protection
Detection: ```text I_load > I_setpoint + margin
1
2
3
Threshold: Configurable per channel
Response: Immediate shutdown
Recovery: Clear fault, re-enable ```text
Configuration:
- Automatic in ICC mode
- Threshold based on setpoint
- Fast response (<10ยตs)
Open Load Detection
ON-State Detection: ```text I_load < OL_TH ร I_setpoint
1
Where: OL_TH = 1/8 to 7/8 (configurable) ```text
OFF-State Detection:
text
Diagnostic current applied
Voltage measured
Load impedance calculated
text
Configuration:
cpp
// Set OL threshold to 3/8 of setpoint
ChannelConfig config{
.open_load_threshold = 3 // 3/8 threshold
};
driver.configure_channel(Channel::CH0, config);
text
Short to Ground Detection
Detection Method:
- Current rises above setpoint
- Voltage drops below threshold
- Immediate detection
Response:
- Channel disabled
- SG flag set
- FAULTN pin asserted (if enabled)
Over-Temperature Protection
Two Levels:
- Warning (OTW): ~165ยฐC
- Warning flag set
- Operation continues
- Reduce load recommended
- Error (OTE): ~175ยฐC
- Channel disabled
- Error flag set
- Cooling required
Temperature Monitoring:
text
Tj (Junction) โโโถ Comparison โโโถ Flags
โ โ
โ โโโโถ OTW (165ยฐC)
โ โโโโถ OTE (175ยฐC)
โ
โผ
Thermal Shutdown (auto-recovery)
text
Supply Voltage Monitoring
VBAT Monitoring: ```text Configurable thresholds: UV: V_BAT_UV = VBAT_UV_TH ร 0.16208V OV: V_BAT_OV = VBAT_OV_TH ร 0.16208V
Example: UV=7V, OV=40V VBAT_UV_TH = 7V / 0.16208V โ 43 (0x2B) VBAT_OV_TH = 40V / 0.16208V โ 247 (0xF7) ```text
Configuration:
cpp
driver.set_vbat_thresholds(
43, // UV threshold (7V)
247 // OV threshold (40V)
);
text
Watchdog Systems
SPI Watchdog
Purpose: Detect communication loss
Operation:
text
WD_RELOAD counter โโโถ Decrement โโโถ Timeout?
โฒ โ
โ โโโถ No: Continue
โ โ
โโโโโโโโโโ Reload โโโโโโโโโโโโโโโดโโถ Yes: Fault
text
Configuration: ```cpp // Enable and reload periodically driver.reload_spi_watchdog(1000);
// In main loop: while (running) { driver.reload_spi_watchdog(1000); // โฆ other operations } ```text
Timeout Calculation: ```text t_timeout = WD_TIME / f_spi_wd
Where: f_spi_wd configurable ```text
Clock Watchdog
Purpose: Monitor oscillator
Detection:
- Internal oscillator failure
- Clock frequency deviation
- Automatic detection
Response:
- CLK_NOK flag set
- Device enters safe state
- All outputs disabled
Fault Masking
FAULT_MASK Registers
Control which faults assert the FAULTN pin:
FAULT_MASK0 (0x0016):
text
Per-channel error masking:
Bit 0: CH0_ERR_MASK
Bit 1: CH1_ERR_MASK
...
Bit 5: CH5_ERR_MASK
text
FAULT_MASK1 (0x0017):
text
Per-channel warning masking:
Bit 0: CH0_WARN_MASK
Bit 1: CH1_WARN_MASK
...
Bit 5: CH5_WARN_MASK
text
FAULT_MASK2 (0x0018): ```text Global fault masking:
- Supply faults
- Temperature faults
- Communication faults ```text
Usage: ```cpp // Mask CH0 warnings from FAULTN write_register(FAULT_MASK1, (1 ยซย 0));
// Enable all error reporting write_register(FAULT_MASK0, 0x0000); ```text
Diagnostic Monitoring Strategy
Polling Approach
```cpp void monitor_system() { // Check global status auto status = driver.get_device_status();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
if (status->any_fault) {
// Handle global faults
if (status->vbat_uv) {
log("VBAT undervoltage!");
}
if (status->ot_error) {
log("Over-temperature!");
}
}
// Check each active channel
for (int ch = 0; ch < 6; ch++) {
auto diag = driver.get_channel_diagnostics(Channel(ch));
if (diag->overcurrent) {
log("CH%d: Over-current!", ch);
driver.enable_channel(Channel(ch), false);
}
if (diag->open_load) {
log("CH%d: Open load!", ch);
}
if (diag->short_to_ground) {
log("CH%d: Short to ground!", ch);
driver.enable_channel(Channel(ch), false);
}
} } ```text
Interrupt-Driven Approach
```cpp // FAULTN pin interrupt handler void FAULTN_IRQHandler() { // Read global diagnostics uint16_t diag0 = read_register(GLOBAL_DIAG0);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Identify fault source
if (diag0 & VBAT_UV) {
handle_vbat_fault();
}
// Check channel faults
for (int ch = 0; ch < 6; ch++) {
uint16_t ch_err = read_register(DIAG_ERR_CHGR0 + ch);
if (ch_err) {
handle_channel_fault(ch, ch_err);
}
}
// Clear faults
driver.clear_faults(); } ```text
Fault Recovery Procedures
Over-Current Recovery
```text
- Disable affected channel
- Read actual current (FB_I_AVG)
- Check if transient or persistent
- Reduce setpoint if needed
- Clear fault flags
- Re-enable with lower current
- Monitor for recurrence ```text
Open Load Recovery
```text
- Verify load connection
- Check wiring integrity
- Confirm load not damaged
- Clear fault flags
- Re-enable channel
- Adjust OL threshold if false positive ```text
Temperature Recovery
```text
- Disable channel immediately (automatic)
- Allow cooling period (>10s)
- Check thermal management
- Reduce current setpoint
- Clear fault flags
- Re-enable with lower current
- Monitor temperature (OTW flag) ```text
Supply Fault Recovery
```text
- Check supply voltage
- Verify within operating range
- Check supply stability
- Adjust thresholds if transient
- Clear fault flags
- Resume operation ```text
Best Practices
Monitoring Frequency
```text Recommended polling rates:
- Critical channels: 10 Hz (100ms)
- Normal channels: 1 Hz (1s)
- Global status: 1 Hz (1s)
- FAULTN pin: Interrupt-driven (immediate) ```text
Fault Logging
```cpp struct FaultLog { uint32_t timestamp; Channel channel; uint16_t error_flags; uint16_t current_setpoint; uint16_t actual_current; uint16_t vbat; };
// Log faults for analysis void log_fault(const FaultLog& log); ```text
Preventive Measures
- Set appropriate thresholds
- Monitor warnings before errors
- Implement graceful degradation
- Log all fault events
- Periodic system health checks
| Navigation: โ Channel Modes | Next: Driver API โ |