Files
xblink/docs/plans/2026-03-03-hall-en-design.md
michael db492050e3 Add hall sensor circuit design, NTAG5 config check tool, I2C bus docs
- 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>
2026-03-03 14:06:11 -08:00

7.5 KiB

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)