feat(rawcli): identify NTAG5 and ICODE DNA (READ_CONFIG probe)
NTAG5, ICODE DNA and SLIX2 all share E0 04 and answer READ_SIGNATURE, so name_iso15 now splits them with an addressed, retried READ_CONFIG (0xC0) probe: - session register 0xA0 (STATUS_REG) succeeds only on NTAG5 -> "NTAG 5" - 0xA0 errors but config block 0x00 succeeds (DNA has config mem) -> "ICODE DNA" - neither (SLIX2 has no READ_CONFIG) -> the 0xBD signature step -> "ICODE SLIX2" - plain SLIX answers neither -> "ICODE SLIX" Hardware-verified against a real NTAG5 (VivoKey VK Thermo, UID E0 04 01 58, 0xA0 -> 00 01400000) and a real ICODE DNA (UID E0 04 01 18, 0xA0 -> 01 0F error, 0x00 -> 00 ...). DNA was previously mislabeled "ICODE SLIX2". catalog_for routes DNA to the SLIX2 catalog for now (a dedicated DNA catalog with READ_CONFIG + AES is a follow-up). Adds a mocked unit test covering all four branches from the real captures. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -47,12 +47,13 @@ rendered dropdown on a real terminal is the only thing left unautomated.
|
||||
15693 catalogs. The **full request-flags byte** is settable: sub-carrier (0x01), data-rate,
|
||||
inventory, protocol-ext (0x08), and the mode-dependent bits 5-6 (Select/Address vs AFI byte +
|
||||
Nb_slots 1/16), plus option. `iso15_flags_decode` decodes every bit for the byte-0 hint.
|
||||
2. **Per-chip identify** — `identify.name_iso15` distinguishes SLIX vs SLIX2 (READ_SIGNATURE 0xBD
|
||||
probe). **NTAG5 and ICODE DNA both carry UID `E0 04 01 18`** (identical type indicator — model
|
||||
comment confirms), so they can't be told apart by UID. Routing NTAG5 needs a **functional
|
||||
probe** (e.g. READ_CONFIG 0xC0 of session register 0xA0/0xA1 — NTAG5 has them, DNA doesn't).
|
||||
⚠ HARDWARE-DEPENDENT: needs a brief NTAG5 tap to capture the discriminating response (and ideally
|
||||
a DNA capture to confirm it differs) before wiring — otherwise it risks misclassifying DNA.
|
||||
2. **Per-chip identify** ✅ — `identify.name_iso15` now splits the whole E0 04 family with a
|
||||
READ_CONFIG (0xC0) probe (addressed + retried), **hardware-verified against a real NTAG5 and a
|
||||
real DNA**: session register 0xA0 succeeds only on NTAG5 (`00 01400000`); DNA errors on 0xA0
|
||||
(`01 0F`) but its config block 0x00 succeeds; SLIX2 has no READ_CONFIG (falls to the 0xBD
|
||||
signature step); plain SLIX answers neither. So NTAG5 → "NTAG 5", DNA → "ICODE DNA" (was
|
||||
mislabeled SLIX2), SLIX2/SLIX as before. Real UIDs: NTAG5 `E0 04 01 58`, DNA `E0 04 01 18`
|
||||
(the model's NTAG5 prefix `…18` was copied from DNA; real NTAG5 is `…58`).
|
||||
3. **Catalogs** — `_SLIX`, `_SLIX2`, and **`_NTAG5`** ✅ all done, dispatched by `catalog_for`,
|
||||
verified live. `_NTAG5` = SLIX2 minus STAY_QUIET_PERSISTENT (NTAG5 rejects it) + READ_CONFIG
|
||||
(0xC0) / WRITE_CONFIG (0xC1) / PICK_RANDOM_UID (0xC2) / READ_SRAM (0xD2) / WRITE_SRAM (0xD3).
|
||||
|
||||
Reference in New Issue
Block a user