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>
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:
- Add VID
0x3629/ PID0x301Bto/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist - Set
ifdDriverOptionsto0x0001(enables CCID exchange — though escape commands still return 6A81) - 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)