- Hall sensor + LP5562 EN wired-AND circuit design (DRV5032FB/FE, 1M pull-up, open-drain topology) with three interaction modes: boot-time recovery, tap-to-swap, hold-to-confirm recovery - NTAG5 config check tool (tools/ntag5_config_check.py) using uFCoder library for ISO15693 transparent mode via uFR Zero reader. Supports inventory + addressed mode for multi-tag fields. - Updated DEVELOPMENT_PLAN with I2C bus management notes for LP5562 (0x30) + NTAG5Link (0x54) shared bus - Updated README with wired-AND hardware diagram, hall sensor interaction section, and updated wiring table - Updated CLAUDE.md with LP5562 EN wired-AND topology docs - Updated STATUS.md with hall sensor decisions and hardware inventory Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
149 lines
5.0 KiB
Markdown
149 lines
5.0 KiB
Markdown
# xblink Project Status
|
|
|
|
**Current Milestone**: M1 — LED Smoke Test (code ready, needs USB cable to flash)
|
|
**Last Updated**: 2026-03-03
|
|
|
|
---
|
|
|
|
## Phase 0 — Project Setup (COMPLETE)
|
|
|
|
- [x] Initialize git repository and Rust project
|
|
- [x] Configure build target (thumbv6m-none-eabi)
|
|
- [x] Create project documentation (README, CLAUDE.md, STATUS, DEVELOPMENT_PLAN)
|
|
- [x] Verify `cargo build --release` compiles
|
|
- [x] Initial git commit
|
|
|
|
## Group A — LP5562 Only
|
|
|
|
**Hardware needed**: XIAO M0 + LP5562EVM + mini-USB cable
|
|
|
|
### M1: LED Smoke Test
|
|
|
|
- [x] Copy LP5562 driver from `../ntag5-samd21-lp562/src/lp5562.rs`
|
|
- [x] Create `src/led/mod.rs` with re-exports
|
|
- [x] Update `main.rs` with I2C init + GPIO EN + LP5562 direct PWM test
|
|
- [x] Verify `cargo build --release` compiles
|
|
- [ ] Flash and verify RGBW LED channels on LP5562EVM
|
|
|
|
### 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-hal` with `samd21e` feature
|
|
- [ ] Custom `memory.x` linker 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 | Not on hand | Needed to flash 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 |
|