作者:Bill Giovino
物联网 (IoT) 和工业物联网 (IIoT) 节点正逐渐应用于安全性越来越高的系统中。在这些系统中,整个网络的安全保障比网络上单个设备的功能更为重要。这意味着,如果一个物联网节点发现自身遭到入侵,或者将会发生不可恢复的固件错误,则最安全的措施可能是该节点在可行的情况下尽快关闭电源,以避免节点和网络可能出现危险后果。
然而,一旦节点断电,所有易失性存储器的内容都将丢失。若将调试数据存储在 EEPROM 或闪存等非易失性存储器中,则会耗时耗电,增加潜在损坏的风险。此外,如果上电序列也遭到入侵,则系统遭到入侵的程度可能已经达到上电时回读数据无法再提供可信数据。
本文介绍了如何将电子纸显示屏 (EPD) 轻松连接至物联网或工业物联网节点,以显示最后的已知错误,从而提供断电事件原因的可视化指示,以便技术人员采取适当的措施。然后,本文以 Pervasive Displays 和 Display Visions 的电子纸显示屏为例,讨论了如何能将这些显示屏与微控制器连接,并配置为在极少耗电或不耗电的情况下提供诊断信息。
高安全性物联网和工业物联网节点
物联网和工业物联网节点设计人员的责任越来越大,需要采用越来越复杂的安全方法,保证主机微控制器的正常运行。一般来说,必须防范三种安全威胁:
· 微控制器固件故障
· 来自传感器、键盘、串行外设或其他设备的无效输入数据
· 恶意攻击者的行为
微控制器固件故障可能由多种原因引起:安装的固件中编码错误;导致故障的无效计算;或者,在极其罕见的情况下,微控制器的硬件故障。通常,编写良好的固件可通过清理对子例程和函数的输入来检测故障。在固件被锁定或陷入循环的极端情况下,看门狗超时将通过跳转至错误控制子例程或执行微控制器硬复位来恢复固件。
在输入数据无效的情况下,如外部传感器发生故障或被篡改,可能会导致超限数据,且这些数据可能未在应用程序代码中给予适当考虑。例如,如果在一个有人的控制室中,环境温度传感器错误地记录了 250°F 的高温,这可能是传感器故障或遭到恶意篡改。粗心的固件程序员可能没有对如此高的温度读数编码,这可能导致诸如不正确的数据记录之类的小事,或诸如允许入侵者进入安全区域之类的严重事故,也可能导致会造成设备故障或严重人身伤害的关键性控制算法计算错误。潜在的负面结果很多。
恶意攻击者的不同之处在于,他们可能有意造成物联网节点故障。黑客攻击尝试造成的故障可能会被安全例程检测为入侵;但是,也可能伪装成固件故障或无效的外部输入数据。在示例中,250°F 的环境温度读数可能是由于恶意攻击者在如此高的读数下测试固件行为,意图测试入侵方法;例如,如果 250°F 的环境温度读数被错误地评估为火灾,门可能会自动解锁。
对固件故障作出反应
无论错误来源是什么,在高安全性物联网和工业物联网节点中,微控制器固件都不能容许出错。任何及所有故障均必须进行编码并加以捕获。子例程和函数的输入必须进行清理,所有传感器输入数据必须进行验证。看门狗定时器必须进行编程,以根据已知的运行时间检测耗时过长的锁定或循环代码。
当在高安全性物联网或工业物联网节点中检测到固件故障时,无论该故障是意外的还是故意的,固件都必须尽快捕获该事件。常见的操作包括尝试对故障进行补偿。对于始终超出范围的故障传感器,固件可能会对该传感器设置“跛行模式”,以补偿不良数据,直至可以更换传感器。若固件例程返回错误结果,则可能会重新进行初始化。通常,在网络上发送错误代码,以将问题通知网络主机。
不过,在一些高安全性物联网或工业物联网节点中,存在一类特殊的故障,对于这些故障不能或不应进行补偿或采取对策。这可能包括物理篡改检测、内部校验和失败、一些内置自检 (BIST) 失败,以及任何可能由受损的固件或黑客入侵系统引起的故障。对于这些高安全性的情况,唯一的选择可能是立即安全地关闭节点的电源。当节点未能响应网络请求时,网络主机将确定节点已断电。如果节点在未向主机发送错误报告的情况下断电,并且如果节点忽略重新启动的网络命令,则表示发生了致命故障,必须派遣技术人员对节点进行物理检查以查明原因。
然而,一旦节点断电,所有易失性存储器和状态数据将立即擦除。这使得就算有可能诊断关机原因,也会非常困难。或者,在关闭节点电源之前,可以将诊断数据存储至非易失性存储器,例如 EEPROM 或闪存。而问题是写入这些类型的内存需要时间,在此期间节点必须保持活动状态,可能导致额外的损坏。
用电子纸诊断致命错误
EPD 耗电极少,可用于在节点即将断电前存储并显示错误和诊断信息。节点断电后,EPD 可在没有任何电源的情况下维持其显示图像达数天或数星期之久。通过显示屏上的信息,技术人员可以直观地了解关断的原因,从而确定是否可以安全地给物联网节点上电,或者是否应将其从网络中取出以进行详细分析。
Pervasive Displays 的 E2271CS091 EPD 模块就是一个适用于显示诊断信息的 EPD 示例。该模块可通过 SPI 串行接口连接至任何兼容微控制器,并且带有一块 2.71 英寸 (in.) 高对比度显示屏(图 1)。
图 1:E2271CS091 EPD 模块具有 2.71 英寸的高对比度显示屏,分辨率为 264 x 176 像素。该模块具有宽视角,可通过 SPI 接口连接至任何兼容微控制器。(图片来源:Pervasive Displays)
E2271CS091 EPD 模块使用有源矩阵薄膜晶体管 (TFT) 显示屏,原生分辨率为 264 x 176 像素,每英寸 117 个像素点 (dpi)。这允许显示屏包含大量信息,以协助技术人员进行诊断。防眩光屏幕具有近 180˚ 的宽视角,方便在不寻常的安装位置轻松查看显示内容。该 EPD 需要 3.0 V 的电源。
主机微控制器通过显示屏的 24 针带状连接器上的 SPI 接口向 EPD 发送数据。这种 SPI 数据通信仅仅是单向的,即从主机微控制器到 EPD。若要从 EPD 传送回主机微控制器,唯一通信方式是带状连接器上的“设备忙”引脚,这大大简化了接口,并提高了所显示诊断数据的可信度。
如果检测到错误或黑客攻击,并且错误严重到需要关闭节点,则必须首先通过固件、看门狗或其他方法捕获错误。然后,必须将控制权移交给向 EPD 发送数据的错误日志记录例程。该错误日志记录例程应该是最高优先级的任务,以防止数据中断或损坏。为了实现最大的可靠性,建议该错误日志记录例程应为完全自足式,不调用外部子例程或函数。理想情况下,错误日志记录例程应位于永久写保护闪存中,以确保代码的完整性,即使是在固件更新之后。
在用错误数据更新 EPD 之前,主机微控制器应先通过 SPI 接口向 EPD 发送软复位命令,以清除显示内容。然后,它以一系列字节序列发送黑白显示信息,字节中的每一位都代表 EPD 上的像素。序列完成后,错误日志记录例程即可关闭微控制器。不同制造商的微控制器有不同的关闭方式,因为这取决于架构和制造商。在某些情况下,出于安全考虑,制造商可能会有未说明的微控制器关闭方式,只能应请求提供。或者,可以使用外部电路来中断微控制器的电源;但是,这会增加系统的复杂性,从而导致可靠性降低。因此,微控制器的固件关断控制是最佳选择。
为了帮助使用 EPD 进行开发,Pervasive Displays 提供了 B3000MS034 EPD 扩展套件(图 2)。该套件有一个扩展板,带有一个用于该 24 针 EPD 显示屏的连接器,并且还有一些连接器可用于其他需要 40 针和 26 针连接器的 Pervasive Displays EPD。该扩展板兼容 Texas Instruments 的 LaunchPad 开发和评估工具套件,但也可以与其他开发工具套件搭配使用。20 针桥接电缆可以连接到 20 针 90˚ 针座连接器,而当焊接到扩展板时,可在开发期间监测发送至 EPD 的控制信号。
图 2:Pervasive Displays 的 E2271CS091 EPD 模块扩展套件在扩展板上包含一个 24 针连接器,用于连接显示屏的 24 针带状电缆。套件中还包括一根桥接电缆和一个 90˚ 20 针排针连接器。(图片来源:Pervasive Displays)
另一个 EPD 选择是 Display Visions 的 EA EPA20-A(图 3)。
图 3:Display Visions 的 EA EPA20-A EPD 是一款 172 x 72 的显示屏,可以在无电源连接的情况下保持显示屏状态。(图片来源:Display Visions)
该 EPD 带有一块 172 x 72 灰阶显示屏,并且同样使用 SPI 接口与主机微控制器通信。该 EPD 的功耗极低,需要一个 3.3 V 单电源,并且在显示内容变换期间仅消耗 40 毫瓦 (mW) 的功率。Display Visions 的 EA EPA20-A EPD 也可以不加电而保持显示内容。
结语
高安全性物联网和工业物联网节点有时必须关闭电源,以应对致命的固件错误或检测到的威胁。这可能导致丢失所有易失性数据,包括主机微控制器的内部状态。但是,状态和诊断数据可以在关断前发送至连接的 EPD,并显示数天或数周时间。这样便可为技术人员提供所需的信息,让他们能够确定关断的原因并在必要时采取未来的预防措施,以保护和确保节点及网络的安全。