Mesh协议栈由许多子系统组成,这些子系统通过一组API模块连接。API模块隐藏了子系统的复杂性。API中提供的功能足以生成功能正常的Mesh设备,因此无需绕过API。
Mesh协议栈的结构基于蓝牙Mesh规范的结构,并遵循相同的命名约定。有关蓝牙Mesh的介绍,请参阅基本蓝牙Mesh概念。
1、概观(Overview)
用于Mesh的nRF5 SDK中Mesh协议栈的基本架构:
(1)模型:蓝牙Mesh模型呈现并实现设备行为。
(2)访问:蓝牙Mesh访问层组织模型和通信。
(3)DSM:设备状态管理器存储地址和加密密钥,以便在模型中使用。
(4)核心:核心蓝牙Mesh负责加密和消息中继。
(5)配置:蓝牙Mesh配置协议用于向网络添加设备。
(6)承载:承载层负责低级无线电操作。
(7)DFU:设备固件升级模块与引导加载程序配合,以通过Mesh启用固件升级。
(8)Mesh协议栈(未图示):用于初始化和启动堆栈的顶级功能。
(9)串行(未图示):Mesh API的应用程序级序列化允许网格由单独的主机设备控制。
2、模型(Models)
模型定义了通过Mesh传输的所有数据的行为和通信格式。Mesh模型相当于蓝牙低功耗的GATT服务,是特定行为或服务的独立,不可变的实现。所有网格通信都通过模型进行,任何通过网格公开其行为的应用程序都必须通过一个或多个模型引导通信。
蓝牙Mesh规范为典型的使用场景定义了一组不可变模型,但供应商也可以自由地实现自己的模型。
您可以在创建新模型中阅读有关如何实现自己模型的更多信息。
3、访问(Access)
API: 访问
访问层控制设备的模型组成。它包含对设备上存在的模型的引用,这些模型接受的消息以及这些模型的配置。当设备接收Mesh消息时,访问层查找消息所针对的模型,并将它们转发给模型实现。
4、设备状态管理器(Device State Manager)
API: 设备状态管理器
设备状态管理器存储网格堆栈使用的加密密钥和地址。当模型通过配置分配应用程序密钥并发布地址时,设备状态管理器会存储原始值,并为引用这些值时要使用的模型提供句柄。
设备状态管理器将其数据存储在持久存储中,可以在启动时恢复。
5、Mesh核心(Mesh Core)
API: 核心
Mesh Core模块由网络和传输层组成,为消息提供特定于Mesh的传输。
传输层通过使用应用程序密钥加密网状数据包并将其分成可以播出的较小片段来提供网络内安全性。传输层重新组装传入的数据包段,并将完整的网状消息呈现给接入层。
网络层使用网络密钥加密每个传输层数据包段,并填充源和目标地址字段。当接收到网状数据包时,网络层对消息进行解密,检查源和目标地址,并确定数据包是否用于此设备以及网络层是否应该中继它。
Mesh Core通过双层加密,重放保护和包头混淆提供对网状网络的恶意行为和攻击的保护。
6、配置(Provisioning)
API: 配置
供应是将设备添加到网状网络的行为。供应模块通过实施供应者角色(网络所有者)和供应商角色(要添加的设备)来处理此过程的两个方面。
要参与网状通信,必须配置每个设备。通过供应过程,新设备接收一系列地址,网络密钥和设备密钥。有关如何使用配置的详细指南,请参阅网状配置。
网状网络栈提供了两种配置设备的方法:直接通过PB-ADV配置承载,或通过远程配置。PB-ADV配置只能在配置器和配置器之间进行,它们在彼此的无线电范围内,而远程配置实现两个网状模型,它们一起创建通过网格的隧道,允许配置器从远处添加设备, PB-ADV代理设备的帮助。
重要提示:远程配置是Nordic专有功能,不能与其他供应商的设备一起使用。
远程配置客户端和服务器示例演示远程配置。的光开关例如示出PB-ADV的供应者和provisionee侧作为第一个步骤,以建立网络。
7、承载(Bearer)
承载是低级无线电控制器,为无线电数据包发送和接收上层提供异步接口。它对数据包格式和时序强制实施蓝牙低能耗,并通过SoftDevice时隙API直接在无线硬件上运行。
承载是一个内部模块,通常不需要应用程序访问。
8、DFU
API: DFU
设备固件升级模块通过与引导加载程序协作,在网格上提供固件更新功能。它能够将并发的,经过身份验证的固件传输到网络中的所有设备,而无需停止应用程序。
请注意,DFU过程与nRF5 SDK中使用的蓝牙低能耗安全DFU过程不兼容。
重要提示:网状DFU是Nordic专有功能,不能与其他供应商的设备一起使用。
有关DFU过程的更多信息,请参阅DFU快速入门指南。
9、Mesh协议栈(Mesh Stack)
API: Mesh Stack
网格堆栈模块是顶层网格模块周围的薄包装,可以轻松开始使用网格。它负责网格初始化和启用。它还包含用于存储和擦除配置和状态相关数据的功能。
10、串行
API: 串行
串行模块提供网状API的完整序列化,允许其他设备通过UART接口控制nRF5网状设备。针对网络网关和类似的复杂应用,串行接口提供了一种通过Nordic设备访问网格的方法,而不是将其作为单元的主控制器。
网状串行接口基于nRF8001 ACI串行接口,并可选择支持SLIP编码操作。串行协议可以作为独立应用程序(参见序列示例)运行,也可以与普通网格应用程序一起运行。
可以在串行文档中找到串行数据包格式,命令和事件的概述。