高级

标签编码和 EPC 存储器

掌握标签存储器架构和 GS1 编码,以实现供应链集成

4 个存储库

每个 EPC Gen2 标签都有 4 个存储库,每个存储库都有特定的用途。了解此结构对于编码、读取和保护您的标签至关重要。

库 00(保留):包含 32 位 Kill 密码和 32 位访问密码。默认值为 0x00000000。发送 Kill 密码后,会永久禁用标签. 不可逆。访问密码锁定存储库,以防止未经授权的写入。

库 01 (EPC):包含 StoredCRC(16 位,自动计算)、StoredPC/协议控制(16 位,指示 EPC 长度和标签功能)以及 EPC 值本身. 通常为 SGTIN-96 的 96 位(12 字节)。某些标签支持 128 位甚至 496 位 EPC。

库 10 (TID):出厂编程的标签标识符。包含芯片制造商代码、型号和唯一的序列号。此库是只读的,永远无法更改. 这使其在防伪和标签身份验证方面非常宝贵。

库 11 (User):可选的额外存储。大小因芯片而异:NXP UCODE 9 有 0 位(无用户存储器),Quanray QStar-7U 有 512 位(64 字节)。将其用于批号、检查日期、温度阈值或维护记录。写入前务必检查可用容量。

SGTIN-96 编码. 逐步操作

SGTIN-96 是应用最广泛的 EPC 方案。它将 GTIN-14(您的产品条形码)加上一个唯一的序列号编码成正好 96 位(12 字节)。这允许每个产品类型最多有 2740 亿个唯一的序列号。

96 位结构:标头(8 位,对于 SGTIN-96 始终为 0x30)→ 过滤器(3 位:0=全部,1=POS,2=整箱,3=保留,4=内包装,5=保留,6=单元负载,7=组件)→ 分区(3 位:定义公司前缀和项目参考之间的位数分配)→ 公司前缀(20–40 位)→ 项目参考(4–24 位)→ 序列号(38 位)。

分区值 (0–6) 决定了公司前缀的长度:P=0 → 40 位前缀(12 位数字),P=1 → 37 位(11 位数字),P=2 → 34 位(10 位数字),P=3 → 30 位(9 位数字),P=4 → 27 位(8 位数字),P=5 → 24 位(7 位数字),P=6 → 20 位(6 位数字)。您的 GS1 公司前缀长度决定了要使用的分区值。

💡

使用 Nextwaves TDS RFID 转换器工具,网址为 /tools/tds-rfid-converter,以交互方式编码和解码 SGTIN-96 值。输入您的 GTIN-14 + 序列号,即可立即获得十六进制 EPC。

SGTIN-96 Bit Structure
┌────────┬──────┬─────┬──────────────┬──────────────┬──────────────┐
│ Header │Filter│Part │Company Prefix│Item Reference│   Serial     │
│ 8 bits │3 bits│3bits│  20-40 bits  │   4-24 bits  │   38 bits    │
│  0x30  │ 0-7  │ 0-6 │  GS1 prefix  │  product ref │  unique ID   │
└────────┴──────┴─────┴──────────────┴──────────────┴──────────────┘

Partition table (defines prefix/item bit allocation):
P=0: 40-bit prefix (12 digits)  P=4: 27-bit prefix (8 digits)
P=1: 37-bit prefix (11 digits)  P=5: 24-bit prefix (7 digits)
P=2: 34-bit prefix (10 digits)  P=6: 20-bit prefix (6 digits)
P=3: 30-bit prefix (9 digits)

Example: 3034257BF7194E4000001A85
  Header=0x30 Filter=1 Part=5 Prefix=0614141
  Item=812345 Serial=6789 → GTIN-14: 80614141123458

其他 EPC 方案

除了 SGTIN-96 之外,GS1 还定义了其他几种 96 位 EPC 方案,用于不同的供应链标识符。每个方案都有自己的标头字节。

读取和写入标签存储器

在库存期间读取标签是被动的. 阅读器广播一个查询,标签从库 01 响应其 EPC。但您也可以通过发送带有库号、字偏移量和字数的 READ 命令来显式读取任何存储库。

写入标签需要更高的精度。必须对标签进行单选(只有一个标签响应),并且写入一次一个字(16 位)。完整的 96 位 EPC 写入需要 6 个连续的字写入。每次写入需要 10–20 毫秒,因此仅对 EPC 数据进行编码一个标签需要 60–120 毫秒。

常见的写入失败:标签离天线太远(写入需要比读取更强的信号. 将标签置于1米以内)。场内有多个标签(单标签识别失败. 隔离目标标签)。标签存储器已锁定(需要访问密码)。写入验证失败(重试,或者标签可能有缺陷. 典型缺陷率为万分之一到三)。

💡

最佳实践:写入后务必通过读回数据并进行比较来验证。在极少数情况下,写入命令可能会成功,但会损坏相邻的位。读后写验证可以捕获这些问题。

Write EPC — Nextwaves NRN Protocol
TX → 5A 00 01 02 11 00 0C [EPC_12_BYTES] [CRC16]

Write per 16-bit word: 10-20ms
Full 96-bit EPC = 6 words = 60-120ms total

With access password:
TX → 5A 00 01 02 11 00 10 [PWD_4B] [EPC_12B] [CRC16]

标签安全和密码

EPC Gen2 标签支持两个 32 位密码以确保安全。访问密码锁定特定的存储器库. 一旦设置,该库在任何读取或写入操作之前都需要密码。当传输时,Kill 密码会永久禁用标签. 这是一种不可逆的操作,主要用于零售业的消费者隐私(在结账后销毁标签)。

安全最佳实践:切勿在生产中使用默认的全零密码 (0x00000000). 它不提供任何安全性。为每个标签批次生成唯一的密码,或使用您的公司前缀作为种子。将密码存储在您的后端系统中,切勿存储在标签本身上(如果标签已解锁,则可以读取密码存储器)。在编程后锁定密码库。考虑使用不可追踪模式(在较新的芯片上可用),该模式隐藏 TID 并减少 EPC,从而在不销毁标签的情况下提供隐私。

⚠️

Kill 命令是永久性的,不可逆转。无法撤消。一旦标签被销毁,它将永远无法再次响应任何阅读器。始终在您的软件中实施 kill 密码验证,并在执行 kill 命令之前需要经理授权。