文档
»文档»技术文件»MCU内存管理

Lorawan®网络传感器的MCU内存安全性和系统分配注意事项

为Lorawan®网络设计的传感器最关键的方面之一是为MCU内存管理,安全性和分配提供了深思熟虑的计划。

Semtech提供申请注释MCU对Lorawan的要求(AN1200.28 Rev 3;可从SX1262网页)提供有关MCU功能和内存大小的高级建议,以支持Lorawan堆栈实现。表1摘自申请注,显示了这些建议。

表1:SX127X的模块MCU要求

范围 最小设置 推荐设置
MCU RAM 8 kb
MCU闪光灯 128 kb
AES 128位 软件中的AES解密
连接到MCU IRQ输入的无线电DIO dio0,dio1,dio2
SPI(四根电线:SCK,MOSI,MISO,NSSS) 强制的
RTC(32.768 kHz XTAL) 推荐
准确的计时
B级节点和Fuota的强制性

IEEE 65位扩展唯一标识符

EUI-64(OUI:24或30位; SN:40或34位)

强制的

其他考虑因素

AN1200.28中的信息为帮助工程师的范围MCU要求提供了一个起点。但是,该应用程序并不能洞悉MCU固件,内存分配和实现最佳实践的更细微的方面,这一系列文章将解决。它也不涉及保护劳拉万参数和钥匙所需的特定技术,这对于维护维护至关重要的技术Lorawan网络的安全完整性。传感器功能(电池寿命,安全性,可配置性和升级性)的许多关键方面植根于设计师对MCU内存架构和固件实现的早期决策。安全功能的内存体系结构和范围可能会在MCUS之间发生巨大变化。即使在STM32或Sam Arm Mcus的家族中,记忆也存在很大差异和安全功能。因此,请仔细选择您的MCU。

除了运行Lorawan堆栈的最低MCU内存要求之外,设计人员还必须考虑运行实际传感器应用程序的MCU的内存要求,包括本地数据算法,本地数据记录,现场 - 添加配置参数,诸如本地数据算法之类的内容,固件更新无线(Fuota),用户界面,实时操作系统(RTOS),其他通信堆栈和安全密钥。在开始新的传感器设计并选择MCU之前,设计师应完全遵守所有这些要求。

单人还是双MCU?

客户必须做出的第一个决定之一是使用运行Lorawan堆栈和传感器应用程序的单个MCU实现传感器设计,还是在两个MCUS上划分系统功能。在双重设计中,一个MCU通常运行传感器应用程序和总体控制代码,让我们称之为主持人MCU。第二个MCU,我们称之为调制解调器MCU致力于运行Lorawan堆栈,物理层接口和一层应用程序代码管理Lorawan网络连接的状态。主机MCU通过在主机MCU和调制解调器MCU之间的串行连接上运行的简单命令接口发送并从网络接收数据。可以找到Lorawan模块上使用的调制解调器接口的示例来自穆拉塔

在决定选择单一或双MCU方法时,设计师需要考虑许多权衡。

表2:MCU设计注意事项

伟大(++)良好(+)足够( - )

单个MCU传感器

双MCU方法
主机和调制解调器

评论

成本

++

+

单个MCU方法可能具有略有成本优势,但是,最低的材料账单(BOM)成本并不是大多数传感器设计的唯一决策标准。需要考虑非重新进行的工程成本,设计重用和可扩展性。

物理尺寸 /板空间

++

+

双MCU方法需要主机MCU和相关支持电路的额外空间。但是,可以通过使用单个ChipLora®SOC来弥补这一点。

能量消耗

++

++

所需任务的主动处理时间/周期相同。由于宿主和MCU RAM保留率,双重MCU方法的“睡眠模式”功耗略有增加,但这是按照MAS的顺序。在某些情况下,更有效的任务分配可能会降低双MCU设计的总体功耗。

主持人MCU外围灵活性

-

++

无限的主机MCU选项。不受Lorawan最低要求或运行时间开销的约束。

主机MCU内存灵活性

-

++

无限的主机MCU选项。仅针对Lorawan通信任务优化了MCU内存。

主持人MCU CPU性能灵活性。

-

++

无限的主机MCU选项。即使是非臂CPU也很容易集成,因为无需将Lorawan堆栈移植到主机MCU,只有薄命令接口。对于使用MCHP,AVR或MSP MCUS的旧传感器升级有用。

传感器内存安全性

+

++

在调制解调器MCU或SOC中,可以保护洛万键,甚至可以保护,甚至预先证实。在这里,主机MCU不需要特殊的安全内存功能。如果使用了单个MCU方法,则设计师必须确保MCU具有保护Lorawan安全键的内存功能。

软件集成工作和开发时间。

-

++

设计人员可以专注于在专用主机MCU中运行的传感器应用程序,并将Lorawan通信与调制解调器MCU卸载。无需花费时间在单个MCU上优化实时或低功率模式,以满足传感器应用程序和Lorawan需求。无需使用计时器和时钟等MCU资源。

Lorawan网络测试和资格

+

++

尽管这两种设计都以相同的Lorawan参考堆栈和源代码开头,但对于每个传感器设计,单个MCU方法都需要重新资格。这是验证传感器应用程序和洛万堆栈的相互作用的唯一方法。可以在专用的调制解调器MCU或SOC中运行Lorawan堆栈一次,并且可以在具有各种主机应用程序的多个传感器设计上重复使用调制解调器方面。

在将来的文章中,我们将提供一些通过单个MCU方法和双重(主机 +调制解调器)MCU方法实现的传感器的特定示例。

不管设计师选择哪种MCU分区路径,都必须解决以下内存管理主题。

Lorawan EUI钥匙存储和内存分配

除了在挥发性和非易失性内存中典型的MCU固件放置外,对于使用Lorawan网络的应用程序,还需要特别关注Lorawan标识符,安全密钥,EUIS和会话参数的应用。

Lorawan 1.0.x要求下表3中指定的唯一标识符和安全性EUI。此外,必须由MCU管理特定于会话的Lorawan参数,以维持安全性,并允许在传感器循环的情况下维护Lorawan会话状态。

Lorawan规范建议在终点的整个电源循环中保持会话状态。无法维护已激活的设备的会话状态(奥塔)表示将需要在设备的每个电源循环上执行激活过程。与Lorawan网络连接的传感器(端点)通过不必要的重新连接过程可能会对设备的电池寿命和整体网络性能产生负面影响。

表3:Lorawan规范1.0.x唯一ID和安全EUI要求

Lorawan参数 大小为字节 受保护(安全)内存 还需要恢复会话上下文
joineui/appeui 8
Deveui 8
Devaddr 4
Netid 3
Appkey 16 是的*
nwkskey 16 是的* 是的
appskey 16 是的* 是的
fcntup 4 是的* 是的
fcntdwn 4 是的* 是的
Devnonce 2 是的*
全部的: 〜80字节

*应以防止恶意演员提取和重复使用的方式存储

至少需要80个字节的内存来存储基本的Lorawan EUIS和密钥。

Lorawan 1.1添加了其他参数,以实现新的功能和增强的安全性。

Lorawan 1.1.x需要以下唯一标识符和安全EUI:

表4:Lorawan规范1.1.x唯一ID和安全EUI要求

EUI 大小为字节 受保护(安全)内存 还需要恢复会话上下文
大约 8
Deveui 8
Devaddr 4
Netid 3 是的*
Appkey 16 是的*
nwkkey 16 是的*
nwksenckey 16 是的* 是的
nwksintkey 16 是的* 是的
snwksintkey 16 是的* 是的
fnwksintkey 16 是的* 是的
appskey 16 是的* 是的
fcntup 4 是的* 是的
afcntdown 4 是的* 是的
nfcntdown 4 是的* 是的
加入 3 是的*
Devnonce 2 是的*
全部的: 〜150字节

*应以防止恶意演员提取和重复使用的方式存储。

因此,对于当前的设计,可能建议将〜150个字节的内存分配为150个字节,可能建议使用。

可能需要其他内存来完全保存会话上下文。可以在loramac节点参考代码中找到一个示例实现,可在github。看NVMCTXMGMT.C

总而言之,设计师应制定一个计划,以在四个状态下安全地处理所需的Lorawan参数:

  1. 在传感器的非易失性存储器中,将静态Lorawan参数的安全放置放置并确保MCU“引导”过程
    例如,确保Lorawan Appkey存储在MCU闪光灯或EEPROM的正确部分中,该部分至少提供了读出保护。这将有助于确保没有人可以破解MCU引导程序并访问键或在设备上加载可使用键的恶意固件。
    1. 对于使用Lora Edge™LR1110或其他类型的外部硬件安全元件的设备,可以在硅中预先处理根键和/或在初始电源时动态生成。这消除了MCU在制造时将EUI和安全密钥存储在设备固件中的需求。反过来,这有助于保持完整性,并大大简化制造供应链。但是,即使在这种情况下,运行Lorawan堆栈的MCU也必须安全地管理初始化后需要安全状态保留的Lorawan参数。
  1. 运行时内存安全性
    传统上,MCU的运行时间安全功能有限。但是,增强的安全MCU正在上市。详细详细介绍所有潜在的安全功能,这超出了本文的范围,但是现在有些MCU提供了内部防火墙,防篡改功能,甚至提供完整的Trustzone功能。
    1. 使用双MCU方法的一个优点是,调制解调器MCU的内存可以锁定并将其视为黑匣子。传感器应用程序在主机MCU的内存中完全运行。在物理上不同的MCU提供了许多与完整信任区相同的好处,而没有固件开发的复杂性。
  1. 会话保留记忆安全
    用于洛但网络的电池供电传感器可广泛使用超低功率的退休睡眠模式。在大多数情况下,程序员不必实施特定的代码来管理洛万参数,因为MCU通过活动和睡眠模式循环。但是,如果MCU的功率被循环,或者“重置”事件会迫使MCU的完整重新启动,则除非程序员已明确保存这些会话值以确保非挥发性内存,否则许多特定于会话的参数将丢失。为了使设备能够继续在Lorawan网络上发送数据而无需重新连接,程序员应保存特定于会话的值以保护非挥发性内存并在启动时实现状态计算机,以确定设备是否可以继续以前的网络会话或是否需要启动新的洛杉矶加入请求。
  1. 在固件或参数更新会话中
    绝大多数产品必须支持固件或至少参数更新。通常,需要支持多种类型的更新:
  1. 参数更新:
    1. 仅更新特定参数或个性化传感器功能的参数。这些可能包括针对不同传感器功能的多个参数集,每个参数集具有不同的安全性。例如,设备的Lorawan参数和独立的“传感器”参数集。大多数传感器设计都需要支持参数更新。
  1. 传感器应用程序固件更新:
    1. 仅更新运行传感器功能的应用程序固件,而无需更改或重置静态或特定于会话特定的洛杉矶参数。
  1. 完整的Lorawan堆栈固件更新:
    1. 更新整个Lorawan堆栈固件。Lorawan网络运营商致力于最大程度地减少在端点上执行Lorawan堆栈的完整更新的需求。为此,在1.0.x版本中具有广泛的兼容性。但是,Lorawan规范正在随着相应的新堆栈修订而发展。许多用于Lorawan网络的传感器都是设计的,没有规定更新完整的Lorawan堆栈。但是,将来可能需要一些终点支持向洛万1.1.x的迁移。

本质上,MCUS不提供动态链接或其他抽象的内存管理功能。因此,程序员必须注意将逻辑上的代码段分为自定义的部分,并且必须主动管理这些部分的内存放置到特定于所使用的MCU的适当内存位置。通常,将Lorawan参数存储在特定定义的逻辑/物理内存位置(S)与主要应用程序图像分开是有益的。

双MCU系统的另一个优点是,调制解调器MCU和主机MCU使用在单独的MCUS上运行的完全不同的固件图像。在许多情况下,传感器应用程序将需要比调制解调器MCU更频繁的固件更新。具有双MCU架构可以使传感器在更新主机MCU的固件的过程中通过调制解调器MCU保持连接。同样,由于洛旺参数存储在调制解调器MCU中,因此在固件或参数更新到主机MCU期间保持安全性的复杂性较小。

攻击引导加载和与内存相关的MCU功能是恶意参与者最常见的利用之一,用于损害任何传感器设备及其网络的安全性。传感器安全性从适当的MCU内存分配计划开始。

常见的MCU内存体系结构注意事项

典型的MCU芯片闪存是基于块,扇形或银行的。这意味着在不首先擦除整个块或扇区的情况下,可能无法更新(重写)存储在特定闪存地址的单个值。尽管MCU提供了处理此类更新的例程,但通常,必须将来自块或扇区的所有数据复制到RAM中。然后删除整个块,然后所有先前的数据(加上新的或更新的数据)都写回。此外,在此闪存擦除/重写过程中,MCU无法从同一闪存库中的任何内存地址中执行程序代码。这些Flash R/W操作具有重要的功能,并可能暴露出安全漏洞。

许多现代MCU都包括特殊的内部EEPROM,小型信息闪光灯块和双银行闪光灯,以帮助客户避免这些问题。

MCU在不同的内部内存块/扇区上也可能具有不同的安全保护功能。在大多数情况下,程序员需要主动配置每个内存扇区的安全属性,而不仅仅是假设默认配置满足其要求。

总之,设计师应注意分析其特定的MCU内存体系结构,并确定性地计划其传感器固件的关键方面如何链接到设备的不同操作状态(初始启动,运行时间,会话保留,,以及固件/参数更新期间)。这可能需要在固件开发集成开发环境(IDE)中自定义用户定义的内存部分,并专门将这些部分链接到特定的MCU内存区域。

一般建议:

  1. 必须将Lorawan EUI,键和会话参数放置在具有推荐安全功能的传感器内存位置中。
    • 确保MCU应用程序固件启用您打算用于每个内存扇区的内存保护功能。
    • 考虑分配额外的安全内存以适应未来的升级(例如Lorawan 1.1升级)。
    • 考虑将Lorawan EUI值放置在“ EEPROM”或信息闪存扇区之类的特殊内存部分中,这些扇区允许轻松的R/W更新,而R/W更新不会影响主机中的程序执行。确保这些部分具有适当的安全属性。
    • 能够更新配置参数,应用程序固件图像以及(在某些情况下)独立使用Lorawan堆栈。
  1. 对于大多数需要支持固件更新的设备,将需要某种类型的引导加载程序。
    • 确保Lorawan网络的传感器设计完整性的首要任务是确保MCU引导过程。
    • 理想情况下,选择具有双银行闪存架构的MCU,该MCU允许您在擦除和重新编写另一个银行时从一家银行运行。确保每个银行的尺寸大于固件图像。在完整的Fuota系统中,每个银行都需要保留整个主要应用程序图像。
      • 请注意,这些图像中的每一个都可能需要链接到MCU中不同的绝对内存地址。请考虑:如果您有一个两岸MCU闪光灯体系结构,该架构的始于0x08000000,而Bank Two从0x080FFFF开始,则您的主要固件应用程序将为您通过Fuota推出的每个固件修订的启动地址切换启动地址。
    • 电源以在MCU上运行的主要引导加载程序将询问主要和辅助应用程序图像,以确定要执行哪个图像。它还应验证每个应用程序图像的真实性和完整性。请参阅MCU供应商有关其支持的方法创建“签名”固件图像的文档。
  1. 对于生产设备,请确保禁用允许内存访问的MCU调试模式和端口。密切审查并实施您的MCU制造商的建议。

Semtech的最新产品和软件版本提供了模块化的构建块,以支持所有类型的传感器设计和MCU分区。

Baidu
map