引言 本文档介绍 BlueNRG-LP、BlueNRG-LPS 2.4 GHz 无线电私有底层驱动程序,它提供对 BlueNRG-LP 和 BlueNRG-LPS设备的访问权限,以便在不使用蓝牙链路层的情况下发送和接收数据包。使用中心数据结构和 API 的应用程序可以控制数据包的不同特征,例如:间隔、通道频率、数据长度等。
注意: 本文内容适用于 BlueNRG-LP 和 BlueNRG-LPS 设备。BlueNRG-LP 设备和平台的任何参考也适用于BlueNRG-LPS 设备和平台。必要时,会着重标明具体的区别
1 BlueNRG-LP 和 BlueNRG-LPS 无线电操作
BlueNRG-LP 和 BlueNRG-LPS 2.4 GHz 无线电底层驱动接口控制 2.4 GHz 无线电。此外,它还与采用慢速32kHz 时钟的唤醒定时器、RAM 存储器,以及处理器相互作用。
RAM 用于存储无线电设置、当前无线电状态、接收到的数据,以及待发送的数据。无线电底层驱动可以管理最多 8 种不同的无线电配置(也称为状态机)。
有几个功能是由无线电自主管理的,无需处理器干预:
• 数据包加密
• 通信定时
• 睡眠管理
随附部分附加功能,与蓝牙低功耗标准(如蓝牙通道利用率)关联性较高。
2 数据包格式
BlueNRG-LP 和 BlueNRG-LPS 中只使用一种数据包格式,如下所示。
图 1. 数据包格式
一个数据包由六个字段组成,其中只有四个是用户可访问的:
• 默认情况下,前导码长度为 1 字节。但是,用户可以通过 RADIO_SetPreambleRep()定义前导码的重复次数。
• NetworkID 是设备的地址,以 4 个字节表示。接收设备只接受这样的数据包:其 NetworkID 字段与自身地址中的 NetworkID 字段相同。NetworkID 应该满足以下规则:
‒ 其中连续的 0 或 1 不超过 6 个
‒ 其 4 个八位字节不都相等
‒ 转换不超过 24 个
‒ 在最有效的 6 位中至少有 2 个转换
用户可以通过 API RADIO_SetTxAttributes()或 API HAL_RADIO_SetNetworkID()访问 NetworkID 字段。
• Header 可以接受任何值,其长度为 1 字节。它可以作为一个字节的数据,但未对该字段进行加密。
• Length 表示数据字段的长度。用户为待发送的数据包设置该值,或者从接收到的数据包中读取该值。
BlueNRG-LP、BlueNRG-LPS 链路层可以接收的最大有效负载字节数(带加密或不带加密)为 255。用户可以通过 API RADIO_SetMaxRecievedLength()在硬件层设置该阈值(从 0 到 255)。
对于 BlueNRG-LP 和 BlueNRG-LPS,长度字段的最大值为 255,但有一些例外。如果启用了加密,则数据字段的最大长度必须减去 4 字节。这 4 字节是为添加到数据包中的 MIC 字段保留的,如图 2. 启用了加密时的数据包格式中所示。启用了加密时的数据包格式。下表包含关于长度字段的概要。
表 1. 长度字段的值(以字节为单位)
为了避免由于接收到的错误长度字段(在数据包中,CRC 校验失败)而导致内存损坏,用户必须为收到的数据包(包括 2 字节的 header 字段,以及 data 字段)保留最大内存
• Data 可以接受任何值,其长度由 length 字段决定。用户定义一个内存缓冲区,以便设置 heade 字段、length 字段,以及 data 据字段,如下所示:
如果启用了加密,则只对 data 字段进行加密。其他字段(包括 header 字段和 length 段)不加密。
• CRC 用于识别损坏的数据包。它的长度为 3 字节,在发送和接收时由无线电分别进行生成和校验。用户可以配置 CRC 计算的初始值,但在广播通道中除外(此处的初始值设置为 0x555555)。CRC 硬件特性可以禁用。这意味着硬件不会在传输时附加 CRC,也不会在接收时校验 CRC。
图 2. 启用了加密时的数据包格式
更多详细内容请点击附件查看
DM00707452_ZH_REV3.pdf
(750.66 KB)
|