Every PDB reading came back NA, and the cause was a base error. The four
ADPM12200 bricks put each measurement on its own PMBus PAGE, written
before the read. The bring-up spreadsheet listed those page numbers in
decimal but with an 0x prefix:
Vin PAGE 9 -> it said 0x00 (0x09)
Iin PAGE 10 -> it said 0x10 (0x0A)
Vout PAGE 2 -> it said 0x02 correct by luck
Iout PAGE 14 -> it said 0x14 (0x0E)
Temp PAGE 18 -> it said 0x18 (0x12)
Only Vout worked, because 2 reads the same in either base. Hence Iin and
Iout answering 0xFFFF, Temp answering 0x0000, and a Vin scale factor
having to be invented to make 50 V appear out of a page-0 register.
pwr_brick.sh reads all five bricks with the right pages and the
datasheet's DIRECT equation, X = (1/m)(Y x 10^-R - b): voltage Y x 8 mV,
current Y x 0.04 A, temperature Y x 0.01 C. Cross-checked rather than
assumed - READ_VOUT 0x05D4 decodes to 11936 mV, exactly what
'show platform voltage' reports for that rail through a separate sensor
path. The datasheet is committed alongside so the numbers are checkable.
Left flagged: Table 3 does not list READ_VIN or READ_IIN. They borrow the
voltage and current coefficients here, which is consistent with a ~50 V
input but is not something the datasheet states.
Each value is re-read until it passes three checks: not 0xFFFF, not
0x0000, and inside a plausibility window. The window is the one that
matters - this bus corrupts the HIGH BYTE only, which turns 11.98 V into
32.00 V. Positive, plausible in magnitude, and invisible to any all-ones
filter. 0x0000 is rejected for the mirror-image reason: on the
temperature register it decodes to a believable 0 C.
Adds comboA/comboB margin profiles per board. comboB is comboA with every
direction flipped, so the pair covers each rail high and low while its
neighbours sit the other way. NC channels stay nominal in both - there is
nothing to margin on an unused rail.
Script C re-enables the BMC USB journalctl dump, which had been commented
out, so that service log now reaches the master log.
Script A -> V1.1.6.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014RetWKFZFG1ZHcitQAyhwM
5.2 KiB
v1.1.6 — The PDB bricks were never being asked the right question
🐛 Bug fixes
Every PDB reading was NA, and the cause was a page number written in the wrong base
-
The four ADPM12200 bricks put each measurement on its own PMBus PAGE, and the page has to be written before every read. The bring-up spreadsheet listed those page numbers in decimal but with an
0xprefix, so four of the five selected the wrong page:Reading Datasheet PAGE Should send Spreadsheet said Vin 9 0x090x00Iin 10 0x0A0x10Vout 2 0x020x02✅Iout 14 0x0E0x14Temp 18 0x120x18 -
Only Vout worked — because 2 reads the same in either base. That is why Iin and Iout answered
0xFFFFand the temperature answered0x0000, and why a Vin scaling had to be invented to make 50 V appear. -
blanton_pwr_data.shsends no page at all (its PDB table haspage "-"), which is the reason it reports the whole PDB section asNA.
✨ New features
pwr_brick.sh — the five power bricks, read properly
showprints Vin / Iin / Vout / Iout / Temp for all five:SWB0.PU207(0x62),SWB0.PU13(0x63),SWB1.PU332(0x60),SWB1.PU85(0x61) andCPB.PU37(0x26).-radds the raw words.- Conversions come from the datasheet's DIRECT equation,
X = (1/m)(Y × 10⁻ᴿ − b), with Table 3's coefficients: voltageY × 8 mV, currentY × 0.04 A, temperatureY × 0.01 °C. - Cross-checked, not assumed:
READ_VOUTreturns0x05D4→ 1492 × 8 = 11936 mV, which is exactly the figureshow platform voltagereports for that rail from a completely separate sensor path. CPB.PU37is a different part — no page writes and its own scaling — and is handled separately.- The datasheet is now in the repo (
docs/ADPM12200CMLZxx_DS_*.pdf) so the pages and coefficients can be checked without hunting for it.
Every value is validated before it is printed
- This bus corrupts the high byte only. That turns
11.98 Vinto32.00 V— positive, plausible in magnitude, and invisible to any "reject 0xFFFF" filter. Each value is re-read (up toPB_TRIES, default 8) until it is not0xFFFF, not0x0000, and lands inside a plausibility window. 0x0000is rejected as a raw word for the same reason: on the temperature register it decodes to a perfectly believable 0 °C.
Complementary margin profiles per board
comboA/comboBfor CB and each SWB CONN.comboBiscomboAwith every direction flipped, so running both covers each rail high and low while its neighbours sit the other way.- NC channels stay at
nominalin both — there is nothing to margin on an unused rail (CONN14 CH10/11/13, CONN15 CH10).
📦 Downloads
| File | Contents |
|---|---|
Script_ABC_Blanton_V1.1.6.zip |
The full Tera Term working directory, including Blanton_Script/ to copy onto the DUT |
After copying to the DUT:
chmod +x ~/Blanton_Script/*.sh # see below
grep -rlU $'\r' ~/Blanton_Script # expect no output
blanton_ber.sh, nfc_polling.sh, blanton_tr518.sh, blanton_multiphase_margin.sh, pwr_brick.sh and the two TH6_SWB*_power_readback.sh are invoked through ./ or ~/, so they need the execute bit along with bmc_monitor.sh and usb_target.sh — neither git nor a Windows/USB copy carries it reliably.
⚠️ Before you run
READ_VINandREAD_IINare not in the datasheet's coefficient table. They are decoded here with the voltage and current coefficients — consistent with a ~50 V input, but not stated by the datasheet. Anything quoting brick Vin should have that confirmed first.PB_VIN_M/PB_IIN_Mare where to change it.NAhas two meanings: nothing readable, or read but outside its plausibility window. UsePB_TRIES=1 ./Blanton_Script/pwr_brick.sh show -rto see the unretried raw words and tell them apart.- Margin profiles are positional.
comboA_SWB_CONN13applied to a CONN16 board margins the wrong rails and nothing detects it. blanton_multiphase_margin.sh saveis permanent, and it must not be mixed withmargin.sh— same rails, two access paths, no interlock.- A soak longer than 24 hours needs the stress runtimes raised —
--runtime 86400is a ceiling. - Script 4 (thermal/safety) has no teardown — finish with
blanton_tr518.sh stopandkill $(jobs -p). - These three cannot share the switch:
blanton_ber.sh,blanton_tr518.sh,blanton_traffic_linespeed. FAN_SPEEDis 100.- The three items listed as unverified in v1.1.0 are still unverified: the
ce0ingress mirror, the 120s settle inblanton_tr518.sh, andtest mode nr=noon stop.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
- Blanton_Test_Flow.drawio — the four scripts side by side
Full changelog: V1.1.5...V1.1.6