Drogheda/03-Architecture-Hardware/2026-09-28_v6-audit-attachments/A_power.md

534 lines
60 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# A (Power tree) + F-5x (temperature sensors / fan) — v6 audit findings
Snapshot: sch ecee9fed… / pcb 6ddec80d… (evidence pack 2026-09-28)
Auditor: POWER (block §4-A plus the temperature-sensor and fan parts of §4-F). All values come from the evidence pack (`nets.json`, `ref_pins.json`, `components.csv`, `pcb_pads.csv`, `pcb_tracks.csv`, `vias.csv`, zone fills parsed from `src/hbox-watchdog-v6.kicad_pcb`) and from datasheets fetched this session. Scratch scripts and results are in `/home/claude/v6audit/work/A_power/` (`q.py` net/ref dump, `segs.py` segment lists, `path.py` widest-path bottleneck and resistance per current path, `pdist.py` pad edge-to-edge distances, `islands.py`/`island_of.py` GND-pour island map, `under.py` copper under parts).
Conventions: "edge" = pad-copper to pad-copper distance (shapely, true pad shapes); "ctr" = pad centre distance. Track resistance assumes 1 oz (35 µm) copper, ρ = 1.72e-8 Ω·m. Trace temperature rise uses IPC-2221 (k = 0.048 external, 0.024 internal). IPC-2221 is known to be pessimistic for inner layers next to planes, and IPC-2152 gives roughly half the internal rise. Both are quoted where it matters. The GND-island analysis uses the **zone fills stored in the file**. Refill before fab and re-run `islands.py`.
## Sources read
- `findings/_COMMON_BRIEF.md`, `INDEX.md`, `evidence/MANIFEST.md`, master brief §3–§5, §4-A, §4-F (temperature/fan).
- `docs/2026-09-28_Drogheda_EinarBoard-v6_Review-vs-V5.5-Lessons_v1.0.md` (§1 F1/F4/F5/F6/F7/F8, §2, §3, §4 checklist).
- `docs/2026-09-27_Drogheda_EinarBoard-V5.6_ECO_ES_v1.0.md` (§0 R1–R5, §A, §C, §D, §E, §F, §H, §I).
- `docs/2026-09-28_Drogheda_EinarBoard-V5.6_Schematic-Change-Report_v1.0.md` (§1, §2, §6).
- `docs/2026-09-28_H0008_charging-overnight-log.md`.
- `docs/project/claude__2026-09-27_HBOX-V5.5-V4_Modem-on-battery_Diagnosis-and-0.5.8-Field-Strategy.md`.
- Memory copies in `docs/memory/`: `drogheda-battery-hightemp`, `drogheda-einarboard-modem-rail`, `drogheda-backup-lowpower`, `drogheda-power-cost`, `drogheda-fan-policy`, `drogheda-einarboard-v5-audit`, `drogheda-einarboard-harness`, `drogheda-einarboard-short-incident`, `drogheda-einarboard-v6-brief`, `preferences`.
- Evidence: `components.csv`, `nets.json`, `ref_pins.json`, `ic_pins_U6/U25/U20/U2/U12/U17/U21.csv`, `mcu_pins.csv`, `pcb_footprints.csv`, `pcb_pads.csv`, `pcb_tracks.csv`, `vias.csv`, `zones.csv`, `net_routing_summary.csv`, `drc_summary.md`, `clearance_24v.md`, `diff_v56_v6.md`, `sch_pcb_sync.md`, `bom.csv`, `firmware_constants.csv`; firmware `src/fw/hbox_v5_bringup.ino`, `board_v5.h`.
- Datasheets (fetched this session):
- **LTC4040** Rev B (ADI `4040fb.pdf`): pin functions p.10–11; EC p.3–5 (ICHG 950/1000/1050 mA at RPROG 2k, VCLN 23.5/25/26.5 mV, VBSTFB 0.78/0.80/0.82 V, PFI 1.17/1.19/1.21 V falling with 30 mV hysteresis, RSTFB 0.74 V, NTC hot 34.9 %VIN / cold 76.5 %VIN, safety timer 4.25 h Li-ion, ILIMBST 5.5/6.5/7.5 A, IBATQ 40 µA, IINQ 570 µA); "2.5 A from a battery as low as 3.2 V" p.15; "external load prioritized … charge current drops to zero" p.13/16; RPROG = 2000 V/ICHG p.18; CSYS "at least 100 µF low-ESR ceramic" p.10, "≥75 µF transient" p.21; θJA 43 °C/W; overtemperature protection only (no charge-current thermal regulation), p.5 Note 2; layout p.22–23; abs max VIN 6 V steady / 7 V transient, VSYS/BAT/SW 6 V p.2; OVSNS "6.2 k to the connector if OVP used, else short to VIN" p.11.
- **TPS54360B** (TI `tps54360b.pdf`): Vref 0.792/0.800/0.808 V; fSW = 92417·RT^-0.991 (162 k → 600 kHz); tON,min 135 ns; peak switch limit 4.5/5.5/6.8 A; EN 1.2 V, Ip 1.2 µA, Ih 3.4 µA, VIN UVLO 4.1–4.3 V; gmps 12 A/V, gmea 350 µS; compensation equations; 5 V/3.5 A example design (53.6k/10.2k, 13k/6.8 nF/39 pF, 8.2 µH, 2×47 µF ceramic, B560C, 2×2.2 µF/100 V); soft start 1024 cycles; θJA 42 °C/W; abs max VIN 65 V.
- **AP64350** (Diodes DS41976 Rev 5-2): abs max VIN 42 V DC / 45 V 400 ms, EN 42 V; VIN 3.8–40 V; UVLO rising 3.5–3.7 V, hysteresis 400 mV; EN high 1.18–1.25 V / low 1.03–1.09 V, EN pull-up 5.5 µA; FB 792–808 mV; RT = 100000/fSW (200 k → 500 kHz); HS limit 4.25/5/5.75 A; tON,min 100 ns; Table 1 (5 V: 14.0 k/3.3 nF/47 pF, 5.5 µH, 2×22 µF); R5 = 4.67e3·fc·VOUT·COUT; θJA 45 °C/W.
- **MP1584** (MPS Rev 1.0): abs max VIN 30 V, all other pins (EN, FB, COMP, FREQ) 6 V; VIN 4.5–28 V; EN rising 1.5 V/hysteresis 0.3 V; UVLO 3.0/2.6 V; FB 0.776/0.8/0.824 V; switch limit 4.0–4.7 A.
- **AMS1117** (AMS `ds1117.pdf`): dropout 1.1 V typ/1.3 V max at 0.8 A; ground current 5/11 mA; output cap 22 µF tantalum; VOUT 3.251–3.399 V.
- **A7670X series Hardware Design V1.03** (SIMCom, Table 8 p.26–27): VBAT 3.4/3.8/4.2 V; 2 A peak (GSM max-power TX); supply ≥ 2 A for < 300 mV drop; ≥ 300 µF bulk (≥ 600 µF if the supply cannot give 2 A); VBAT trace ≥ 3 mm; off leakage 20 µA; PWRKEY ≥ 50 ms, STATUS ~7 s; A7670SA includes GSM 850/900/1800/1900.
- JLC DB (`get_jlcpcb_part` / `search_jlcpcb_parts`): C524806, C2071691, C15051, C6186, C51118, C15578, C840531, C5440143, C2827940, C165527, C88734, C88744, C116241, C881921, C206910, C206912, C206914, C20627123, C699039, C224019, C152082, C50603, C85100, C8678, C2624, C35349, C105362, C687163, C17700165, C17700167, C17700171, C153036, C440198, C86817, C15849, C138687, C28695, C22843, C22840, C25957, C23082, C23080, C99269.
## Findings
### A-01 24 V front end: the `/24V` branch is unfused and outside the D32 clamp, and it feeds parts rated 30 V / 42 V
- **Severity:** Blocker
- **Block / refs:** §4-A (input protection; lead "F2 only protects the U25 branch"); lesson F8; memory `drogheda-einarboard-v6-brief` (T9 "9–36 V in"), `drogheda-einarboard-short-incident`, `drogheda-power-cost` (MP1584 finding).
- **Evidence:**
- Topology (netlist): `P1.1 /24V_IN` splits into two branches.
- Branch 1: `F2 (0154002.DR, 2 A fast) → /VIN_FUSED → Q23 IRFR5305 → /VIN_PROT` (D32 SMCJ33A, C149/C150/C151) → U25.
- Branch 2: `Q10 IRFR5305 → /24V` = {C10 47 µF/50 V, C11, C22, Ren1, **U2.7 (MP1584EN VIN)**, **D20 → /VIN_MODEM → U20.2 (AP64350 VIN)**}. It has **no fuse**, and its only clamp is **D10 SMBJ33A** on `/24V_IN` (600 W, VC 53.3 V @ 11.3 A, C224019). D32 (1.5 kW) sits on branch 1 only.
- Ratings on branch 2:
- U2 MP1584EN: VIN operating 4.5–28 V, **abs max 30 V**. EN = /24V·20k/120k = 6.0 V at 36 V vs **EN abs max 6 V**.
- U20 AP64350: **abs max 42 V** (45 V for 400 ms).
- D21 PMEG3050EP (VRRM 30 V, leakage 8 mA @ 30 V per JLC) is reverse-biased by VIN_MODEM − MAIN5V = 36 − 0.45 − 4.79 ≈ **30.8 V at the 36 V spec limit** and ≈ 48 V during a D10 clamp event.
- Standards: 24 V truck systems see 28–28.8 V charging, ISO 16750-2 overvoltage 36 V/60 min, and ISO 7637-2 pulse 2a (+112 V, 2 Ω, 50 µs). Pulse 2a through D10 gives ≈ (112 − 45)/2 ≈ 33 A, above its 11.3 A 10/1000 µs rating, with a clamp ≥ 53 V. U2 dies at the 36 V overvoltage test and U20 is over its 42 V abs max during pulse clamping.
- Layout: the `/24V` branch is 1.5 mm on In1 at **0.15 mm** from the In1 GND pour and has a via **0.15 mm** from the B.Cu `/3V3` pour (`clearance_24v.md`). An inner-layer breakdown there is an unfused vehicle-battery short, or 24 V straight onto 3V3.
- F2 sizing today: U25 input at 2.5 A/5 V is 0.60 A @ 24 V, 1.25 A @ 12 V and 1.67 A @ 9 V. The Littelfuse 154 continuous-current derating (~75 %, lower when hot) puts a 2 A fuse at its limit on a 12 V machine.
- **Consequence:** (1) A short of C10/C22, U2, U20 or D22 (a U20 high-side short puts 24 V on VBAT_MODEM and SMAJ5.0A D22 crowbars it) draws vehicle-fuse current through 0.3–1.5 mm board copper. That is a fire and harness risk. (2) U2, and in pulses U20 and D21, are over their absolute maximum ratings on the v6 target supply (9–36 V, 24 V trucks). (3) This design also carries the V5.5 U2 exposure forward.
- **Fix:** Make U25 the only consumer of vehicle voltage. Everything else then runs from protected 5 V.
1. **Fan from VEH5V, delete the 24 V fan buck.** DNP U2, L2, Dbk1, Cbst1, Rcomp1, Ccomp1, Rfreq1, Ren1, Ren2, R20, R21, and close JP1 (`/5V_FAN` = `/VEH5V`, upstream of RS1, so fan current is outside the LTC4040 limit). JP1 today is an *open* solder jumper: change the footprint to `Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm`, or fit a 0 Ω 0805. Fan current (assumed 0.2–0.3 A) adds to U25: ≤ 2.68 + 0.3 = 2.98 A vs 3.5 A rating and 4.5 A minimum current limit. Fan stays dark on battery, as today (ECO D4). This also retires the MP1584 cost item ($2.21 @100, C15051) and EMC items E3/E4 for U2.
2. **Modem buck input from MAIN5V only ("Option A").** Delete D20 and its 48 mm `/VIN_MODEM` run, and replace D21 with a copper bridge or 0 Ω link. U20 then never sees vehicle voltage. On battery its input rises from ~4.4 V to ~4.74 V (no 0.30 V diode drop; see A-05). On vehicle power the modem load (≤ 1.8 A peak at 5 V) becomes LTC4040 system load. The LTC4040 prioritises system load over charge current (datasheet p.13), and U25 is stiff: estimated 0.16 V dip for a 1.8 A step, against PFI rising max 4.66 V and U25 min 5.18 V with A-04. **Needs the modem auditor's agreement.** Option B, if the 24 V modem feed must stay: fuse and clamp as below and replace U20 with a ≥ 60 V synchronous buck, because the 42 V AP64350 cannot live behind a 53 V clamp.
3. **Q10 branch.** With (1) and (2) done, `/24V` has no loads. DNP Q10, DzG1, Rrp1, C10, C11, C22, and keep Q23 as the single reverse-polarity FET.
4. **F2.** Keep it on the (now only) branch. Rate it **3 A (0154003.DR, C206912, 2217 in stock)** for 24 V-only fleets, or **4 A (0154004.DR, C206914, 778 in stock)** if 12 V machines are in scope. Same holder footprint. Optional layout: put F2 ahead of D10 so a shorted TVS opens the board fuse.
- Effort check: every item is a schematic change (DNP/value) plus one short re-route (D21 bridge). No new parts.
- **Effort:** both (mostly schematic/BOM; D21 → bridge and removal of the D20 run are layout)
- **Confidence:** high on topology and ratings (netlist plus datasheets). Medium on the Option A system impact until the modem auditor reviews it and a bench test runs U25 with a 2 A modem step.
### A-02 LTC4040 (U6) thermal copper and placement repeat lesson F5 (the H0008 slow-charge mechanism)
- **Severity:** Blocker
- **Block / refs:** §4-A (LTC4040 thermal); lesson F5; ECO §D2 / §E1–E2; memory `drogheda-einarboard-v5-audit` (SW_BAT 0.3 mm critical); H0008 log.
- **Evidence (measured):**
| Item | v6 now | Target | Result |
|---|---|---|---|
| `/SW_BAT` U6.21/22 → L6.1 | F.Cu **0.50 mm × 11.9 mm** plus 0.25/0.30 mm necks at the pins; R ≈ 12.2 mΩ | ≥ 2 mm polygon | ❌ (V5.5 was 0.3 mm; improved but 4× short) |
| `/BAT_PLUS` P3.1 → L6.2 (battery current) | F.Cu **1.0 mm × 21.3 mm**, 10.4 mΩ | ≥ 1.5 mm + via farm | ❌ |
| `/BAT_PLUS` L6.2 → U6.23 (BAT pin, sense-class) | 1.0/0.5/0.25 mm, 18.8 mm | Kelvin from L6.2/CBAT | ⚠ acceptable electrically |
| U6 VSYS pins 1/24 → CSYS | 0.30 mm necks (1.5 mm) + 0.5 mm × 6.7 mm; C32/C33/C34 **3.9–5.3 mm** edge | pour, CSYS ≤ 2 mm | ❌ |
| CSYS GND return | C32.2 on F.Cu island 16 (the U6 EP island); **C33.2 on island 3**; C34.2 on its own 2.2 mm² island with 1 via | same island as EP, via array | ❌ |
| U6 EP (pad 25, 2.65 × 3.65 mm, solid zone connect) | **0 vias in EP**; nearest GND via **5.21 mm** (188.6, 102.7) | ≥ 9 vias to In1/In2 | ❌ |
| EP copper | F.Cu GND island 16 = **252 mm²** with 5 GND vias. Within 6 mm of U6: F.Cu GND 33.7 mm², In1 GND split between islands 0/1 (cut by 7 `/VFB_BST` + `/IGATE` + `/CHRG_*` In1 segments), In2 GND 99 mm², B.Cu = /3V3 pour | solid planes under U6 | ❌ |
| L6 distance | L6.1 ↔ U6.21/22 **8.65–9.10 mm** edge (10.7–11.1 ctr; footprints 15.25 mm) | ≤ 5 mm | ❌ |
| VIN caps C30 10 µF / C31 2.2 µF → U6.6 | **7.2 / 6.2 mm** edge | < 3 mm | ❌ |
| CBAT C35 22 µF | at P3 (192.0, 112.7): 5.2 mm from U6.23 but **21.9 mm** from L6.2 | at L6.2/BAT pin | ⚠ |
| Temperature sensor ≤ 10 mm of U6 | **none**; nearest is U3 SHT40 at **71.4 mm** | ≤ 10 mm | ❌ (F-51) |
- Trace temperature rise (IPC-2221 external, `/SW_BAT` 0.5 mm): charging at 2.42 A (R50 825 Ω) **+32 °C**; at 1.40 A (A-03) +9 °C; sustained backup at 3.6 A battery current (2.3 A at VSYS) **+79 °C**. The same current at 2.0 mm gives +8 °C.
- IC dissipation estimate (assumption: charger efficiency ≈ 90 % at 2.4 A, IC share ≈ 75 %):
- At 2.42 A: ≈ 0.75 W. As-built θJA ≈ 60–70 °C/W (the datasheet's 43 °C/W assumes a via array), so ΔTj ≈ 45–53 °C, before the 45 °C port ambient and enclosure rise.
- At 1.4 A: ≈ 0.25–0.3 W, so ΔTj ≈ 18–21 °C.
- The LTC4040 has **overtemperature shutdown only, with no charge-current thermal regulation** (datasheet p.5 Note 2). The H0008 pulsing (60–70 mV at 30 s) and the ~1.3 A average versus 2.42 A programmed are what on/off thermal cycling would produce. This is not yet proven: the clamp-meter and IR checks in the H0008 "Pendientes" 1–2 are still open.
- **Consequence:** R5 (≥ 1.3 A without thermal cycling) is not met by layout. In continuous backup the boost node and the VSYS necks run hot. This repeats the V5.5 lesson.
- **Fix (layout instructions, for Michelle):**
1. Re-cluster: L6 pad 1 ≤ 5 mm from U6.21/22. C32/C33/C34 ≤ 2 mm from VSYS pins 1/24, with GND pads on the EP island. C30/C31 ≤ 3 mm from pin 6. C35 (or an extra 22 µF 0805, C86817) at L6.2 next to BAT pin 23.
2. `/SW_BAT`: F.Cu polygon ≥ 2 mm wide covering pins 21–22 to L6.1, kept compact (it is the switch node).
3. `/BAT_PLUS` P3 → L6.2: ≥ 1.5 mm F.Cu (or a pour), plus ≥ 4 vias to an In2 copper area if routed inner.
4. `/MAIN5V`: pour from pins 1/24 over C32–C34 to the Q7 drain pads, ≥ 2 mm, with no 0.3/0.5 mm necks.
5. EP: 12 vias (3 × 4 at 0.9 mm pitch, 0.3 mm drill / 0.6 mm pad), plugged or capped (JLC via-in-pad). Or use the `QFN-24-1EP_4x5mm_P0.5mm_EP2.65x3.65mm_ThermalVias` footprint and add vias to reach ≥ 9.
6. Keep In1 and In2 GND solid for ≥ 5 mm around U6/L6: move the `/VFB_BST` and `/IGATE` In1 runs (see A-14).
7. Put the TMP102 from F-51 between U6 and L6.
- **Effort:** layout
- **Confidence:** high (measured from the board file). The OT-cycling causality stays medium until the H0008 clamp/IR test.
### A-03 R50 = 825 Ω programs 2.42 A. Set 1.43 kΩ to meet R5 at worst case
- **Severity:** Blocker
- **Block / refs:** §4-A (R50); lesson F4; ECO §C; R5; H0008 log; memory `drogheda-battery-hightemp`.
- **Evidence:**
- Datasheet: ICHG = 2000 V/RPROG (p.18), accuracy ±5 % (950–1050 mA at 2 k, p.3).
- R50 825 Ω/1 % (C50214): **2.42 A** nominal (2.28–2.57 A).
- V5.6 value 1.5 kΩ: 1.333 A nominal, **1.254–1.414 A** worst case, so the low corner is **below the R5 floor of 1.3 A**.
- **1.43 kΩ: 1.399 A nominal, 1.316–1.483 A** worst case, which is ≥ 1.3 A at every corner.
- H0008 (V5.5, same R50): ≈ 1.3 A average delivered, 8.5 h to C/8, pulsing charge (A-02). At 1.4 A the IC loss drops by (2.42/1.4)² ≈ 3×, and delivered current is about what H0008 actually got, without the cycling mechanism. Charge time for the ~11.6 Ah pack from ~3.5 V is ≈ 6–7 h (CC plus CV taper). The Li-ion safety timer (4.25 h, 3.7–5 h) only runs in CV (p.14), so it does not cut CC.
- Input side: 1.4 A × 4.0 V/(0.9 × 5.3 V) ≈ 1.17 A plus ≈ 0.35 A logic gives 1.52 A, against the RS1 limit of 2.14–2.41 A effective (A-07). The charger stops being input-limited.
- **Consequence:** At 825 Ω, v6 repeats the H0008 behaviour. U25 also sits at the RS1 limit (≈ 2.5 A continuous) whenever charging, which drives the A-06/A-07 thermal problems.
- **Fix:** R50 → **1.43 kΩ 1 % 0603, LCSC C22840** (Extended; 4965 in stock in the DB snapshot). If Leo prefers V5.6 BOM commonality, use 1.5 kΩ (C22843, Basic), but R5 is then met only nominally.
- **Effort:** schematic-only
- **Confidence:** high for the numbers. Medium that thermal cycling is the whole H0008 story (pending the clamp test).
### A-04 U25 set-point 5.00 V (4.87–5.14 V) is incompatible with the charge governor. Set R121 = 57.6 k
- **Severity:** Major
- **Block / refs:** §4-A (U25 set-point); lesson F7; ECO §A/§C ("≥ 5.30 V"); `firmware_constants.csv` (CHG_RAIL_ON 5.05, CHG_RAIL_OFF 4.90, V5_PFI 4.60).
- **Evidence (Vout = Vref·(1 + R121/R122), Vref 0.792/0.800/0.808 V, resistors 1 %):**
| R121 / R122 | min | nom | max | vs CHG_RAIL_ON 5.05 | vs LTC4040 VIN max 5.5 |
|---|---|---|---|---|---|
| 53.6 k / 10.2 k (as-is) | **4.871** | **5.004** | 5.140 | nominal below the start line: charger never (or randomly) enabled | ok |
| 56.2 k / 10.2 k | 5.069 | 5.208 | 5.350 | low corner 0.02 V above | ok |
| **57.6 k / 10.2 k** | **5.176** | **5.318** | **5.463** | ≥ 0.13 V above | 37 mV margin |
| 57.6 k / 10.2 k, 0.1 % resistors | 5.256 | 5.318 | 5.380 | ok | 120 mV margin |
- LTC4040 PFI from v6's R51 270 k / R52 100 k at 1.19 V: **falling 4.27/4.40/4.54 V, rising 4.38/4.51/4.66 V**. The firmware constant V5_PFI 4.60 V is stale (it comes from the old 287 k).
- As-is margin U25 min → PFI rising max = 0.21 V. With 57.6 k: 0.52 V.
- The ADC measures 5V_SENSE (R7/R8 10 k/10 k) against VDDA = the 3V3 LDO (±1.5 %, and lower on battery, A-08). Firmware thresholds carry ±2–3 % error unless calibrated with VREFINT.
- With the as-is topology the modem does not load VEH5V (it runs from /24V), so the V5.5 LTE-sag argument is gone on vehicle power. It comes back if A-01 Option A is adopted.
- **Consequence:** With FW 0.6.0 thresholds, v6 as-is will not start charging on most units, so R5 fails. The margins are thin under modem bursts if the modem moves to MAIN5V.
- **Fix:** R121 → **57.6 k 1 % 0603, LCSC C23082** (Extended; 3673 in stock in the DB snapshot). Optionally specify R121/R122 at 0.1 % to take the upper corner to 5.38 V. In firmware v6 (FW 0.7.x), calibrate the ADC against VREFINT and set V5_PFI = 4.40 V.
- **Effort:** schematic-only (plus firmware constants)
- **Confidence:** high
### A-05 Backup mode: worst-case load reaches 93–97 % of the LTC4040 boost capability during a 2 A modem burst; W5500 always powered; U20 input weakly bypassed
- **Severity:** Major
- **Block / refs:** §4-A (backup path, budget); lessons F1/F2; ECO §A, §I-1; R1, R3; memory `drogheda-einarboard-modem-rail`, `drogheda-backup-lowpower`; modem-on-battery diagnosis.
- **Evidence:**
- **What stays alive on battery (netlist):**
- `BAT → L6 → U6 boost → /MAIN5V`. Backup VSYS = 0.8·(1 + 499k/100k): **4.60/4.79/4.99 V** (VBSTFB 0.78–0.82 V). R53 must stay at 499 k because the 5.0 V limit sits at the top corner.
- From MAIN5V: (a) **D21 → /VIN_MODEM → U20 → modem** (D21 anode is *before* P5, so the cutoff switch does not cut this path; EN is held low by R113 when the MCU is unpowered). (b) **P5 (cutoff) → /SYS5V** → D12 → U17 (3V3: MCU and all logic), **U12 (3V3_ETH, EN tied to VIN → always on)**, F1 → Q1 (PWR_CTRL) → U21 → F9P, K1 coil (BYP_CTRL).
- `/VIN_MODEM` falls to MAIN5V − Vf(D21) once 24 V is gone. There is no separate "D21/MAIN5V" rail.
- **LTC4040 boost:** 2.5 A load from battery ≥ 3.2 V; switch limit 5.5 A min (p.4, p.15). It runs only when PFI < threshold (p.13). BAT quiescent 40 µA.
- **CSYS:** C32/C33 47 µF/16 V X7R 1210 plus C34 10 µF/50 V 0805 = 104 µF nominal, which meets the 100 µF text. Effective at 4.8 V ≈ 59 µF (assumed DC-bias loss −40 % / −40 %), below the 75 µF transient guidance (p.21).
- **U20 input (A7670 needs a 2 A-capable supply, HD Table 8):** C127 10 µF/50 V 0805 + C128 1 µF only. The V5.6 ECO specified 2×22 µF + 10 µF.
- **U20 UVLO:** falling ≈ 3.1–3.3 V against VIN_MODEM ≥ 4.2 V on battery, so ≈ 1 V margin (V5.5 had 0.1 V). **The V5.5 failure mechanism is fixed**, and the residual risk is boost current limit.
- **Worst-case current budget.** Assumptions:
- Logic (3V3): 90 mA typ, 120 mA worst including 4 gauge LEDs, plus AMS1117 Iq 5 mA.
- F9P (3V3_GNSS): 100 mA cold, 85 mA steady, including LNA (u-blox ~68 mA typ).
- W5500: 132 mA at 3.3 V (100BASE-TX), through U12 at η 0.85.
- K1 coil: 30 mA (G5V-1 5 VDC, 167 Ω).
- Modem VBAT: 2.0 A GSM peak (HD Table 8). LTE TX average assumed 0.7 A (HD table is TBD). Idle 20 mA. R112 bleeder 3.8 mA.
- Efficiencies: U20 0.88, U25 0.87, boost 0.88. Battery 3.5 V.
**On 24 V (as-is topology, charging with R50 825 Ω / with 1.43 k):**
| Rail | Cold start | Steady | Modem TX burst |
|---|---|---|---|
| /3V3 (U17 out) | 0.120 A | 0.090 A | 0.090 A |
| /3V3_GNSS | 0.100 A | 0.085 A | 0.085 A |
| /3V3_ETH | 0.132 A | 0.132 A | 0.132 A |
| /VBAT_MODEM | 2.0 A pk (0.3 A avg) | 0.024 A | 2.0 A pk |
| /VIN_MODEM @ 23.5 V (from /24V) | 0.37 A pk | 0.005 A | 0.37 A pk |
| /24V (+ fan 0.2 A @ 5 V via U2) | 0.42 A | 0.05 A | 0.42 A |
| /SYS5V | 0.35 A | 0.31 A | 0.31 A |
| /VEH5V (U25 out; charger held off 120 s at boot) | 0.36 A | **2.50 A (RS1-limited) / 1.48 A** | 2.50 / 1.48 A |
| /VIN_PROT @ 24 V | 0.09 A | 0.60 / 0.38 A | 0.60 / 0.38 A |
| P1 total @ 24 V | 0.50 A | 0.65 / 0.43 A | **1.02 / 0.80 A** |
| P1 total @ 9 V (12 V vehicle low) | — | 1.73 / 1.1 A | **2.8 / 2.2 A** |
**On battery (as-is topology; VSYS 4.79 V; VIN_MODEM ≈ 4.4 V after D21):**
| Rail | Cold start (all on, modem registering) | Steady (registered, idle) | GSM TX burst | LTE TX |
|---|---|---|---|---|
| /VIN_MODEM | 1.96 A pk | 0.024 A | 1.96 A pk | 0.69 A |
| /SYS5V (logic + F9P + W5500 via U12 + K1) | 0.36 A | 0.32 A | 0.32 A | 0.32 A |
| **/MAIN5V = boost load** | **2.33 A (93 % of 2.5 A)** | 0.34 A | **2.28 A (91 %)** | 1.01 A (40 %) |
| same at the VSYS low corner 4.60 V (VIN_MODEM 4.2 V) | **2.43 A (97 %)** | 0.34 A | 2.38 A (95 %) | 1.04 A |
| Battery current (VSYS·I/(3.5 V·0.88)) | 3.62 A | 0.53 A | 3.55 A | 1.57 A |
| with fixes below + FW sequencing (W5500 off, K1 off, F9P deferred, D21 bridged) | **1.95 A (78 %)** | 0.15 A | 1.95 A | 0.85 A |
| with fixes + LTE-only on battery (peak ≈ 1 A assumed) | ≈ 1.2 A (48 %) | 0.15 A | — | 0.85 A |
- **Consequence:** As-is, a cold modem registration (or a GSM burst) with everything else on uses 93–97 % of the boost rating, with no allowance for bursts above 2.0 A or a hot, aged pack. Hitting the limit droops VSYS: U17 drops out first (A-08), then U20 → VBAT_MODEM < 3.4 V. That is the V5.5 "modem dark on battery" symptom through a different mechanism. **R1/R3 are not robust on hardware as-is. They are achievable with firmware sequencing (mandatory) plus the fixes below.** Without U12 gating, W5500 alone costs ≈ 0.5 W continuous on battery, against a 20–50 mW duty-cycle sleep target.
- **Fix:**
1. **U12 EN (pin 2)** off `/SYS5V` onto a new net `/ETH_PWR_EN` from **PD2 (pad 54, free)**, with **100 k to GND** (C25803). MP1584 EN threshold 1.5 V and abs max 6 V are compatible with 3.3 V drive. Default OFF. (E auditor: W5500 reset/strap implications.)
2. **CSYS:** add 2 × 47 µF 16 V X7R 1210 (**C5440143**) at U6 VSYS pins 1/24 (≈ 113 µF effective).
3. **U20 input:** with A-01 Option A (5 V input), add 2 × 22 µF 16 V 0805 (**C86817**) ≤ 3 mm from U20.2, GND to U20.7/EP, plus 1 × 220 µF 16 V polymer (**C881921**) at `/VIN_MODEM`. If the 24 V feed stays (Option B), use 50 V parts (e.g. 2 × 10 µF 50 V 1210 **C138687**).
4. **D21:** replace with a bridge (Option A), which removes 0.30 V and lowers U20 input current by ≈ 7 %.
5. **MAIN5V from U6 to U20:** ≥ 1.5–2 mm the whole way (today 0.3/0.5 mm necks and 60 mm; A-07).
6. **Firmware sequencing** (see firmware section): mandatory.
- **Effort:** both
- **Confidence:** medium. Datasheet limits are firm. Load currents for the modem (LTE average), F9P and fan are assumptions. Raise confidence with the ECO §I-1 bench test: MAIN5V and VIN_MODEM scope during a battery-only cold start at VBAT 3.5 V, plus a current probe on `/BAT_PLUS`.
### A-06 Switcher hot loops and exposed-pad grounding: loops close through inner planes via distant vias; no EP vias on any regulator
- **Severity:** Major
- **Block / refs:** §4-A ("input/output cap distance < 3 mm", compensation/BST); ECO §E4; Review §2 "Switcher EP vias"; datasheets TPS54360B/AP64350 layout sections.
- **Evidence:**
- Board-wide there are **69 GND vias** (8 in the SE power quadrant x > 150, y > 85). The F.Cu GND pour is split into **71 islands** (stored fill). The EP-pad zone connection defaults to *thermal* (0.5 mm spokes) except U6.25 and U2.9, which are solid.
| Reg | Cin → VIN pin (edge) | Cin GND ↔ return (diode anode / GND pin) | EP vias / nearest GND via | Other |
|---|---|---|---|---|
| **U25** TPS54360B | C150 **2.88 mm** ✅, C149 6.37 mm | C149.2/C150.2 on **island 16**, D34.2 + U25 EP on **island 3** (3006 mm², only 3 vias at (145.7, 129.9), (148.1, 135.3), (198.8, 78.1): **≥ 30 mm** from U25). The input loop closes through In1/In2 via ≥ 11 mm and ≥ 30 mm detours. | **0 / 14.4 mm**; EP thermal-relief | D34 4.28 mm from SW; **L22 17.0 mm** from SW (`/SW_PWRIN` 20.4 mm at 1 mm); BST C152 1.49 mm ✅; FB/COMP/RT 1.0–2.9 mm ✅ |
| **U20** AP64350 | C128 0.72 mm, C127 2.38 mm ✅ | C127.2/C128.2 → U20.7 **6.9/8.5 mm**; EP on a different island (3) from pin 7 (island 20) | **0 / 5.15 mm**; EP thermal-relief | L20 2.24 mm ✅; BST 1.8 mm ✅; COMP 0.7/2.2 mm ✅; FB 3.2/4.1 mm |
| **U2** MP1584 (fan) | C22/C10/C11 **17.0–20.8 mm** ❌ | C22.2 ↔ Dbk1.2 11.7 mm | **0 / 19.7 mm** | Dbk1 6.5 mm, L2 11.9 mm from SW; FB divider R20/R21 **0.67/1.48 mm** ✅ (ECO E3 fixed) |
| **U12** MP1584 (3V3_ETH) | C101 6.40 mm | C101.2 (island 41, 0 vias) ↔ D11.2 (island 40) 14.9 mm; U12.5/U12.9 on island 39 (21 mm², **0 vias**) tied by **0.2 mm** GND tracks | **0 / 6.4 mm** | D11 11.9 mm, L8 15.1 mm from SW; Cout C102/C103 28–36 mm; FB top R87 24 mm |
- **D34 (B560C) thermal:** average current (1 − D)·Io ≈ 0.78 × 2.5 = 1.95 A → ≈ 1.0 W at 24 V. The GND pad has thermal-relief spokes and the cathode sits on a 1 mm SW trace. Estimated +75–100 °C over local ambient at full load, which approaches Tj max 150 °C in a 45 °C box. It drops to ≈ 0.55 W with A-03.
- U25 IC loss ≈ 0.5–0.75 W (24–36 V) with no EP vias.
- **Consequence:** For U25, SW-node and VIN-pin ringing and conducted/radiated EMI from a non-sync buck switching 2.5 A at 24–36 V. Ringing adds on top of the 53 V TVS clamp relative to the 65 V SW/VIN abs max. Poor regulator and diode thermals. For U12, a broken hot loop next to the Ethernet magnetics. U2 loses its local input bypass (MP1584 VIN abs max 30 V). U2 disappears if A-01 fix 1 is taken.
- **Fix:**
- **U25:** place C149/C150 ≤ 2 mm from pins 2/7 with their GND on the same F.Cu copper as D34.2 and the EP. D34 ≤ 3 mm from pin 8. L22 ≤ 5 mm from pin 8, SW copper ≤ 1.5× pad area. EP: 8 vias (4 × 2, 0.3/0.6 mm) and `zone_connect` solid on pad 9. D34 GND pad solid to ≥ 150 mm² F.Cu GND with ≥ 6 vias.
- **U20:** C127/C128 GND ≤ 2 mm to pin 7/EP. EP 8 vias, solid zone connect.
- **U12:** Cin C101 ≤ 3 mm with GND next to pin 5. D11 and L8 ≤ 4 mm from pin 1. EP ≥ 6 vias. Replace the 0.2 mm GND ties with pour.
- **Stitching:** GND vias every ≤ 5 mm around each regulator and on both sides of each hot loop. (Layout auditor F owns board-wide stitching.)
- **Effort:** layout
- **Confidence:** high on the geometry. Medium on the island picture because it depends on stored fills: refill, then re-run `islands.py`.
### A-07 5 V power-path bottlenecks: VEH5V and VIN_SW run the full LTC4040 input current on inner 0.5/0.8 mm tracks
- **Severity:** Major
- **Block / refs:** §4-A; DRC `track_width` (183 warnings, T15 rules); lead "netclass patterns match no net". (A separate issue: the `24V`/`IGN_IN`/`Q10_GATE` patterns resolve nothing. Layout auditor owns clearance.)
- **Evidence (widest path, `path.py`):**
| Path | Bottleneck | Length / R | Current | IPC-2221 ΔT | Action |
|---|---|---|---|---|---|
| `/VEH5V` L22.2 → RS1.1 | **In1 0.5 mm × 13.6 mm** | 24.8 mm / 18.9 mΩ | 2.5 A (charging, as-is) / 1.5 A | **+168 °C / +52 °C** (internal; IPC-2152 ≈ half) | ❌ widen |
| `/VIN_SW` RS1.2 → Q7.1–3 | **In2 0.8 mm × 23.6 mm** | 26.0 mm / 15.9 mΩ | 2.5 A | +77 °C internal | ❌ |
| `/MAIN5V` Q7 → U6.24 / C32 | F.Cu 0.5 mm × 13.3 / 6.6 mm | 23 / 15 mΩ | 2.2 A (charger in) / 2.4 A (backup) | +26 / +32 °C | ❌ |
| `/MAIN5V` U6.1 → C32 | **0.30 mm** neck 1.5 mm | 12 mΩ | 2.4 A | +73 °C (short neck) | ❌ (A-02) |
| `/MAIN5V` Q7 → D21 (modem, battery) | 1.0 mm (In2 6.8 mm) | 40 mm / 20 mΩ | 2.0 A | +12 °C | ⚠ widen to ≥ 1.5 mm |
| `/VIN_MODEM` D21 → U20.2 | 0.5 mm × 5.8 mm | 5.7 mΩ | 2.0 A | short | ⚠ ≥ 1 mm |
| `/BAT_PLUS` P3 → L6 | 1.0 mm × 21.3 mm | 10.4 mΩ | 3.6 A backup peak / 2.42 A | +25 / +10 °C | (A-02) |
| `/VIN_PROT` Q23 → U25.2 | 0.5 mm × 9.8 mm | 13.5 mΩ | 0.6 A @ 24 V, 1.7 A @ 9 V | +14 °C @ 9 V | ok for 24 V |
| `/24V_IN` P1 → Q10 | In1 1.5 mm | 12.4 mΩ | ≤ 1.0 A (24 V) | small | ok |
| `/SW_BAT` | see A-02 | | | | |
| `/3V3_ETH`, `/SW_5V`, `/SW_IN`, `/SYS5V`, `/5V_FAN`, `/FAN_RET`, `/SW_FAN` | 0.25–0.5 mm (DRC-flagged) | | ≤ 0.4 A | < 5 °C | ok (DRC hygiene only) |
- **RS1 Kelvin:** the CLN sense (U6.7) taps at the via (183.91, 104.21), **1.66 mm down the 0.8 mm trace** from the RS1.2 pad (+1.0 mΩ in the sense loop). The effective input limit is 25 mV/11 mΩ = 2.27 A typ (**2.14–2.41 A**) instead of 2.35–2.65 A. That is harmless (more conservative) but unintended.
- **Consequence:** Hot inner copper under U6/Q7 at charge current, extra drop, and the 2.5 A input path sharing heat with the U6 area.
- **Fix:** Put `/VEH5V` from L22.2 to RS1.1 on F.Cu ≥ 2 mm (or a pour) and move L22/C153/C154 toward RS1, or use ≥ 2 mm inner with ≥ 4 vias per transition. Put `/VIN_SW` on F.Cu ≥ 2 mm and move Q7 within 5 mm of RS1/U6. For `/MAIN5V`, see A-02, and run ≥ 1.5 mm to D21/U20. Route the U6.7 CLN and U6.6 VIN sense traces from the inner edges of the RS1 pads (Kelvin). Fix the netclass patterns (prefix `/`) so the T15 widths become rules instead of warnings.
- **Effort:** layout
- **Confidence:** high
### A-08 U17 AMS1117-3.3 drops out on battery and sets a 25–55 mW sleep floor
- **Severity:** Major
- **Block / refs:** §4-A ("dropout for the LDOs at the backup voltage"); memory `drogheda-backup-lowpower` (AMS1117 = #1 sleep-floor suspect); R1.
- **Evidence:**
- `LDO_IN = SYS5V − Vf(D12 SS34 ≈ 0.30–0.35 V at 0.1 A)`. On battery SYS5V ≈ VSYS 4.60–4.99 V minus ≈ 0.02 V, so **LDO_IN ≈ 4.25–4.65 V**.
- AMS1117 dropout: 1.1 V typ / 1.3 V max at 0.8 A, ≈ 1.0 V at 0.1 A, so it needs ≈ 4.3–4.4 V. At the low boost corner, and during every boost-limited dip (A-05), 3V3 sags by ≈ 50–150 mV.
- VDDA = 3V3 via R104 10 Ω. The firmware assumes ADC_REF = 3.3 V, so BAT_SENSE/5V_SENSE read up to +4 % high. The 3.40 V low-battery cut then trips at ≈ 3.27 V real. The NTC channels (R42/R126 from 3V3) are ratiometric and unaffected.
- Ground current is **5 mA typ / 11 mA max** (25–55 mW at 5 V).
- The datasheet asks for a 22 µF tantalum output cap. The /3V3 rail is all ceramic (C118 22 µF 0805 plus many 100 nF), which is a stability question for genuine AMS1117 parts.
- **Consequence:** Degraded 3V3 exactly when running on battery, wrong battery-voltage telemetry, and a duty-cycle sleep floor already as large as the whole 20–50 mW target.
- **Fix:** U17 → **TI TLV1117LV33DCYR, LCSC C15578** (SOT-223, same 1-GND/2-OUT/3-IN pinout and footprint; 1 A; dropout 455 mV at 1 A, ≈ 0.1 V at 0.15 A; IQ ≈ 100 µA; ceramic-stable; VIN max 5.5 V vs LDO_IN max ≈ 5.3 V with A-04). **Do not use** C48937499: it is listed under the same MPN but its spec (1.2 V dropout, 12 V) is the wrong die. Firmware: VREFINT calibration anyway.
- **Effort:** schematic-only (value/LCSC; same footprint)
- **Confidence:** high (AMS1117 numbers). Medium for TLV1117LV at 0.1–0.15 A: check the TI dropout curve during sourcing.
### A-09 Aluminium electrolytics: 85 °C/2000 h parts on the 5 V and modem rails (≈ 1-year life in a port box); modem bulk also over its ripple rating
- **Severity:** Major
- **Block / refs:** §4-A (Cout type/ESR); ECO §A (220 µF polymer); cross-ref modem auditor (C130/C131).
- **Evidence:**
- C78 (VEH5V bulk), **C130, C131** (VBAT_MODEM bulk) = C2827940 SamYoung MVG 16 V 220 µF, **−40…+85 °C, 2000 h @ 85 °C, 130 mA @ 120 Hz ripple**.
- C10 (/24V) = C165527 MVK 50 V 47 µF, **105 °C/1000 h**.
- C3 = C88734 and C103 = C88744: Rubycon TZV, 105 °C/2000 h.
- C151 = C116241: Nichicon UUD, 105 °C/5000 h ✅.
- 10 °C-rule life at 65 °C local (45 °C ambient plus enclosure/board rise, assumption): MVG ≈ 8,000 h (**0.9 y** of 24/7). MVK ≈ 16,000 h. TZV ≈ 32,000 h. UUD ≈ 80,000 h.
- C130/C131 take the modem's GSM/LTE burst edges (2 A, 577 µs, 217 Hz). Ripple current exceeds the 130 mA rating, so self-heating shortens life further.
- **Consequence:** Bulk capacitance and ESR drift within the first year. That affects the U20 loop (A-17), modem brown-out margin (HD: ≥ 300 µF) and U25 transient response.
- **Fix:** C78, C130, C131 → **Lelon OVZ221M1CTR-0608 220 µF 16 V polymer, C881921** (same 6.3 × 7.7 can; 105 °C/2000 h, polymer ≈ ×10 per −20 °C, so > 100,000 h at 65 °C). C10 is removed by A-01; otherwise use a 105 °C ≥ 5000 h part. After the swap, re-check U20 compensation (A-17), because polymer ESR moves the ESR zero from ≈ 2.4 kHz to > 15 kHz.
- **Effort:** schematic-only (same footprints)
- **Confidence:** medium (lifetime model plus assumed local temperature). High on the part ratings.
### F-51 No charger-die or cell temperature reaches the MCU; the firmware thermal inhibit has no source on v6 (R4)
- **Severity:** Major
- **Block / refs:** §4-F (temperature sensors), §4-A (sensor ≤ 10 mm of U6); ECO §D2/§D3/§D5; lesson F5/F6; firmware `CHG_CELL_HOT_C 45 / CHG_CELL_COOL_C 40` ("TMP102 on the cell"); memory `drogheda-fan-policy` (thermalCtlTemp ignores the NTC), `drogheda-battery-hightemp`.
- **Evidence — every temperature source on v6:**
| Sensor | Ref / net | Position (mm) | MCU pin / ADC | Distance to U6 (187.0, 107.7) | Notes |
|---|---|---|---|---|---|
| Board air + RH | U3 SHT40-AD1B (I²C 0x44) | (122.4, 77.3) | PB6/PB7 I²C1 | **71.4 mm** | 52 mm from U19, 28.8 mm from U20 |
| MCU die | U16 internal | (120.7, 67.4) | ADC1_IN16 (TS_CAL1/2 used) | 77 mm | |
| External probe 1 | P7 NTC-HOTSPOT → `/NTC_TEMP`, R42 10 k to 3V3, C24 100 nF | (109.75, 44.0) | **PB1 = ADC1_IN9** | ~100 mm | jack only |
| External probe 2 | P8 NTC-PROBE-2 → `/NTC2`, R126 10 k to 3V3, C157 | (133.0, 44.0) | **PC4 = ADC1_IN14** | ~83 mm | jack only |
| Pack NTC | P3.3 → `/NTC` → **U6.17 only** (R55 10 k from VEH5V) | (196.0, 110.5) | **none** | — | LTC4040 window: hot pause **42.4 °C**, resume 40.1 °C, cold −3.1 °C (B3380); 39.7/37.9/0.6 °C (B3950) |
| Modem die | A7670SA internal (AT) | (174.3, 72.0) | USART6 (AT) | — | firmware-only (F-53) |
| Accelerometer | U26 SC7A20 (has a temperature output, low accuracy) | — | I²C | — | not a thermal sensor |
| TMP102 | **absent** (V5.x U4 and the V5.6 U18 TMP102 were deleted in v6 T10) | — | — | — | |
- Free MCU ADC pin: only **PC5 (pad 25, ADC1_IN15)**. Free digital pins: PB10, PA9, PD2.
- **Consequence:** CHG_CELL_HOT/COOL (45/40 °C) have no cell sensor unless an installer tapes P7 to the pack. There is no charger-die visibility, so the A-02/H0008 cycling is invisible in telemetry. R4 is not met in firmware. (The cell is still protected in hardware by the LTC4040 NTC pause.)
- **Fix:**
1. **Charger temperature:** TMP102AIDRLR **C99269** (SOT-563) placed between U6 and L6, ≤ 5 mm from the U6 EP, on I²C1 at **0x48** (ADD0 → GND; confirm the U10 SC16IS752 strap stays at 0x4D), with 100 nF C14663.
2. **Cell temperature to the MCU:** tap `/NTC` into **PC5** through 100 k (top, C25803) / 120 k (bottom) + 10 nF. PC5 ≤ 0.545·5.46 V = 2.98 V. The 220 k load shifts the LTC4040 hot threshold by < 0.6 °C. Firmware computes Rntc = R55·Vntc/(VEH5V − Vntc), using PA4 for VEH5V; it is valid whenever VEH5V is present, which is when charging is possible.
3. Firmware: `tchg`, `tcell` appended to `$PHLG`. The governor inhibits on tcell (Li-ion 45 °C / LFP 55–60 °C) and on tchg (e.g. > 85 °C shed).
- **Effort:** both (2 parts plus 3 passives; place the TMP102 in the A-02 re-cluster)
- **Confidence:** high
### A-10 No over-voltage protection on VEH5V now that the 5 V source is a non-isolated on-board buck
- **Severity:** Minor
- **Block / refs:** §4-A (input protection); LTC4040 p.11 (OVSNS); memory `drogheda-power-cost` ("galvanic isolation lost").
- **Evidence:**
- U6.16 OVSNS is tied straight to `/VEH5V`, so the OVP feature is not used (datasheet: short OVSNS to VIN when OVP is not used).
- A TPS54360B high-side short puts `/VIN_PROT` (24–36 V) on VEH5V. LTC4040 VIN abs max is 6 V steady / 7 V transient, and Q7 then passes it to MAIN5V → SYS5V → U17/U21/U12/U20.
- V5 used the isolated SD-15B, so v6 adds this failure mode.
- **Consequence:** A low-probability single-point failure destroys the whole board (F9P $85, modem, MCU).
- **Fix (pick one):** (a) use the LTC4040 OVP arrangement per the datasheet OVP application: OVSNS through 6.2 kΩ from the U25 output node, plus the series N-FET (≥ 40 V V_DS) the application shows. Verify the topology against the datasheet figure before committing. (b) Minimum: a 1.5 kW 5 V TVS (SMCJ5.0A class) on VEH5V as a crowbar that forces F2 open. This is imperfect, because VEH5V can exceed 7 V for the fuse's melt time.
- **Effort:** schematic + small layout
- **Confidence:** medium (topology of the datasheet OVP figure not fully extracted)
### A-11 CHGOFF (PA8) has a pull-DOWN: the charger runs at full programmed current whenever the MCU is not driving the pin
- **Severity:** Minor
- **Block / refs:** §4-A (EN default states); LTC4040 p.10 ("CHGOFF: GND = enable, > 1.2 V = disable"); firmware line 356 ("HIGH = charge OFF").
- **Evidence:** R56 100 k from `/CHRG_EN` to GND. During MCU reset, DFU, boot and unflashed boards, CHGOFF = 0, so the charger is enabled with no governor or thermal inhibit (2.42 A with R50 as-is). This contradicts the board's own policy that MODEM_EN (R113) and PWR_CTRL default OFF while the MCU is not in control.
- **Consequence:** An uncontrolled charge during DFU or boot loops. It is bounded by the LTC4040 input limit and NTC window, so there is no damage.
- **Fix:** R56 → 100 k from `/CHRG_EN` to **/3V3** (C25803, same footprint re-netted), so the default is charge OFF. On battery the charger is inactive anyway.
- **Effort:** schematic + one-track layout
- **Confidence:** high
### A-12 Q5 base floats during MCU reset: the F9P rail (Q1/U21) is not guaranteed OFF
- **Severity:** Minor
- **Block / refs:** §4-A (EN defaults); firmware "PWR_CTRL LOW = stack OFF".
- **Evidence:** `/BASE_LS` = {R1.2, Q5.1} only; `/PWR_CTRL` = {U16.15, R1.1}. The STM32 pins are floating inputs during reset. Datasheet-max pin leakage (1 µA) × hFE ≈ 100–300 µA into R2 10 k gives 1–3 V Vgs on the AO3401A, so partial turn-on is possible (typical leakage is nA, so it is benign in practice).
- **Fix:** add 47 k 0603 from `/BASE_LS` to GND (Basic 0603 1 %).
- **Effort:** schematic + small layout
- **Confidence:** medium
### A-13 PFO goes only to TP2 (and CLPROG only to TP1): no hardware power-fail interrupt to the MCU
- **Severity:** Minor
- **Block / refs:** §4-A (CHRG/FAULT/PFO); LTC4040 p.11.
- **Evidence:** `/PFO_TP` = {U6.20, TP2}. Firmware detects backup by polling 5V_SENSE (V5_OFF 3.80 V), but the LTC4040 has already switched to backup at PFI 4.40 V. `/CLPROG_TP` = {U6.3, TP1}: this is the VSYS current monitor, V = 32·(VIN − CLN), i.e. 0.8 V at the 2.5 A limit.
- **Consequence:** Tens of ms late on backup entry, and the firmware cannot shed the modem/K1/W5500 before the boost takes the full load. Input current is not measurable in telemetry.
- **Fix:** route `/PFO` to **PB10 (pad 29, EXTI10)** with 100 k to /3V3 (3V3 stays up on battery). Optional: CLPROG → an ADC pin through 1 MΩ (datasheet recommends isolation, PROG-side ≤ 40 pF). No ADC pin is left if F-51 takes PC5, so CLPROG is a Note.
- **Effort:** schematic + layout (two tracks)
- **Confidence:** high
### A-14 BSTFB divider 21–24 mm from U6 (feedback net 41 mm, 5 vias, cutting In1 under U6); IGATE 43 mm unguarded
- **Severity:** Minor
- **Block / refs:** §4-A (BSTFB); LTC4040 layout p.22–23 (guard IGATE with VSYS copper).
- **Evidence:** R53.2 → U6.18 **21.4 mm** edge, R54.1 **24.0 mm**. `/VFB_BST` is F.Cu 16.8 mm + In1 24.4 mm with 5 vias; 7 of its In1 segments lie inside a 6 mm radius of U6, splitting In1. `/IGATE` is F.Cu 6.0 mm + In1 37.0 mm, with Q7.4 ↔ U6.15 at 23.2 mm. The IGATE charge pump has µA-class drive, so leakage in a humid port box can partially enhance Q7. Its body diode at 2.5 A dissipates ≈ 1.2 W.
- **Fix:** R53/R54 ≤ 3 mm from pins 18/10, with the top leg Kelvin-tapped at the CSYS pads and the net on F.Cu. Q7 ≤ 5 mm from U6.15 with IGATE ≤ 8 mm on F.Cu, flanked by MAIN5V copper.
- **Effort:** layout
- **Confidence:** high (geometry). Medium (consequence).
### A-15 U25 footprint carries a second property `LCSC Part` = C2071691 (AP64350, pin-compatible)
- **Severity:** Minor
- **Block / refs:** §4-H cross-ref; `sch_pcb_sync.md`; INDEX gotcha 7.
- **Evidence:** U25 `LCSC` = C524806 (TPS54360B), `LCSC Part` = C2071691. The TPS54360B pinout (1 BOOT, 2 VIN, 3 EN, 4 RT/CLK, 5 FB, 6 COMP, 7 GND, 8 SW) is **identical** to the AP64350 pinout. If a BOM tool picks `LCSC Part`, the boards assemble and run, but with a **42 V-rated** part behind a 53 V clamp and the wrong compensation. That is a latent field failure nobody would notice at test.
- **Fix:** delete the `LCSC Part` property from U25 (PCB and schematic).
- **Effort:** schematic-only
- **Confidence:** high
### F-52 Modem temperature: no on-board sensor near U19 (ECO D3 dropped)
- **Severity:** Minor
- **Block / refs:** §4-F; ECO §D3 (TMP102 #2 at the modem); R4.
- **Evidence:** The nearest board sensor to U19 is U3 at 52.1 mm. The only modem temperature path is AT over USART6. SIMCom A76xx has `AT+CPMUTEMP`; availability on A7670SA firmware is not verified. That path also works only while the modem is powered and responsive.
- **Fix:** either firmware-only (poll `AT+CPMUTEMP` into a `$PHLG` `tmodem` field) or a second TMP102 C99269 at **0x49** (ADD0 → 3V3) between U19 and U20. The latter is cheap and independent of modem state.
- **Effort:** firmware-only, or schematic + layout
- **Confidence:** medium
### A-16 U25 EN/UVLO divider DNP: U25 runs from 4.1–4.3 V
- **Severity:** Note
- **Evidence:** R124 523 k / R125 84.5 k DNP. EN floats (1.2 µA pull-up), so the internal UVLO is 4.1–4.3 V rising with 325 mV hysteresis. Populating them gives a start of ≈ 8.0 V and a stop of ≈ 5.5 V (TI equations with Ip 1.2 µA, Ih 3.4 µA). Between ≈ 4.3 V and 5.8 V input, VEH5V sits in dropout inside the PFI band (4.27–4.66 V), so the LTC4040 toggles backup (hysteresis 0.11 V). This only matters for 12 V vehicles under crank.
- **Fix (optional):** populate R124 523 k/1 % and R125 84.5 k/1 % (Basic 0603, pick LCSC in sourcing) if 12 V machines are in scope.
- **Effort:** schematic-only
- **Confidence:** medium
### A-17 U20 compensation is the AP64350 5 V table set (14 k / 3.3 nF / 47 pF, 500 kHz) applied at 3.8 V
- **Severity:** Note
- **Block / refs:** §4-A; V5.6 change report §6.1; Review §4 #14.
- **Evidence:**
- Output network: L20 4.7 µH, C132 22 µF/16 V 0805 (≈ 10–12 µF effective at 3.8 V), C133 1 µF, plus C130/C131 2 × 220 µF aluminium at 13–21 mm (ESR ≈ 0.15 Ω pair, assumed).
- Datasheet: fc = R5/(4.67e3·VOUT·COUT).
- Bulk-dominated (455 µF): fc ≈ 1.7 kHz. Phase is about −90° (integrator) −84° (fp ≈ 184 Hz) +27° (zero at 3.44 kHz) +36° (electrolytic ESR zero ≈ 2.4 kHz), so **PM ≈ 69°**.
- Ceramic-only: fc ≈ 50 kHz ≈ fSW/10 (the guideline edge).
- With polymer bulk (A-09) the ESR zero moves above 15 kHz and PM falls to ≈ 40°.
- **Fix:** if A-09 goes ahead, set R116 = 10 k (keep C141 3.3 nF, C142 47 pF) and verify with a 0.1 → 2 A load step at VIN 4.4 V and 5.3 V. Otherwise bench-verify the current values.
- **Effort:** schematic-only
- **Confidence:** low-medium (estimate). Raise it with a Bode plot or load step.
### A-18 U25 compensation is the TPS54360B datasheet example (13 k / 6.8 nF / 39 pF), designed for 8.2 µH + 58 µF
- **Severity:** Note
- **Evidence:**
- v6 has 10 µH, C153/C154 2 × 47 µF X7R (≈ 56 µF effective), C78 220 µF aluminium, and ≈ 70 µF effective downstream (C30/C31, C32–C34 through RS1 + Q7, ≈ 20 mΩ).
- fco = R4·gmps·Vref·gmea/(2π·Cout·Vout) ≈ 43.7/(2π·Cout·5.3): ≈ 4–6 kHz with the bulk counted, ≈ 22 kHz ceramic-only. The compensation zero is at 1.8 kHz, and PM estimates > 60° in both cases.
- Stable, but a slower load step: ≈ 0.16 V dip for 1.8 A, relevant if A-01 Option A moves the modem onto VEH5V.
- **Fix:** none required. Optionally raise R123 to 24 k after A-01/A-09 to restore ≈ 10 kHz. Bench-verify with a 0.3 → 2.5 A step.
- **Effort:** schematic-only (optional)
- **Confidence:** medium
### A-19 Load-dump survivability of D10 SMBJ33A / D32 SMCJ33A depends on vehicle-level suppression
- **Severity:** Note
- **Evidence:**
- SMCJ33A: VBR 36.7 V min, VC 53.3 V @ 28.1 A. SMBJ33A: VC 53.3 V @ 11.3 A.
- Adequate for continuous 24 V systems (≤ 32 V), for the ISO 16750-2 36 V/60 min overvoltage test (below VBR min), and for ISO 7637-2 fast pulses behind the U25 65 V rating.
- Not adequate for an ISO 16750-2 Test B suppressed load dump (24 V: Us* ≤ 58 V, 100–350 ms, Ri 1–8 Ω, i.e. ≈ 10 A for 350 ms, hundreds of J): the TVS would fail short. After A-01, F2 then opens. The alternative is a surge stopper, which is out of scope.
- **Fix:** confirm the fleet has alternator load-dump suppression (Inputs needed). Keep SMCJ33A. Do not raise the TVS voltage, because U25 has 65 V abs max.
- **Effort:** none / decision
- **Confidence:** medium
### A-20 Other power items
- **Severity:** Note
- **Evidence / fix:**
- (a) **U12 MP1584EN** (C15051, $2.21 @100, TA −20…+85 °C): if not replaced, gate EN (A-05). Optional swap to AP64350 C2071691 ($0.58, VIN 3.8 V min, synchronous, better battery margin; needs a re-layout for pinout).
- (b) **F1 PPTC 3 A** (C20627123, 10–60 mΩ, trip 5 A) now protects only the F9P LDO branch (≈ 0.1 A). It is harmless (≤ 6 mV) and not protective. The V5.6 "≥ 4 A low-R" requirement was for the modem, which is no longer behind it. Keep it.
- (c) **P2 bench jack** has no reverse protection (VEH5V −0.3 V abs max). A bench-only risk, which the silkscreen should state.
- (d) **JP_CUT across P5 (V5.6 JP6) is absent.** Harness auditor G owns it.
- (e) **C22 value mismatch:** the schematic says "22uF/50V" but LCSC C138687 is 10 µF/50 V (moot if U2 is removed; BOM auditor H).
- (f) **K1 G5V-1:** operating range −40…+70 °C, which is close to the enclosure worst case.
- (g) **R112 1 k VBAT_MODEM bleeder:** 3.8 mA / 14 mW while the modem is on. Fine.
- **Effort:** —
- **Confidence:** high
### F-53 Fan block
- **Severity:** Note
- **Evidence:**
- Driver: U2 MP1584 from /24V, 5V_FAN = 0.8·(1 + 100/19.1) = **4.99 V** (4.76–5.23 V).
- FB divider R20/R21 at **0.67/1.48 mm** from U2.4 and `/FB_FAN` 4.1 mm, so ECO E3 is fixed.
- PWM: PA6 (TIM3_CH1) → Rg1 100 Ω → Q2 AO3400A low side, with Rgs1 100 k gate pull-down (**default OFF** ✅) and D2 SS34 flyback ✅.
- 2-wire fan, no tach (`ENABLE_FAN_TACH 0`, a decision). Fan dark on battery by design (ECO D4).
- U2 is out-of-rating on the 24 V bus (A-01) and its Cin is 17–21 mm away (A-06).
- **Fix:** take A-01 fix 1 (fan from VEH5V via a bridged JP1, U2 block DNP). Firmware policy `vehiclePower && ignitionOn` is unchanged, and the fan supply then equals `vehiclePower` exactly. Add `tNtcC` to `thermalCtlTemp()` (memory `drogheda-fan-policy`).
- **Effort:** schematic-only (with A-01)
- **Confidence:** high
## Pass checks
| Check | Evidence (one line) | Result |
|---|---|---|
| U25 output formula / tolerance | 0.8·(1 + 53.6/10.2) = 5.004 V; Vref 0.792–0.808 → 4.87–5.14 V | ✅ math / ❌ set-point (A-04) |
| U25 RT / fsw / min on-time | 162 k → 600 kHz (TI eq.); tON at 36 V = 0.147/600 k = 244 ns ≥ 135 ns | ✅ |
| U25 inductor | 10 µH ≥ Lmin 7.2 µH (36 V) / 7.7 µH (60 V), KIND 0.3; SRP1265A Isat 15.5 A, Irms 10 A vs peak 3.1–3.4 A | ✅ |
| U25 current capability | load ≤ RS1 limit 2.14–2.41 A (+0.3 A fan with A-01) vs 3.5 A rating, 4.5 A min switch limit | ✅ |
| U25 Cout / ripple | 2 × 47 µF X7R 1210 (≈ 56 µF eff) + 220 µF; ΔI 0.69 A @ 24 V, ΔV ≈ 3 mV | ✅ (life ❌ A-09) |
| U25 compensation | datasheet example; fco ≈ 4–6 kHz, PM > 60° (estimate) | ✅ (A-18 Note) |
| U25 BOOT cap | C152 100 nF, 1.49 mm edge to pins 1/8 | ✅ |
| U25 Cin value | 2 × 2.2 µF/100 V X7R 1210 ≈ 3.4–3.8 µF eff at 24–36 V ≥ TI 3 µF | ✅ (placement A-06) |
| U25 soft start / inrush | 1024/600 kHz = 1.7 ms; ≈ 0.9 A into ≈ 280 µF | ✅ |
| U25 EN / UVLO | EN floats → on; internal UVLO 4.1–4.3 V | ✅ (A-16 Note) |
| Reverse polarity Q23 (and Q10) | P-FET D→input, S→load, gate R119 100 k + D33 15 V clamp (Rrp1 10 k + DzG1); IRFR5305 −55 V/65 mΩ | ✅ |
| DzG1 netlisted (V5 corruption) | DzG1.1 /Q10_GATE, .3 /24V | ✅ |
| TVS standoff | D32 SMCJ33A / D10 SMBJ33A VRWM 33 V ≥ 32 V max 24 V system; polarity pad 1 = K on the + rail | ✅ (A-19) |
| F2 part assigned | C206910 0154002.DR 2 A/125 V, 50 A breaking | ✅ part / ❌ coverage (A-01) |
| RS1 input limit | 10 mΩ 1 W 1206 (C105362): 23.5–26.5 mV → 2.35–2.65 A (2.14–2.41 A with the CLN tap, A-07) < U25 3.5 A | ✅ |
| LTC4040 PROG node | R50 1.26 mm from pin 2; `/PROG` 2.6 mm (≤ 40 pF) | ✅ |
| LTC4040 BSTFB (backup VSYS) | 499 k/100 k → 4.60/4.79/4.99 V within 3.5–5.0 V; keep 499 k | ✅ (placement A-14) |
| LTC4040 PFI | 270 k/100 k, 1.19 V: fall 4.27/4.40/4.54, rise 4.38/4.51/4.66 V | ✅ (FW V5_PFI stale) |
| LTC4040 RSTFB / RST | RSTFB tied to BSTFB (datasheet allows), RST NC | ✅ |
| LTC4040 OVSNS | tied to VIN → OVP unused | ⚠ (A-10) |
| NTC window RNTB | R55 10 k: hot 42.4 °C / resume 40.1 °C / cold −3.1 °C (B3380) | ⚠ (chemistry D1 pending) |
| Chemistry straps | JP2 1-2 (F2 = MAIN5V = Li-ion), JP3 F1 = 0, JP4 F0 = 1 → 4.00 V; LFP by JP2 2-3 (+ RNTB 5.6 k → +10.0…+60.4 °C) | ✅ |
| Safety timer | Li-ion 4.25 h (3.7–5 h), counts in CV only | ✅ |
| CHRG / FAULT | R57/R58 100 k to 3V3 → PB3/PB4 | ✅ |
| CHGOFF default | R56 100 k pull-down → charger ON without MCU | ⚠ (A-11) |
| BSTOFF | tied to GND → boost always armed (no FW shutdown; BAT UVLO 2.45 V is the only floor) | ✅ / Note |
| Q7 ideal-diode orientation | AO4406A N-ch: S = VIN_SW (CLN), D = MAIN5V → body diode blocks VSYS→VIN | ✅ |
| L6 | 2.2 µH (datasheet 1–2.2 µH), rated 8 A ≥ ILIMBST max 7.5 A | ✅ (placement ❌ A-02) |
| CSYS | 104 µF nominal ≥ 100 µF; ≈ 59 µF effective | ⚠ (A-05) |
| CBAT | C35 22 µF ≥ 10 µF | ✅ value / ⚠ placement |
| U20 FB | 75 k/20 k → 3.70/3.80/3.90 V within A7670 3.4–4.2 V | ✅ |
| U20 RT / min on-time | 200 k → 500 kHz (450–550); tON at 36 V = 211 ns ≥ 100 ns | ✅ |
| U20 UVLO on battery | falling ≈ 3.1–3.3 V vs VIN_MODEM ≥ 4.2 V (≈ 1 V margin; V5.5 had 0.1 V) | ✅ |
| U20 EN default | R113 100 k vs 5.5 µA pull-up → 0.55 V < 1.03 V → OFF; PC10 3.3 V > 1.25 V | ✅ |
| U20 BST | C129 100 nF, 1.8 mm | ✅ |
| L20 | 4.7 µH (MWSA0804S-4R7), rated 5 A vs peak 2.2 A (batt) / 2.7 A (24 V) | ✅ |
| U2 FB / placement | 4.99 V; divider at pin (0.67/1.48 mm) | ✅ (rating ❌ A-01, Cin ❌ A-06) |
| U12 FB | 100 k/31.6 k → 3.18/3.33/3.48 V | ✅ (EN ❌ A-05, loop ❌ A-06) |
| U21 AP2112K | dropout 250 mV @ 600 mA; F9P ≈ 0.1 A; SW_5V ≥ 4.5 V on battery; EN = VIN follows Q1 | ✅ |
| U17 AMS1117 on 24 V | LDO_IN ≈ 4.6 V ≥ 4.4 V | ✅ (battery ❌ A-08) |
| DFU-only power | DFU_VBUS → D13 → LDO_IN; D12 blocks back-feed into SYS5V | ✅ |
| K1 flyback | D6 1N4148W across the coil | ✅ |
| Temperature sensor ≤ 10 mm of U6 | none (U3 at 71.4 mm) | ❌ (F-51) |
| Fan PWM default | Rgs1 100 k → Q2 OFF at reset | ✅ |
## Review-vs-Lessons §4 checklist items re-verified
- **#1 LTC4040 copper + thermal vias + re-cluster (F5):** still ❌. `/SW_BAT` is now 0.5 mm (was 0.25 mm on 25-Sep) × 11.9 mm with 0.25/0.30 mm necks. `/BAT_PLUS` main path 1.0 mm. EP 0 vias (nearest 5.21 mm). L6 8.65–9.10 mm edge. C30/C31 6.2–7.2 mm. CSYS GND on three F.Cu islands. → A-02.
- **#2 U25 set-point (F7):** still ❌. R121 53.6 k → 5.00 V (4.87–5.14 V). Re-cluster status: C150 2.88 mm (improved), C149 6.37 mm, D34 4.28 mm, L22 17.0 mm (edge), Cin/diode GND on different islands. → A-04, A-06.
- **#3 R50 (F4):** still ❌ 825 Ω. Also, 1.5 k only meets R5 nominally; 1.43 k is recommended. → A-03.
- **#4 Modem rail integrity on battery (power parts):** U20 Cin is still C127 10 µF + C128 1 µF (no 2 × 22 µF) ⚠. `/VIN_MODEM` 0.5/0.8 mm (D21 → U20 5.8 mm at 0.5 mm) ⚠. VBAT_MODEM bulk C130/C131 at 13.2/20.9 mm from L20 on 2 mm copper (improved from 0.25/0.5 mm; modem auditor owns U19-side distances). D21 drop and boost budget → A-05. Topology → A-01.
- **#5 Temperature sensor at the charger:** still ❌. → F-51.
- **#6 W5500 in reset / U12 EN:** U12 EN still tied to VIN (always on, including on battery) ❌. → A-05 fix 1. (ETH_RST pull-down belongs to E.)
- **#8 NTC window / chemistry:** unchanged ⚠ (R55 10 k, JP2 Li-ion). Decision D1 pending; BOM-only change.
- **#10 F1 / F2:** F2 LCSC now assigned (C206910) ✅, but it protects only the U25 branch ❌ (A-01). F1 3 A PPTC is harmless (A-20b).
- **#14 AP64350 compensation vs datasheet:** evaluated. It is the 5 V table set; the estimate is stable with electrolytic bulk and marginal with polymer. → A-17.
- **"Switcher EP vias (U20, U25): 0"** (Review §2): still 0 on U20, U25, U2, U12 and U6. → A-06, A-02.
- **#15 Bench validation (power parts):** still required: U6/L6 IR at 1.4 A charge and 2.3 A backup; U20 VIN scope during a battery cold start at VBAT 3.5 V; D34/U25 IR at full load.
### V5.6 power / charger / temperature fixes vs v6
| V5.6 fix (ECO / change report) | v6 status |
|---|---|
| A: modem buck AP64350 with MCU EN + 100 k pull-down | **equivalent** (U20, PC10, R113); fed from /24V + MAIN5V instead of SYS5V → A-01 |
| A: Cin 2 × 22 µF + 10 µF at the modem buck | **missing** (10 µF + 1 µF) → A-05 |
| A: 220 µF polymer output | **missing** (2 × 220 µF 85 °C aluminium) → A-09 |
| A: L 4.7 µH ≥ 4 A | **has** (L20 4.7 µH/5 A, C17700167) |
| A: C3 → 220 µF polymer (F9P rail) | **equivalent / not needed** (F9P behind the U21 LDO; C3 47 µF 105 °C + C40 + C119) |
| A: R53 stays 499 k | **has** |
| A (opt): U12 → AP64350 | **missing** (optional) → A-20a; U12 EN gating → A-05 |
| C: RS1 10 mΩ | **has** (C105362) |
| C: R50 1.5 k | **missing** (825 Ω) → A-03 (1.43 k) |
| D1: RNTB / JP2 per chemistry | **unchanged**, pending decision |
| D2 / E1 / E2: SW_BAT ≥ 2 mm, BAT_PLUS ≥ 1.5 mm, EP ≥ 9 vias | **missing** → A-02 |
| D3: TMP102 near the modem | **missing** → F-52 (AT alternative) |
| (V5.x U4 TMP102 "cell") | **removed in v6**, no replacement → F-51 |
| D4: fan unchanged | **has**; E3 FB divider at pin **fixed** |
| D5: NTC probe to PB1 | **has** (P7 → PB1) + second probe P8 → PC4 |
| E4: buck Cin loops < 3 mm | **missing / worse** (U2 17–21 mm; U12 6.4 mm; U25 GND islands) → A-06 |
| F: F1 ≥ 4 A low-R | **equivalent / not needed** (modem not behind F1) |
| F: JP_CUT across the cutoff | **missing** (owner G) |
## Requirements input R1–R5
- **R1 (10 min off → wake → report on battery):** **needs change A-05 (+ A-08) plus firmware.** The hardware structure is right (independent PWR_CTRL / MODEM_PWR_EN, U20 UVLO margin ≈ 1 V). As-is, the boost reaches 93–97 % at a GSM burst with all loads on, W5500 cannot be powered off, and the AMS1117 floor eats the sleep budget.
- **R2 (modem never dark; MCU can power-cycle it):** **satisfied as-is** for the power side (U20 EN on PC10 with pull-down, UVLO margin, the modem can be power-cycled alone). A-01 changes the U20 input source but not the control.
- **R3 (report while on battery):** **needs change A-05 plus firmware** (same budget as R1). Also A-13 (PFO interrupt) for fast load shedding.
- **R4 (temperature management):** **needs change F-51** (charger TMP102 plus pack NTC to PC5), plus firmware. Fan: satisfied, and simplified by A-01 fix 1 (F-53).
- **R5 (charge ≥ 1.3 A without thermal cycling):** **needs A-03 (R50 1.43 k) + A-02 (copper/vias) + A-04 (R121 57.6 k or firmware retune).** A-07 is recommended.
## Firmware implications (things board_v6.h / FW 0.7.x must do)
1. **Pins (power-related):**
- Unchanged: `PIN_CHRG_EN PA8` (HIGH = charge OFF; polarity unchanged by A-11, only the reset default becomes OFF), `PIN_CHRG_STAT PB3`, `PIN_CHRG_FAULT PB4`, `5V_SENSE PA4` (÷2), `BAT_SENSE PA0` (÷2), `NTC_TEMP PB1`, `NTC2 PC4`, `PWR_CTRL PA1`, `MODEM_PWR_EN PC10`, `BYP_CTRL PB5`.
- New, if the fixes are taken: `PIN_ETH_PWR_EN PD2` (A-05), `PIN_PFO PB10` EXTI falling (A-13), `NTC_CELL PC5` ADC1_IN15, ratio 120/220 (F-51), TMP102 charger sensor at 0x48 (F-51), optional modem TMP102 at 0x49 (F-52).
2. **Constants:**
- `V5_PFI` 4.60 → **4.40 V** (falling; rising 4.51 V).
- With R121 57.6 k, keep `CHG_RAIL_ON 5.05` / `CHG_RAIL_OFF 4.90`. If R121 stays 53.6 k, the governor must be retuned (ON ≤ 4.80 V is not possible with PFI rising max 4.66 V and ADC error), so the hardware change is preferred.
- The v6 supply cannot fold (RS1 2.14–2.41 A < U25 4.5 A min limit): the governor is a safety net only.
3. **ADC:** compute VDDA every window from VREFINT (`VREFINT_CAL` @ 0x1FFF7A2A). Never assume 3.30 V, especially on battery (A-08).
4. **Thermal inhibit:** CHG_CELL_HOT/COOL on `tcell` from PC5 (Li-ion 45/40 °C; LFP 55–60 °C). Shed on `tchg` > 85 °C from the new TMP102. Append `tchg`, `tcell`, `tmodem` to `$PHLG`. Include the NTC in `thermalCtlTemp()`.
5. **Backup entry (PFO EXTI or 5V_SENSE < V5_OFF):**
- Immediately `ETH_PWR_EN` = 0 (or hold ETH_RST low if not fitted).
- `BYP_CTRL` = 0 except inside the TX window.
- Modem to **LTE-only on battery** (`AT+CNMP=38`) to avoid 2 A GSM bursts.
6. **Duty window (R1/R3):**
- Never start the modem with W5500, K1 and the F9P acquiring simultaneously.
- Order: modem EN → PWRKEY → wait STATUS (~7 s) and first RTCM on PC7, with the F9P OFF or already settled ≥ 4 s. Then the F9P for a hot fix. Then ≥ 2 `$PHLG` → modem OFF → F9P OFF → MCU STOP (LSE RTC).
- Refuse a modem cold start below VBAT ≈ 3.4 V: the boost's 2.5 A rating holds only down to 3.2 V.
7. **Low battery:** BSTOFF is hard-wired to GND, so firmware cannot switch the boost off. At `VBAT_BACKUP_MIN` go to STOP with every load off. The hardware floor is only LTC4040 BAT UVLO 2.45 V plus the pack PCM.
8. **Fan:** if the fan moves to VEH5V (A-01), the fan exists exactly when `vehiclePower`. The policy stays as is, and the ignition proxy becomes optional.
9. **Charger status:** "pausa NTC" = CHRG low ∧ FAULT low (datasheet table p.14). Bad battery = CHRG high ∧ FAULT low.
## Inputs needed from Leo
1. Supply systems in the fleet: 24 V only, or 12 V machines too? This sets F2 at 3 A vs 4 A, the U25 UVLO (A-16), and whether 9 V operation matters. Do the machines have alternator load-dump suppression (A-19)?
2. The fan part (5 V, 2-wire) and its current. Assumed 0.2–0.3 A for the VEH5V feed (A-01).
3. **Decision on A-01 Option A** (modem buck from MAIN5V only, D20 removed, D21 bridged) versus Option B (keep the 24 V feed with a ≥ 60 V buck). Coordinate with the modem auditor.
4. Pack details: capacity (Ah), PCM cut-off voltage, NTC β (B3380 vs B3950), and the chemistry decision D1.
5. Is GSM/2G fallback required on battery, or is LTE-only acceptable? This sets the backup peak (A-05).
6. Must Ethernet work on battery? Assumed no, so U12 is gated.
7. Enclosure internal temperature at 45 °C ambient. Assumed 60–65 °C local near the regulators, for electrolytic life (A-09) and U6/D34 thermals.
8. Bench data from the H0008 "Pendientes": clamp-meter charge current and U6/L6 temperature. This confirms or refutes OT cycling (A-02/A-03).