BRINGUP: DRV8825 rail-glitch wedge, accel liveness, probe direction

Hardware facts from the 2026-08-11 bench session: the DRV8825 drivers
can come out of a 40 V rail power-up unserviceable (playback and
counters run, motors dead; recovery is a longer true power-off, at
worst a machine power cycle) - so counters/anchors are never proof of
motion and the rail stays up. The head accelerometer is the motion
truth (device mapping, bench-characterized thresholds, read-rate
limits), and every probe move goes +X first - a cable lives at the
end of left travel.
This commit is contained in:
ScottW514
2026-08-11 20:01:24 -04:00
parent 58bc5e293a
commit 1e3b2716b7
+26
View File
@@ -522,6 +522,32 @@ accordingly ("Automatic — AP country, else World").
## Hardware facts bank (measured)
- **DRV8825 stepper drivers wedge on 40 V rail glitches** (factory board;
the TMC2130s belong to the upgraded OpenGlow board only). A glitch can
leave the drivers unserviceable: SDMA playback and the position
counters run normally while the motors produce nothing. Their reset
lines are strapped (no kernel pin), `cnc/faults` does not flag the
state, and whether a given rail power-up wedges them is chance —
identical settle cycles produce different outcomes. Recovery: a longer
true power-off (the forgectrl supervisor ladders 5/15/30 s) and, at
worst, a full machine power cycle. Consequences: **counters, anchors,
and `H:1` are never proof of motion**; keep the rail up (every
power-up is a wedge lottery), which is why the pulse-device broker
exists and why there is no idle-rail-off policy.
- **Motion liveness = the head accelerometer** (`glowforge.dts`
`head-accel`, i2c-3 @0x1e — resolve iio devices by bus path, never by
index; lid = i2c-0 @0x1e, board = i2c-3 @0x1d). Bench-characterized on
an identical commanded 30 mm move: wedged drivers ≤ ~210 counts
peak-to-peak on X/Y (noise floor at 1 g ≈ 16384); real motion
≥ ~1000 p2p. The forgectrl liveness probe gates controller start on
p2p ≥ 500 (dead ≤ 250); gfhome requires at least one accel-witnessed
motion window before a quiet service counts as homed. Raw sysfs accel
reads are slow (~150 ms each) — enough for a binary verdict over a
multi-second window, not for waveforms (iio buffers exist, no trigger
devices in this kernel).
- **Any probe/liveness move goes RIGHT (+X) first, then back**: a cable
lives at the end of LEFT travel and must never be crushed.
- SDMA pulse engine: ring size = the `ring_mb` module parameter
(default 16 MiB; power of two, must fit the 16 MiB `cnc-pulsebuf` DT
pool; both were 128 MiB before 2026-08-03 — shrinking returned