Circuit review & bench-test guide
AXS-023 — VL53L1X time-of-flight ranger PMOD module
Document purpose#
Component-level explanation and bench-test plan for axs-023-vl53l1x, from generate_design.py, the module README.md, and the ST VL53L1X datasheet. Never fabricated; values are verification targets.
1. What the board does#
A laser time-of-flight distance sensor (to ~4 m) on I2C, with an interrupt (GPIO1) and shutdown (XSHUT) line brought to the PMOD. It teaches a rich I2C register model plus interrupt-driven ranging, and XSHUT enables address reassignment for multi-sensor buses.
PMOD J1 SCL/SDA (3/4, JP1/JP2 pull-ups) ─> U1 VL53L1X
XSHUT (2, 10k PU) ; GPIO1 INT (1, 10k PU + 100R)
2. Safety and scope boundaries#
- 3.3 V only (part rated 2.6–3.5 V). PMOD host or 3.3 V bench supply (~40 mA; VCSEL pulses draw more instantaneously — the on-board 4.7 µF reservoir covers that).
- Class-1 eye-safe 940 nm VCSEL — no hazard in normal use, but don't defeat the package or stare into magnified optics.
- Unreleased prototype.
4. Interfaces#
- J1 PMOD Type 6 extended: 1 INT (GPIO1), 2 XSHUT, 3 SCL, 4 SDA, 9/10 bus repeat, 5/11 GND, 6/12 3V3.
- JP1/JP2 4.7 k I2C pull-up disconnects.
5. Component-by-component review#
- U1 VL53L1CXV0FY1 (optical LGA): the ToF sensor. Fixed default address 0x29 (7-bit). If absent/dead: no ACK. Keep the optical window clean and unobstructed — a fingerprint or pour over the aperture wrecks ranging.
- XSHUT pull-up (10 kΩ): holds the sensor enabled; drive low to shut it down (and, for multi-sensor buses, to hold all-but-one in reset while reassigning addresses). If it floats: indeterminate power state.
- GPIO1 interrupt: 10 kΩ pull-up + 100 Ω series (R…): GPIO1 is open-drain; the pull-up defines its high, the 100 Ω protects the sensor-driven line to the PMOD. If pull-up absent: interrupt line floats (false edges). If series R absent: host miswire shorts GPIO1.
- C_AVDD 100 nF + C_VCSEL 4.7 µF: decoupling + the VCSEL pulse reservoir. If the reservoir is absent: rail dips on each ranging pulse → noisy or failed measurements.
- JP1/JP2 + 4.7 k pull-ups: I2C bus.
6. Datasheet summary (VL53L1X)#
- Supply 2.6–3.5 V; I2C up to 400 kHz, 7-bit address 0x29 (reprogrammable).
- Model ID: register 0x010F reads 0xEACC — the canonical "is it alive" read.
- Boot: after power/XSHUT-release, poll the firmware-ready bit, load the ~135- byte config, set distance mode + timing budget, start ranging, wait for GPIO1/interrupt, read the result, clear the interrupt.
- Range to ~4 m (dark, long mode); ambient light and target reflectivity reduce it. Class-1 laser.
7. Expected values before bench testing#
- Idle SDA/SCL: 3.3 V. ACK at 0x29.
- Read 0x010F → 0xEACC.
- With a target ~200 mm away, a completed ranging returns ~200 mm ±few % after the timing budget elapses; GPIO1 pulses on data-ready.
8. Manual review checklist#
- [ ] JP1/JP2 bridged; XSHUT 10 k pull-up; GPIO1 10 k pull-up + 100 Ω.
- [ ] 4.7 µF VCSEL reservoir + 100 nF present.
- [ ] Optical aperture unobstructed (no pour/paste/label at layout).
9. Ordered bench-test procedure#
A. Unpowered: verify pull-ups, XSHUT/INT networks, reservoir cap; no rail short.
B. Power, idle: 3.3 V (~40 mA). Bus idle-high; XSHUT reads high (enabled).
C. Alive check: I2C scan → ACK 0x29; read model-ID reg 0x010F → 0xEACC. If this fails, stop and recheck power/XSHUT.
D. XSHUT: drive XSHUT low; confirm the device drops off the bus (no ACK); release; confirm it returns. This is the multi-sensor address-reassignment primitive.
E. First ranging: load config, set short distance mode, start ranging; present a flat target at a measured 100/200/500 mm; confirm reported distance within a few % and that GPIO1 asserts per measurement, releasing after the interrupt-clear.
F. Range envelope: sweep to ~1–2 m; note degradation with a dark/oblique target and under bright ambient light (expected physics).
10. Troubleshooting map#
- No ACK: pull-ups cut, XSHUT held low, or wrong rail.
- ACK but 0x010F ≠ 0xEACC: bus corruption / wrong device.
- Noisy/short readings: VCSEL reservoir missing, obstructed aperture, or bright ambient.
- INT never fires: GPIO1 pull-up missing, or interrupt not configured.
11. Bench record template#
Board: axs-023 ACK 0x29: [ ] Model ID: 0x____ (exp EACC)
XSHUT drop/return: [ ]
Distance @100/200/500mm: ____/____/____ mm
GPIO1 asserts + clears: [ ]
Notes:
12. Review conclusion#
The 0x010F→0xEACC read is the fast go/no-go. The two module-specific hardware details worth confirming are the VCSEL reservoir (or readings get noisy) and the XSHUT drop/return behavior (the basis for multi-sensor address assignment). Keep the optical window clear — it's the one thing layout can ruin.