Files
xblink/docs/plans/2026-03-03-ntag5-config-check.md
michael 90eab7990c Rewrite config check for PCSC, document uFR Zero CCID limitations
The uFR Zero presents as CCID (not serial), so the uFCoder library
cannot communicate with it. Rewrote ntag5_config_check.py to use
pyscard with auto-detection: ACR1552 for full NXP config verification,
generic PCSC for basic tag info. Removed uFCoder library (unusable).

Backed up CCID Info.plist before adding uFR Zero VID:PID entry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:27:04 -08:00

3.6 KiB

NTAG5Link Config Verification via NFC Reader

Date: 2026-03-03 Status: Partial — tag detected, config read requires ACR1552

Goal

Read-only verification that the NTAG5Link Click board's configuration matches xblink requirements.

Tool

tools/ntag5_config_check.py — Python script using pyscard (PCSC) with auto-detection of reader capabilities.

Reader support:

  • ACR1552: Full NXP config verification via transparent ISO15693 mode (NXP READ_CONFIG 0xC0)
  • uFR Zero (CCID): Basic tag info only — UID, EEPROM blocks. Cannot read NXP config registers.

Expected Config

Setting Expected Config Location
EH mode low_field_strength CONFIG byte 0, bits 3:2 = 10
Use case i2c_slave CONFIG byte 1, bits 5:4 = 00
SRAM enabled true CONFIG byte 1, bit 1 = 1
Arbiter mode sram_passthrough CONFIG byte 1, bits 3:2 = 10
EH enable true EH_CONFIG byte 0, bit 0 = 1
EH voltage 3.0V EH_CONFIG byte 0, bits 2:1 = 10

uFR Zero Investigation Results

The D-Logic uFR Zero Multi-ISO reader presents as a CCID (USB SmartCard class 0x0B) device, not serial.

USB: VID:PID 3629:301b, serial "UD101156"

What works (PCSC/CCID)

Command APDU Result
GET_DATA (UID) FF CA 00 00 00 UID: E0:04:01:58:7F:8F:11:00 (NXP ISO15693)
READ_BINARY FF B0 00 xx 00 Reads ISO15693 user EEPROM blocks
NDEF CC (block 0) FF B0 00 00 00 E1 40 80 09 — NDEF v4.0, 1024 bytes

What doesn't work

Approach Result Why
uFCoder ReaderOpen 0x1002 (timeout) Library scans serial/tty, doesn't support CCID USB
uFCoder ReaderOpenHnd_ZeroUSB 0x0054 (opening error) Even with pcscd stopped
PCSC transparent (FF C2) SW=6A81 Not supported by uFR Zero CCID firmware
CCID escape (IOCTL 0x42000001) 6A81 for all commands Advertised but non-functional
Raw ISO15693 via SCardControl 6A81 No passthrough mechanism

Key finding: CP210x is NOT the uFR Zero

/dev/ttyUSB0 (10c4:ea60, Silicon Labs CP210x) is a separate device (Proxmark3). The uFR Zero is a pure CCID device with no serial interface.

CCID setup required

The uFR Zero must be added to the CCID driver's device list:

  1. Add VID 0x3629 / PID 0x301B to /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
  2. Set ifdDriverOptions to 0x0001 (enables CCID exchange — though escape commands still return 6A81)
  3. Restart pcscd: systemctl restart pcscd

Path Forward: ACR1552

The ACR1552 reader supports transparent ISO15693 mode (FF C2 pseudo-APDUs with TLV encoding), enabling NXP custom commands. The ntag5_config_check.py tool auto-detects the ACR1552 and switches to full config verification mode.

# ntag5sensor has proven ACR1552 + NXP custom command support:
chip = NTAG5Link(reader)
config = chip.get_config_info()
eh_config = chip.get_eh_ed_config_info()

Config Change Plan (if mismatches found)

Use ntag5sensor's write functions via ACR1552:

# Set I2C slave mode + SRAM passthrough + SRAM enable
chip.write_config1(
    sram_enable=True,
    arbiter_mode=NXP_CONFIG_1_ARBITER_MODE_SRAM_PASSTHROUGH,
    use_case=NXP_CONFIG_1_USE_CASE_CONF_I2C_SLAVE
)

# Set EH: 3.0V, enabled, current limit TBD
chip.write_eh_ed_config(
    enable=True,
    voltage=NXP_EH_CONFIG_EH_VOUT_V_SEL_3_0,
    current=NXP_EH_CONFIG_EH_VOUT_I_SEL_12_5,  # max for testing
    ed_config=NXP_ED_CONFIG_NFC_FIELD_DETECT
)

# Set EH mode in CONFIG byte 0
chip.write_config0(eh_mode=NXP_CONFIG_0_EH_MODE_LOW_FIELD_STRENGTH)