Ble Mesh技术(四)之Access Layer

本文深入探讨了蓝牙Mesh网络中的AccessLayer如何处理Model层下发的数据,包括Payload的封装与解析,消息的下发与上报机制,DeviceKey的使用,以及Acknowledged与Unacknowledged消息的区别。介绍了Mesh网络中消息传递的关键细节。

Access Layer将Model下发的消息转化成Mesh协议栈规定的格式,并将下层的数据上传至指定的Model。

1.Payload

前面讲到Model下发的数据包含3个信息,分别是Model ID/Opcode/Payload,因为Opcode包含Model ID,所以从Model层下来的有效信息只有Opcode和Payload。
access payload
一条Access消息的最大长度是384字节,每一条消息经过Upper Transport Layer加密后会生成4/8字节的TransMIC,未分段消息会生成4字节TransMIC,分段消息生成4/8字节TransMIC,由用户选择。因此Access未分段消息的最大长度是11字节,分段消息的最大长度是380或者376字节,至于为什么是这样的大小,在Lower Transport Layer会详细介绍。

2.消息的下发与上报

之前提到Model是依附在Element上的,每个Element都有一个由配网者分配的唯一的单播地址(Unicast Address),且每个Model都绑定着至少一个Appkey,设置了Publish/Subscribe Address。所谓的注册就是将这些信息都关联并存储起来。

2.1. 消息下发

Access Layer收到Model下发下来的消息,会根据下发来的Model ID找到对应的存储信息,在源地址(SRC)字段填上该Model对应的Element的单播地址,在目的

### BLE Mesh 协议报文结构 BLE Mesh 报文结构基于蓝牙技术联盟 (Bluetooth SIG) 发布的标准,遵循特定层次化设计原则[^1]。具体来说,BLE Mesh 报文中包含了多个重要字段来确保消息的有效传输。 #### 控制层与网络层之间的交互 在网络层部分,每条消息都由以下几个主要组件构成: - **Network PDU**: 这是整个数据单元的基础框架,在此之上构建其他更具体的PDU类型。 ```plaintext | Network Header | Transport PDUs | ``` - **Transport Layer Security (TLS)**: 提供安全性隐私保护机制,通过加密方式处理上层应用产生的有效载荷。 #### 应用程序层面的消息封装 当涉及到应用程序级别的通信时,则会进一步细分为两个子层——下述内容描述了如何在一个完整的BLE Mesh消息中表示这些信息: - **Upper transport layer PDU** - Access Message: 包含实际的应用数据以及源节点地址等元数据。 ```plaintext | Upper Transport Header | Access Payload | ``` - **Lower transport layer PDU** - Control Messages: 用于维护网络状态的信息交换;例如心跳检测、配置更新等操作。 ```plaintext | Lower Transport Header | Control Opcode | Parameters...| ``` #### 完整的BLE Mesh消息格式示例 一个典型的BLE Mesh消息可能如下所示: ```plaintext | Network Header | Upper/Lower Transport Headers | Application Data or Control Information | ``` 其中各个组成部分的具体定义取决于所使用的协议版本及其扩展特性。对于开发者而言,理解这一系列嵌套式的分层模型有助于更好地掌握BLE Mesh的工作原理并实现高效可靠的无线通讯解决方案[^2]。 为了展示BLE Mesh的实际编程实践,下面给出一段Python伪代码片段,该代码模拟了一个简单的BLE Mesh消息发送过程: ```python import bluetooth_mesh as bt_mesh def send_ble_mesh_message(source_address, destination_address, payload): network_header = create_network_header() upper_transport_header = create_upper_transport_header(source_address) lower_transport_header = create_lower_transport_header(destination_address) complete_message = ( network_header + upper_transport_header + lower_transport_header + payload ) # 使用蓝牙库发送构造好的消息 ble_device.send(complete_message) send_ble_mesh_message(0x1A2B, 0xCDEF, b'HelloWorld') ``` 上述例子展示了如何组合不同头部信息形成一条有效的BLE Mesh消息,并将其传递给目标设备。需要注意的是,这里仅提供了一种简化版的消息组装方法,实际情况可能会更加复杂,涉及更多细节上的考量[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值