当我们谈论硬件安全与物联网协议逆向时,红外通信往往被视为「古老」技术而遭到忽视。然而,电子价签(Electronic Shelf Label,简称 ESL)系统中的红外协议,却是一个充满工程挑战与安全研究价值的领域。与传统遥控器使用的 IrDA 标准不同,ESL 厂商采用的自定义协议在载波频率、时序精度和帧结构上都有显著差异,这使得逆向工程成为一项既需要射频硬件知识、又考验协议分析能力的综合实践。
物理层特征:MHz 级载波与精密时序
电子价签红外通信的第一个技术难点在于载波频率的选择。传统红外遥控器通常使用 38kHz 载波,这一频段被各类红外接收芯片(如常见的 TSOP 系列)广泛支持。然而,ESL 厂商出于降低功耗、提升抗干扰能力的考虑,普遍采用了 MHz 级别的载波频率。根据公开的逆向工程成果,主流 ESL 系统使用的载波频率在 2MHz 至 4MHz 之间,具体数值因厂商而异。这意味着标准红外接收模块无法直接解调信号,研究者必须自行构建检波电路或使用高速光电二极管配合示波器进行原始波形捕获。
时序精度是第二个关键挑战。ESL 协议对符号宽度的容忍度通常在 ±10% 以内,部分厂商甚至要求 ±5% 的精度。这是因为 ESL 标签需要依靠电池工作长达数年,接收端电路被设计为极低功耗模式,对信号边沿的检测阈值设 计得极为敏感。任何过大的时序抖动都可能导致位判决错误,进而导致整个帧被丢弃。在使用微控制器实现发射功能时,硬件定时器的精度直接决定了通信的成功率 —— 软延时的 jitter 在高比特率下往往是致命的,建议使用硬件 PWM 或 DMA 驱动的 GPIO 翻转来实现精确的时序控制。
调制方式通常采用脉冲位置调制(PPM)或脉冲宽度调制(PWM)的变体。一个典型的实现会使用固定长度的时隙,每个时隙内载波的有无或位置对应不同的比特值。具体来说,短脉冲后跟长间隔可能代表比特「0」,而长脉冲后跟短间隔代表比特「1」,这种编码方式天然具有良好的直流平衡特性,有利于接收端的自动增益控制电路稳定工作。某些厂商还会在调制层引入双相编码(Bi-Phase Encoding),即每个比特周期进行一次电平翻转,这种方式在同步方面更为鲁棒,但解码复杂度也相应提高。
帧结构解析:从导引码到载荷封装
完整的 ESL 红外帧通常由以下几个部分组成:导引码(Preamble)、设备地址(Address)、命令字(Command)、数据载荷(Payload)以及校验和(Checksum)。理解每一字段的含义和长度,是实现自定义通信的前提。
导引码用于唤醒接收端的休眠电路并提供时钟同步信息。其典型形式是一段连续的高频载波,持续时间通常在 1ms 至 5ms 之间。部分协议会在导引码后跟随一段特殊的同步模式(如特定比特的交替序列),帮助接收端确定比特边界。值得注意的是,某些 ESL 系统采用了「双导引码」设计,即发送两段不同长度的导引码,这种设计旨在区分上行和下行链路,或者为不同速率的数据段提供独立的同步窗口。
设备地址字段的宽度决定了系统中可寻址标签的数量。常见的地址宽度在 8 位至 24 位之间,具体取决于厂商的市场定位和产品规模。地址编码通常遵循严格的规则,比如前几位固定为厂商标识,后几位为序列号。地址匹配是接收端的第一层过滤,未匹配地址的帧会被直接丢弃,这也是为什么仅凭一个发射器无法同时控制数百个标签的原因 —— 每个标签都必须被单独寻址。
数据载荷的结构则与具体应用场景紧密相关。对于简单的价格更新指令,载荷可能只包含两个字节的 BCD 编码金额和一个字节的货币代码。而对于包含图形显示的电子纸价签,载荷则可能包含完整的位图数据、压缩参数和显示模式配置。在后一种情况下,一个完整的显示更新帧可能长达数百字节,需要分成多个子帧依次发送,每一子帧都有独立的序号和校验信息。
校验和字段是数据完整性的最后保障。简单的实现可能只使用 8 位求和校验或异或校验,而更安全的方案会采用 CRC-8 或 CRC-16 多项式。某些高端系统甚至在载荷层之外还会额外增加一层加密或认证,但这类保护通常只在无线链路(而非红外链路)中启用,个中原因与物理安全边界的设计假设有关。
低成本替代方案:从理论到实践
理解了协议的理论结构,下一步便是将其付诸实现。值得庆幸的是,ESL 逆向工程社区已经贡献了多个开源工具和硬件参考设计,使得入门门槛大幅降低。
在硬件层面,GitHub 上的 PrecIR 项目提供了一个典型的低成本实现方案。该项目使用 STM32 微控制器作为核心,通过定时器输出精确的 PWM 波形来模拟 MHz 级载波。发射电路仅需一颗红外 LED(如 OSRAM 的 SFH 系列)和限流电阻,必要时可增加一级射极跟随器来提升驱动能力。如果只需接收实验,则可使用高速光电二极管(如 BPW34)配合运算放大器搭建 I/V 转换电路,配合示波器或逻辑分析仪捕获原始波形。
在软件层面,社区已实现了多个协议解析工具。Python 脚本 img2dm.py 可将图像转换为 ESL 可识别的显示数据,rawcmd.py 则允许用户直接发送十六进制载荷而无需理解编码细节。这些工具的源代码是理解协议细节的最佳教材 —— 通过追踪从用户输入到最终波形的完整数据流,可以直观地看到每个字段是如何被编码和组包的。
对于希望深入研究的爱好者,以下参数阈值可作为初始参考:载波频率建议从 2MHz 开始探索,典型占空比在 25% 至 50% 之间,比特率通常在 1kbps 至 10kbps 范围内。需要强调的是,不同厂商的 ESL 系统差异巨大,上述参数并非放之四海而皆准的常量,而是需要通过实际捕获波形进行迭代调整的可变值。
实践建议与安全边界
在结束本文之前,必须提醒读者注意几个重要的实践边界。首先,逆向工程行为本身可能触及法律红线,尤其是在未经授权的情况下对商业设备进行协议分析。在开始任何硬件实验之前,应确保拥有对目标设备的合法所有权或明确的授权许可。其次,即使成功实现了协议通信,修改商品价格标签试图获取非法利益也是违法行为 —— 零售系统的价格数据库与标签显示是分离的,任何表面上的价格变更都不会影响结算金额。
从技术演进的角度看,ESL 厂商正在逐步将通信的重心从红外迁移至低功耗蓝牙(BLE)或专有 RF 方案。这一趋势部分源于对更大覆盖范围的需求,部分则是因为 RF 方案在部署便利性上的优势。然而,红外作为近距离、视距通信的固有安全性(在物理层面上难以被窃听)使其在某些场景下仍具不可替代的价值。理解这一技术的物理本质和协议细节,不仅是安全研究的学术兴趣,更是为了在未来的物联网生态中保持对关键基础设施的洞察力。
资料来源:本文技术细节主要参考 PrecIR 项目(https://github.com/furrtek/PrecIR)及相关硬件逆向工程社区讨论。