RFID 技术已广泛应用于各种工业和政府环境中的资产标记。
典型应用程序使用带有编码 EPC 内存和数据库的序列化标签集,该数据库将标签的 EPC 数据链接到资产标识符。例如,用 96 位 EPC 代码编码的 RFID 标签可以与特定序列号计算机服务器、机床或医疗设备相关联。跟踪系统设计中隐含的假设是可以可靠地读取标签,从而正确识别资产。
然而,这个过程可能会受到称为位翻转的问题的影响。
位翻转
市场上绝大多数 RFID 标签使用 EEPROM 存储器来存储识别数据。存储在存储单元中的电荷决定了识别 EPC 数据中每个位的值(即,已充电的存储单元可以表示“1”,而空单元可以表示“0”,反之亦然)。
在两种潜在情况下,存储单元的状态可能变得不确定。为简单起见,我们假设一个充电的存储单元代表一个“1”。
存储单元“泄漏”,编码期间沉积的电荷会消散,导致单元状态发生变化,因此位从“1”变为“0”
存储单元在编码期间未完全充电,并且从统计上讲,部分充电的单元有可能被读取为“0”而不是“1”†
†从技术上讲,充电位总是有可能被解释为“0”。但是,当超过指定的充电阈值时,发生这种情况的可能性非常小。统计细节远远超出了本次讨论的范围。
示例场景
一个示例场景可能是 bin 1011 最终更改为 bin 1001——最常见的是十六进制字符“B”更改为十六进制“9”,这表现为一个标签反向散射两个 EPC 代码。例如,使用 96 位编码:
E280 1170 EA21 7B2A 04C2 1181 和 E280 1170 EA21 792A 04C2 1181
这种情况很少被观察到——我们不知道任何芯片制造商提供的任何关于流行率的可靠数据——但实际上部署了数十亿个 RFID 标签,这种可能性不容忽视。
作为健全性检查,考虑 10-6 / 单元的故障率 ε 和 128 位扩展 EPC 存储器的使用,这在许多 RFID 芯片中都可用,我们认为这比通常观察到的故障率更高,但原则适用无论真实汇率是多少。出于讨论的目的,我们将忽略任何时间影响(即故障时间分析)。在 ε = 10-6 时,预计约 7,812 个标签中的 1 个将表现出单个位翻转;此外,预计约 6150 万个标签中有 1 个会显示两个翻转位,预计约 4880 亿个标签中有 1 个会显示三个翻转位。
可靠地检测和纠正单位翻转
由于故障率如此之低,因此可以可靠地检测和纠正单个位翻转的实例。
最简单的方法是将每个位编码为三元组,并使用“多数规则”方法来确定正确的数据。在这种情况下,单个“1”被编码为“111”,“0”被编码为“000”。如果三元组中的一位翻转,其他两位将“投票”以覆盖错误位。这种方法非常稳健,因为数据丢失需要非常非常不可能的事件,即任何一个三元组的两位翻转。再一次,考虑我们上面的 128 位编码示例,任何一个三元组的 2 位翻转的概率,即不可恢复的数据丢失,是:
~1/64 * (128/1,000,000) *(127/1000000) ~ 2.5 X10-10 或 ~ 39 亿分之一。
这是在一个标签上翻转的第一个和第二个位的概率与第二个翻转的位是特定三元组中相邻位之一的概率的乘积。
在多数规则场景中,数据损坏的概率非常低。然而,标签的数据存储容量减少了三分之二,在 128 位内存只能保存 41 位信息的情况下,只有不到 33% 的可用标签内存用于数据。
检测两个翻转位
有一种内存占用较少的方法可以检测和纠正单个翻转位,以及检测(但不纠正)具有两个翻转位的标签的概率低得多的事件。
这可以通过不直接对标签进行编码,而是通过使用模式的修改来完成,该模式最初由 Richard Hamming 发明,称为 SECDEC,或单纠错双错误检测。
此模式使用基于有效负载数据计算的附加奇偶校验位。顾名思义,该算法只允许纠正一个翻转的位,但允许检测第二个翻转的位。 RFID 系统设计人员必须在架构中加入资源,以处理单个标签上的双翻转位这种不太常见的情况。