- 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>
160 lines
7.5 KiB
Markdown
160 lines
7.5 KiB
Markdown
# Hall Sensor + LP5562 EN Wired-AND Circuit Design
|
|
|
|
**Date**: 2026-03-03
|
|
**Status**: Design in progress
|
|
|
|
## Problem
|
|
|
|
The implant needs a hall sensor for three functions:
|
|
1. **Pattern swap** — quick magnet tap cycles to the next stored pattern
|
|
2. **Runtime recovery** — long hold + confirmation tap enters safe mode
|
|
3. **Boot-time recovery** — magnet present at power-on skips EEPROM, loads default
|
|
4. **Hardware safety** — LEDs forced off by magnet even if MCU firmware has crashed
|
|
|
|
These must work within extreme space and power constraints (energy-harvested implant).
|
|
|
|
## Circuit: Wired-AND on LP5562 EN
|
|
|
|
Zero extra active components. Hall sensor and MCU share the EN line via open-drain outputs.
|
|
|
|
```
|
|
VCC (3.0V from NTAG5Link EH)
|
|
|
|
|
1M (pull-up resistor)
|
|
|
|
|
EN ------+------- MCU D0/A0 (open-drain)
|
|
|
|
|
+------- Hall sensor OUT (open-drain, active-low)
|
|
|
|
|
LP5562 EN pin
|
|
|
|
|
|
Hall sensor OUT ---- MCU EIC pin (separate connection for interrupt/wake)
|
|
```
|
|
|
|
### How it works
|
|
|
|
| State | MCU pin | Hall sensor | EN line | LP5562 |
|
|
|-------|---------|-------------|---------|--------|
|
|
| Normal operation | High-Z | High-Z (no magnet) | High (pull-up) | On |
|
|
| Magnet present | High-Z | Driving low | Low | Off |
|
|
| MCU disabling LP5562 | Driving low | High-Z | Low | Off |
|
|
| Magnet + MCU low | Driving low | Driving low | Low | Off |
|
|
|
|
### Pull-up resistor: 1M
|
|
|
|
- Steady-state current: ~0 (both open-drains high-Z, no path to ground)
|
|
- Current when EN low: 3V / 1M = 3 µA (only during magnet or MCU-driven low)
|
|
- Rise time: ~10 µs (1M x ~10pF parasitic) — instant from human perspective
|
|
- LP5562 EN input is high-impedance CMOS — no DC loading
|
|
|
|
## Hall Sensor: TI DRV5032
|
|
|
|
| Variant | Use | Iq | Threshold | Output | Package |
|
|
|---------|-----|-----|-----------|--------|---------|
|
|
| **DRV5032FB** | Prototype | 1.6 µA | 8.4 mT (omnipolar) | Open-drain | SOT-23 |
|
|
| **DRV5032FE** | Final PCB | 0.55 µA | 4.5 mT (omnipolar) | Open-drain | X2SON (1x1mm) |
|
|
|
|
- **Omnipolar**: Triggers on either magnetic pole (user doesn't need to orient magnet)
|
|
- **8.4 mT threshold (FB)**: Higher threshold = harder to accidentally trigger. Requires deliberate, close magnet interaction. Good for "don't accidentally enter recovery" requirement.
|
|
- **Open-drain, active-low**: Required for wired-AND topology
|
|
- **SOT-23 for prototyping**: Easy to hand-solder; X2SON for final implant PCB
|
|
|
|
## Interaction Model
|
|
|
|
### Pattern Swap (tap <1s)
|
|
|
|
1. Magnet near → hall pulls EN low → LEDs off instantly (hardware, zero MCU latency)
|
|
2. MCU wakes via EIC interrupt on hall sensor pin, starts timer
|
|
3. Magnet removed (hall goes high-Z, pull-up restores EN)
|
|
4. MCU detects short press (<1s) → loads next stored pattern → LEDs back on
|
|
|
|
### Runtime Recovery (hold >3s + confirm)
|
|
|
|
1. Magnet near → EN low (hardware), MCU wakes via EIC
|
|
2. MCU counts hold duration while hall stays asserted
|
|
3. Magnet removed after >3s → MCU notes "long hold detected"
|
|
4. MCU re-enables LP5562 → blinks warning pattern (3x red flash)
|
|
5. MCU waits 2s for confirmation tap
|
|
6. Confirmation tap received → enters recovery mode
|
|
7. No confirmation → resumes normal operation (reloads previous pattern)
|
|
|
|
### Boot-time Recovery
|
|
|
|
1. NFC field arrives, VOUT powers system
|
|
2. Hall sensor already active (magnet was present before power) → EN held low by hardware
|
|
3. MCU boots, reads hall GPIO → asserted → boot-time recovery
|
|
4. Loads hardcoded default pattern (solid white, low brightness)
|
|
5. Skips EEPROM pattern data
|
|
6. Sets recovery flag in SRAM for phone app detection
|
|
7. When magnet removed, EN goes high, default pattern runs
|
|
|
|
### Hardware Safety (MCU crashed)
|
|
|
|
- Holding magnet forces EN low at circuit level regardless of MCU state
|
|
- No firmware dependency — pure hardware path
|
|
- Magnet removal restores EN via pull-up (LP5562 resumes last-programmed pattern)
|
|
|
|
## Firmware State Machine (M8)
|
|
|
|
```
|
|
┌─────────────┐
|
|
power-on -->│ BOOT_CHECK │
|
|
└──────┬──────┘
|
|
hall low? │
|
|
┌───yes─────┼────no───┐
|
|
v │ v
|
|
┌──────────┐ │ ┌─────────────┐
|
|
│ RECOVERY │ │ │ RUNNING │<──────────────┐
|
|
└──────────┘ │ └──────┬──────┘ │
|
|
│ hall EIC │ │
|
|
│ interrupt│ │
|
|
│ v │
|
|
│ ┌─────────────┐ │
|
|
│ │ HALL_ACTIVE │ │
|
|
│ └──────┬──────┘ │
|
|
│ hall released │
|
|
│ │ │ │
|
|
│ <1s >3s │
|
|
│ │ │ │
|
|
│ v v │
|
|
│ ┌──────┐ ┌──────────────┐ │
|
|
│ │ SWAP │ │ WARN_BLINK │ │
|
|
│ └──┬───┘ └──────┬───────┘ │
|
|
│ │ hall tap │ no tap │
|
|
│ │ in 2s? │ │
|
|
│ │ ┌──yes ┌──no │
|
|
│ │ v v │
|
|
│ │ ┌────────┐ │ │
|
|
│ │ │RECOVERY│ │ │
|
|
│ │ └────────┘ │ │
|
|
│ └──────────────┴──────────┘
|
|
```
|
|
|
|
States:
|
|
- **BOOT_CHECK**: Read hall GPIO. If asserted → RECOVERY. Else → RUNNING.
|
|
- **RUNNING**: LP5562 engines active, MCU in STANDBY sleep. Wakes on hall EIC.
|
|
- **HALL_ACTIVE**: Magnet detected. Timer running. Waiting for release.
|
|
- **SWAP**: Load next pattern, re-enable LP5562 → RUNNING.
|
|
- **WARN_BLINK**: Blink 3x red. Wait 2s for confirmation tap.
|
|
- **RECOVERY**: Default pattern, skip EEPROM, stay awake, set SRAM flag.
|
|
|
|
## Power Impact
|
|
|
|
| Component | Added draw | When |
|
|
|-----------|-----------|------|
|
|
| Hall sensor (DRV5032FB) | 1.6 µA | Always (quiescent) |
|
|
| Pull-up resistor (1M) | 3 µA | Only when EN is low (magnet or MCU-driven) |
|
|
| Pull-up resistor (1M) | ~0 | Steady state (EN high, no current path) |
|
|
|
|
Total added quiescent: **~1.6 µA** — negligible vs LP5562 LED current (~12 mA).
|
|
|
|
## Open Questions
|
|
|
|
| Question | Notes |
|
|
|----------|-------|
|
|
| Debounce needed? | Hall sensors are usually clean (no mechanical bounce), but verify with DRV5032 |
|
|
| EIC pin selection on SAMD21E | Must be EIC-capable for wake from STANDBY. Check SAMD21E pinout. |
|
|
| Magnet strength/distance | What N52 neodymium size triggers DRV5032FB at implant depth (~3-5mm subdermal)? |
|
|
| Multiple stored patterns | How many patterns to cycle through? Currently TBD (depends on EEPROM format, M5) |
|