# 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. ```python # 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: ```python # 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) ```