Skip to main content
Stretch Lab

Stretch 4.5

  • 21 board changes
  • 10 tier 1
  • 0 decided
  • 7 bench checks
  • 7 firmware

One board order that removes this year's failure classes, in two months.

In about two months: run the seven bench checks that protect the order, decide each candidate with its board owner, freeze the netlists, place one order (PIMU v4, line sensor v3, WACC, stepper, external charger adapter), bring the boards up on the rig, and release the firmware that rides along.

Two months

  1. 2026-09-18

    bench checks b1 to b7 done

  2. 2026-09-25

    change list decided with the board owners (adopt / defer per item)

  3. 2026-10-02

    netlist freeze and board order (PIMU v4, line sensor v3, WACC, stepper, charger adapter)

  4. 2026-10-23

    boards in hand, bring-up on the rig

  5. 2026-11-06

    4.5 firmware release riding the boards

Dates are a proposal from 2026-09-04; adjust them with the board owners.

Board changes

PIMU, v3 to v4

  1. off, P9 Restore the 20 V soft-start delay (C45 discharge path)With the charger attached MP33_PG never falls, C45 never discharges, and 20V_EN rises with zero delay while 12 V and AUX 20 V come up at once; the NUC misses its AC-recovery edge. FMEA F-04. A firmware delay is the band-aid; a FET across C45 or a second RC on the U21 input is the durable fix. BOM or one RC.not started, tier 1, traced+fieldafter B1P9
  2. off, P10 Guard the ESP kill path to the LTC2953ESP_SYS_SHUTDOWN drives Q17 straight into PWR_BTN_KILL with no interlock; one GPIO glitch or the 15 s no-NUC watchdog kills the robot. AND it with a SAMD arm line or add a long-pulse RC. FMEA F-23, F-05. One gate.not started, tier 2, tracedP10
  3. off, P11 LED rail: resettable protection instead of the one-shot fuse F104042's F10 (3 A 0603) blew; repair was board rework. Replace with a PTC or a current-limited load switch with a fault flag to the MCU (AP22653 precedent on WACC). BOM.not started, tier 1, fieldafter B2P11
  4. off, P1 LED string power 3.3 V to 5 V with a real level shifterVDD_SENSOR is fed from 3V3 through F10 while F13 (5 V) is DNP; WS2812B minimum VDD is 3.5 V. Populate F13, remove F10, U56 to SN74HCT1G17 on 5V0, D48 to a 5 V clamp. Firmware policy for 5V0 in SLEEP rides along. BOM plus one trace.not started, tier 1, traced+fieldafter B7P1
  5. off, P2 Split dock and barrel presence to separate MCU inputsDock and barrel presence merge in U14 into one CHARGER_CONNECTED bit; DOCK_SW reaches no processor. Route each to its own ESP input, keep the merged bit, make DOCK_SW readable, consider 3V3 on CN3. Enables a real charge_source field. Routing; ESP pin budget audit first.not started, tier 2, tracedafter B3P2
  6. off, P3 Decide R439: firmware charger enable is likely disconnectedR439 (MCU_CHARGER_DISABLE to CHARGER_EN) is DNP, so BatteryManager::charger_enable() may never reach U19. Populate it or delete the firmware path; affects P14 charge display. BOM decision.not started, tier 2, tracedafter B5P3
  7. off, P4 Per-rail eFuse fault policy, CPU-rail re-arm FET, sample LIDAR/ETH IMONAll three TPS259807 latch off with no retry; only LIDAR has a kill switch. Auto-retry caps on LIDAR/ETH, a Q56-style FET on U23 EN from a spare GPIO, and route LIDAR_IMON/ETH_IMON to ADC inputs. BOM plus small layout.not started, tier 2, traced+fieldafter B6P4
  8. off, P5 Per-port USB VBUS switching for remote recoveryNo downstream VBUS load switches anywhere; a wedged line sensor or OAK re-enumeration storm needs a robot power cycle. High-side switches on the line-sensor and camera chains via hub PRTPWR or GPIOs. New circuitry.not started, tier 3, traced+fieldP5
  9. off, P6 Dock input hot-plug robustness (Q14 failure class)Customer robot charged from the wall but not the dock: failed Q14. Controlled turn-on, series inrush limiting, D33/input-cap review, and a DOCK_EMI test point. Design review.not started, tier 3, fieldP6
  10. off, P8 Silkscreen and annotation fixes, DOUT return optionStale charger ILIM annotation (ERRATA #1/#2), CHARGING_FLAG1/2 polarity on silk, runstop CN17 SIG/LED silk, optional last-LED DOUT return for chain-integrity detection. Doc and silk.not started, tier 1, tracedafter B3, B4P8
  11. off, P12 Stop actuator ports looking like real USB-CCN18 to CN23 are USB-C receptacles carrying raw pack voltage; a keyed or proprietary connector, or a keying insert plus permanent colour coding. Pair with the A2 failed-short-port question. Connector and mechanical.not started, tier 3, fieldP12

Line sensor, v2 to v3

  1. off, L1 Wire the six PCA9617A EN pins to MCU GPIOsAll six branch buffers are tied high; a stuck branch takes its bus partner down (4031 b3d0/b3d1) and only a power cycle isolates it. Six traces to free SAMD51 pins.not started, tier 1, traced+fieldL1
  2. off, L2 Move address integrity out of the harnessID_A1/ID_A2 straps travel across an SH friction-fit connector; one marginal contact re-addresses a module onto its partner. Strap on the module side, one bus per module, or defined bias.not started, tier 1, traced+fieldL2
  3. off, L3 Separate the MCU rail from the sensor rail, per-branch switchesOne 3V3 buck feeds the SAMD51 and six modules; three brown-out resets logged on the bench board. Split the MCU supply, per-branch load switches paired with L1. Small layout.not started, tier 1, traced+fieldafter L1L3
  4. off, L4 Positive-lock module connectorsSH friction fits are the marginal-contact mechanism demonstrated on the bench; GH class on the six module drops. Connector swap.not started, tier 2, fieldL4

WACC

  1. off, W1 Make the existing port load switches controllableU5 and U8 (AP22653) are fitted with enables tied on and fault flags read by nothing. Route enables and faults to the hub's PRTPWR/OCS pins or spare GPIOs: cheapest per-port USB recovery we ship, and the 4039 OAK case. Four traces.not started, tier 1, traced+fieldW1

Stepper

  1. off, S1 Motor thermistor input on the motor connectorLift iMax (PR #79, 6.7 A) is bounded by an open-loop thermal model; only board temperature exists. Connector plus ADC; owner's call.not started, tier 3, tracedS1
  2. off, S3 Keep BORD_ID tri-level code meaningful per revisionStraps R43 to R48 are populated; assign per rev, same scheme as P7. BOM.not started, tier 1, tracedafter P7S3

Stepper and PIMU

  1. off, S2 Brake state telemetry (tap CN_BRAKE_EN to an MCU input)No processor can observe CN_BRAKE_EN. A 100k tap to a spare input makes brake state a status field. One resistor and one trace.not started, tier 2, tracedS2

Every board

  1. off, P7 Board revision readable by firmware (BORD_ID straps)BORD_ID straps are DNP on PIMU and hardwired on the line sensor; V2 and V3 are indistinguishable over USB (13 wrong-device findings in the tools audit). Assign a code per board and rev, expose it in status and the USB serial descriptor. BOM.not started, tier 1, tracedP7

New board

  1. warning, N1 External charger adapter (MAX17703 CC/CV, 36 V to 28.8 V at 5 A)Design, report, BOM calculator and DigiKey carts exist under Documents/hello-robot/charger-adapter-bom. Charging a pack outside the robot is today's manual workaround for the false low-SOC latch and deep-discharge recovery. Fold into the same order.in progress, designedN1

Board view groups the same list by status. Updated 2026-09-04.

Bench checks before the freeze

  1. off, Scope CPU_PWR_TIMER (TP32) and 20V_EN (TP63) through a button press, charger attached vs not; correlate with NUC bootConfirms F-04 and sizes the delay P9 must re-create. The HIL rig can drive this unattended once S4RIG_v3 is wired.not started, bench-firstB1
  2. off, Find what drew over 3 A on 4042's LED rail; verify the rest of that PIMUOpen action from the 4042 debug; gates P11.not started, bench-firstB2
  3. off, Barrel-jack mechanical presence with an unpowered adapterChecks the P2 and P8 assumptions.not started, bench-firstB3
  4. off, CHARGING_FLAG1/2 polarity at the ESP while forcing charging, complete and faultGates the P8 silk and the charge-complete firmware item.not started, bench-firstB4
  5. off, Toggle charger_disable vs ISMON on a bench PIMUDecides P3: is the firmware charger path connected at all.not started, bench-firstB5
  6. off, On an interrupted-flash repro, confirm the latch is the eFuse itself; check the TPS259807 pin map against its own datasheetBefore choosing retry straps for P4.not started, bench-firstB6
  7. off, CN14-1 on a healthy robot, and a working LED string at 3.3 V vs 5 V side by sideBefore committing to P1.not started, bench-firstB7

Firmware on the same cycle

  1. off, Read CHARGING_FLAG1/2: real charge-complete and fault on the lightbarFirmware; verify polarity on the bench first (b4).not startedafter B4F1
  2. off, charge_source plumbing ESP to SAMD to statusPer the dock-vs-barrel reply; needs P2 for full discrimination, partial without it.not startedF2
  3. off, EOA current gain inconsistency, 4.67 vs 6.67 between code paths (ERRATA #4)Firmware.not startedF3
  4. off, Per-board USB descriptors and serial, plus the ModemManager/udev production fixEnds the wrong-device flashing class (the 4032 rig PIMU brick). Pairs with P7.not startedafter P7F4
  5. off, Bench/rig build flag for the ESP no-NUC watchdog and BMS-absent shutdown pathsThe flashing-rig self-shutdown chain.not startedF5
  6. off, Ship the ADC1 stall fix (bugfix/pimu-adc-stall, PR #39) in the 4.5 firmwareOne-line NVIC priority fix plus watchdog; hardware-validated on 4059. Candidate, not on the PCB list.not startedF6
  7. off, Host velocity timeout in VEL_TRAJ (first wave of the velocity-control fix)From the 2026-09-04 velocity control assessment: no host timeout anywhere. Candidate, not on the PCB list.not startedF7

Scope

Stretch 4.5 is a good amount of change without a new product: the boards get respun to remove the failure classes the last three months of investigations traced to hardware, and the firmware that should ride the same cycle ships with them. Every candidate below was re-verified against the V3 netlists, BOMs and firmware before it made the list; nothing is adopted until the board owners say so.

Rules

  • A candidate moves to adopted only with the board owner's name on it; this board is a menu, not a decision.
  • Bench-first items are not frozen until their measurement exists; the rig runs B1 unattended.
  • Tier 1 items are the default yes; tier 3 items need a design review slot before the freeze date.
  • Firmware that needs a new board waits for the board; firmware that does not ships when ready.
  • Every adopted change gets a REV_DELTAS entry in stretch_ecad so V3 and V4 stay distinguishable.

Sources: PCB respin candidates report (2026-09-03), External charger adapter report and BOM carts, Power-state FMEA (F-01 to F-24), PIMU ADC stall fix, Stretch 4 velocity control assessment.