Files
Blanton_TTL_Script/docs/release-notes/v1.1.6.md
T
etwenandClaude Opus 5 25e1ce0068 fix(pdb): Read the bricks on the pages the datasheet actually specifies
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
2026-09-02 16:35:45 +08:00

5.2 KiB
Raw Blame History

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 0x prefix, so four of the five selected the wrong page:

    Reading Datasheet PAGE Should send Spreadsheet said
    Vin 9 0x09 0x00
    Iin 10 0x0A 0x10
    Vout 2 0x02 0x02
    Iout 14 0x0E 0x14
    Temp 18 0x12 0x18
  • Only Vout worked — because 2 reads the same in either base. That is why Iin and Iout answered 0xFFFF and the temperature answered 0x0000, and why a Vin scaling had to be invented to make 50 V appear.

  • blanton_pwr_data.sh sends no page at all (its PDB table has page "-"), which is the reason it reports the whole PDB section as NA.

New features

pwr_brick.sh — the five power bricks, read properly

  • show prints Vin / Iin / Vout / Iout / Temp for all five: SWB0.PU207 (0x62), SWB0.PU13 (0x63), SWB1.PU332 (0x60), SWB1.PU85 (0x61) and CPB.PU37 (0x26). -r adds the raw words.
  • Conversions come from the datasheet's DIRECT equation, X = (1/m)(Y × 10⁻ᴿ b), with Table 3's coefficients: voltage Y × 8 mV, current Y × 0.04 A, temperature Y × 0.01 °C.
  • Cross-checked, not assumed: READ_VOUT returns 0x05D4 → 1492 × 8 = 11936 mV, which is exactly the figure show platform voltage reports for that rail from a completely separate sensor path.
  • CPB.PU37 is 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 V into 32.00 V — positive, plausible in magnitude, and invisible to any "reject 0xFFFF" filter. Each value is re-read (up to PB_TRIES, default 8) until it is not 0xFFFF, not 0x0000, and lands inside a plausibility window.
  • 0x0000 is 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 / comboB for CB and each SWB CONN. comboB is comboA with every direction flipped, so running both covers each rail high and low while its neighbours sit the other way.
  • NC channels stay at nominal in 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_VIN and READ_IIN are 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_M are where to change it.
  • NA has two meanings: nothing readable, or read but outside its plausibility window. Use PB_TRIES=1 ./Blanton_Script/pwr_brick.sh show -r to see the unretried raw words and tell them apart.
  • Margin profiles are positional. comboA_SWB_CONN13 applied to a CONN16 board margins the wrong rails and nothing detects it.
  • blanton_multiphase_margin.sh save is permanent, and it must not be mixed with margin.sh — same rails, two access paths, no interlock.
  • A soak longer than 24 hours needs the stress runtimes raised--runtime 86400 is a ceiling.
  • Script 4 (thermal/safety) has no teardown — finish with blanton_tr518.sh stop and kill $(jobs -p).
  • These three cannot share the switch: blanton_ber.sh, blanton_tr518.sh, blanton_traffic_linespeed.
  • FAN_SPEED is 100.
  • The three items listed as unverified in v1.1.0 are still unverified: the ce0 ingress mirror, the 120s settle in blanton_tr518.sh, and test mode nr=no on stop.

Full changelog: V1.1.5...V1.1.6