Skip to content

spec: chip count / chip index at page 0x0D byte 3 (v2.2) - #26

Merged
BenGlut merged 1 commit into
mainfrom
spec/chip-count-byte
Sep 30, 2026
Merged

BenGlut merged 1 commit into
mainfrom
spec/chip-count-byte

Conversation

@BenGlut

@BenGlut BenGlut commented Sep 30, 2026

Copy link
Copy Markdown
Collaborator

What

Page 0x0D, byte 3 (offset +39) was reserved (0x00). It now tells a reader how many TigerTag chips the spool carries and which one it just read:

Bits Field Values
7–4 Chip count 0 unknown · 1 single chip · 2 twin tag · … 15
3–0 Chip index 0 unknown · 1 first chip · 2 second chip · …

Examples: 0x00 unknown · 0x11 single chip · 0x21 / 0x22 twin tag, chip 1 / 2.

Why

The shared Timestamp (section 2.9) says which chips belong together, but not how many there are. With this byte, a reader that scans one chip of a twin-tagged spool knows another one is waiting and can ask for it to collect the missing UID; the index tells it whether it re-read the same chip or the other one.

Compatibility

  • Every chip already written has 0x00 here → reads as "unknown", stays valid, no migration.
  • Readers older than v2.2 already ignore this byte.
  • Not covered by the ECDSA signature (UID + pages 4–5 only): setting it never invalidates a signed TigerTag+ chip.
  • Page 0x0D is written once at manufacturing (Color 2), unlike 0x17 which Tiger Scale rewrites — the value can't be clobbered by a scale firmware unaware of it.

Changes

  • README.md: memory-map table, compact offset map, new section 2.11, cross-reference from 2.9, version history and badge → v2.2.
  • llms.txt: version, offset map, short encoding note.
  • assets/chip_layout.svg: the rsv cell of page 0x0D becomes Chips.
  • Sample code/parse_tigertag.py: parses/writes the byte (chip_info, chip_count, chip_index), exposes it in to_dict() and the summary. Round-trip tested for 0x00, 0x11, 0x21, 0x22.

tools/docs_check.py passes.

Follow-ups (other repos)

  • TigerTag-SDK-JS and tigertag-sdk-python still document +39 as reserved.
  • Writers (Factory, Studio, Tiger Scale…) need to fill the byte for new spools.
  • Images/TigerTag Mapping RFID NXP213.png (raster, not referenced by the README) still shows page 0x0D byte 3 as reserved.

The byte was reserved and always 0x00. It now carries the number of
TigerTag chips on the spool (high nibble) and which one this chip is
(low nibble), so a reader that scans one chip of a twin tag knows
another chip is waiting and can collect its UID. 0x00 stays "unknown",
so every chip already written remains valid.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant