Add error-resilient firmware with diagnostic LED blink patterns (3 slow = alive, solid = I2C OK, fast burst = I2C error). Document EVM external MCU wiring: disconnect P6 EN jumper, power VDD from XIAO 5V, leave SCL/SDA jumpers in place with MSP430 unpowered. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.1 KiB
5.1 KiB
xblink Project Status
Current Milestone: M2 — Engine Patterns Last Updated: 2026-03-05
Phase 0 — Project Setup (COMPLETE)
- Initialize git repository and Rust project
- Configure build target (thumbv6m-none-eabi)
- Create project documentation (README, CLAUDE.md, STATUS, DEVELOPMENT_PLAN)
- Verify
cargo build --releasecompiles - Initial git commit
Group A — LP5562 Only
Hardware needed: XIAO M0 + LP5562EVM + mini-USB cable
M1: LED Smoke Test
- Copy LP5562 driver from
../ntag5-samd21-lp562/src/lp5562.rs - Create
src/led/mod.rswith re-exports - Update
main.rswith I2C init + GPIO EN + LP5562 direct PWM test - Verify
cargo build --releasecompiles - Verify LP5562 I2C control via EVM USB-to-I2C bridge (
tools/lp5562_evm.py) - Flash XIAO M0 and verify RGBW LED channels with Rust firmware
M2: Engine Patterns
- Build breathing pattern (1 engine, ramp up/down, branch loop)
- Build heartbeat pattern (1 engine, fast ramp, slow decay)
- Build RGB color cycle (3 engines, trigger sync)
- Verify LP5562 runs patterns autonomously (MCU idle loop)
- Verify MCU can stop and switch patterns
M3: Hardcoded Pattern Library
- Define 4-5 const patterns in firmware
- Implement pattern selector (compile-time or boot-cycle)
- Reduce LED current to 2-5mA/ch (EH-realistic budget)
- Document actual engine program structures (informs M5 format design)
Group B — Add NTAG5Link
Hardware needed: + NTAG5Link Click board + I2C jumper
M4: NTAG5 EEPROM Read/Write
- Write
Ntag5Link<I2C>driver (src/ntag5/mod.rs) - Implement register map (
src/ntag5/registers.rs) - Implement EEPROM block read/write
- Implement session register access
- Test round-trip: PCSC writes EEPROM, MCU reads back, displays on LEDs
M5: Boot-from-EEPROM
- Design binary pattern format (informed by M2-M3 experience)
- Implement pattern deserializer (
src/pattern/mod.rs) - Implement engine program builder (
src/pattern/engine.rs) - Update main.rs: boot → read EEPROM → parse → program LP5562 → idle
- Write Python serializer tool for PCSC pattern uploads
M6: SRAM Mailbox
- Implement SRAM read/write (
src/ntag5/sram.rs) - Design command/response protocol
- Implement MCU-side protocol handler
- Test pattern update via NFC without power-cycling
Group C — Power + Recovery
Hardware needed: + Hall sensor + multimeter
M7: Sleep/Wake
- Configure SAMD21 EIC for FD pin wake
- Implement STANDBY sleep after LP5562 programming
- Verify LP5562 keeps running during MCU sleep
- Measure current: active vs standby vs total system
M8: Recovery Mode
- Wire hall sensor to EIC-capable GPIO
- Implement boot-time hall sensor check
- Recovery: load default pattern, skip EEPROM, stay awake
- Test with magnet
M9: Power Characterization
- Measure current at various LED current settings
- Test NTAG5Link EH output with phone NFC
- Find optimal brightness vs EH budget balance
- Document real power numbers
Group D — Abstraction + Polish
M10: LedController Trait
- Define trait based on proven usage patterns from Groups A-C
- Implement for LP5562 wrapper
- Refactor main.rs to trait-based API
M11: SimplePwm Driver
- Implement only if single-color LED hardware is available
Group E — Future
Custom PCB (SAMD21E)
- Port to
atsamd-halwithsamd21efeature - Custom
memory.xlinker script - PCB design and fabrication
Companion App (React Native)
- NFC communication + pattern editor + upload
Firmware Update (NFC OTA)
- Custom bootloader if needed post-implant
Open Questions
| Question | Status | Notes |
|---|---|---|
| Energy harvesting power budget | TBD | Multimeter measurements in M9 |
| Optimal LED current per channel | TBD | Probably 2-5mA/ch, verify in M9 |
| Firmware update strategy | Deferred | UF2 for dev, NFC OTA evaluated later |
| NTAG5Link I2C slave address | Assumed 0x54 | Verify in M4 with Click board |
| Pattern binary format | Deferred to M5 | Design after M2-M3 engine experience |
| Hall sensor + EN circuit | Designed | Wired-AND: hall + MCU open-drain on EN with 1M pull-up. See docs/plans/2026-03-03-hall-en-design.md |
| Hall sensor part selection | Decided | DRV5032FB (SOT-23, 8.4mT, prototype) → DRV5032FE (X2SON 1x1mm, final PCB) |
| EN pull-up value | Decided | 1M — zero steady-state draw, 3µA when EN low, ~10µs rise time |
Hardware Inventory
| Item | Status | Notes |
|---|---|---|
| Seeed XIAO M0 | Available | Dev board MCU (SAMD21G18A) |
| LP5562EVM | Available | TI eval module, RGBW LEDs, I2C addr 0x30 |
| Mini-USB cable | Available | USB-C, used for flashing XIAO M0 |
| NTAG5 Link Click | Available, partially wired | Missing I2C jumper to XIAO |
| Hall effect sensor | Not available | Need to source — TI DRV5032FB (SOT-23) for prototype |
| ACR1552 PCSC reader | Available | For ntag5sensor Python tooling |
| Multimeter | Available | For power budget measurements |