如何快速而经济高效地将蓝牙 5.3 添加至边缘物联网设计
投稿人:DigiKey 欧洲编辑
2023-11-29
激烈的竞争给物联网 (IoT) 设备开发商带来了压力,他们必须迅速推出新的创新产品,同时还要降低成本,确保稳定、低功耗、安全的通信。传统的智能物联网终端节点包括用于边缘处理的微控制器单元 (MCU) 和用于连接的无线集成电路。如果设计团队缺乏开发有效解决方案必需的射频 (RF) 技能,就会出现问题。
为了按时完成和认证无线物联网设计,并将其投入量产,开发人员必须提高开发过程的效率。提高开发过程效率的一种方法是使用配备集成低功耗蓝牙 (BLE) 无线接口的低功耗 MCU。
本文介绍了来自 STMicroelectronics 的超低功耗 STM32WBA52 MCU 系列,并展示了开发人员如何使用 BLE 评估板、开发工具和应用示例,快速完成和运行 BLE 5.3 无线设计。此外,本文还简要介绍了编程和 MCU 布线。
高安全级别的节能无线 MCU
STM32WBA52 MCU 系列已通过 BLE 5.3 认证,这是一种经济高效的解决方案,可帮助新手开发人员快速为设备添加无线通信功能。这些微控制器基于时钟频率为 100 MHz 的 Arm® Cortex®-M33 内核和 TrustZone 技术,具有高安全·,可保护数据和知识产权 (IP),防止黑客攻击和设备克隆。
STM32WBA52CEU6 无线 MCU 搭载 512 KB 闪存和 96 KB 静态 RAM (SRAM),STM32WBA52CGU6 型号则搭载 1 MB 闪存和 128 KB SRAM。图 1 显示了 48 UFQFN 封装中集成电路的功能范围。此外,多达 20 个电容式触摸通道可支持密封设备的操作(无需机械按键)。
图 1:STM32WBA52 的功能框图显示了集成 BLE 5.3 无线电、闪存和 SRAM 以及安全支持。(图片来源:STMicroelectronics)
丰富的 STM32Cube 生态系统可以支持 BLE 应用的实现和编程。该生态系统包括 STM32CubeIDE 开发环境以及各种工具,例如 STM32CubeMX 外设配置器和代码生成器、STM32CubeMonitorRF 性能测试器,以及用于人工智能 (AI) 的 STM32Cube.AI 桌面版本和云版本。匹配的评估板 NUCLEO-WBA52CG 可简化原型设计,并提供大量 BLE 实例应用程序和免费源代码,以加速验证。
设备和数据安全
STM32WBA52 产品系列达到了物联网安全标准平台安全架构 (PSA) 认证等级 3 和物联网平台安全评估标准保证等级 3 (SESIP3)。基于安全隔离、内存保护、篡改保护的 PSA 安全认证计划,以及采用 Arm TrustZone 架构的 MCU Cortex-M33,都可以增强网络保护。适用于 Arm Cortex-M 的可信固件 (TF-M) 符合行业标准 PSA 认证安全框架,具有 PSA 不可变信任根 (RoT),包括安全启动和安全固件更新 (X-CUBE-SBSFU)、加密、安全存储和运行时验证。
集成无线电最大限度地降低物料成本
集成的超低功耗无线电模块可提供 +10 dBm(分贝数基准为 1 mW)的射频输出功率。该模块可实现短距离 (BLE 5.3) 和长距离 (Long Range) 可靠通信,数据传输速率高达 2 Mbps。在进行无线电通信时,深度待机低功耗模式可以降低总耗电量。STM32WBA MCU 可同时支持最多 20 个连接。
该无线电模块的电气性能特征:
- 支持 BLE 5.3 的 2.4 GHz 射频收发器
- 接收灵敏度:-96 dBm (1 Mbps BLE)
- 可编程输出功率,最高 +10 dBm,步长为 1 dB
- 集成平衡不平衡转换器
由于高效的能源管理,电池体积更小
STM32WBA52 MCU 采用多项节能技术,包括 STMicroelectronics 的低功耗直接内存访问 (LPDMA),以及具有快速唤醒时间的灵活省电状态。这些特性组合在一起,可将 MCU 功耗降低多达 90%,从而显著缩小电池体积或延长电池续航时间。
FlexPowerControl 的电气性能特性:
- 1.71 至 3.6 V 电源
- 140 nA 待机模式(16 个唤醒引脚)
- 200 nA 待机模式,实时时钟 (RTC) 运行
- 2.4 μA 待机模式,64 KB SRAM
- 16.3 μA 停止模式,64 KB SRAM
- 45 μA/MHz 运行模式,电压 3.3 V
- 无线电:Rx 7.4 mA/Tx,0 dBm,10.6 mA
此外,蓝牙 5.3 在低占空比和高占空比之间的切换速度更快,因而比先前版本的能效更高。
蓝牙堆栈架构和数据包
STM32WBA52 中的单核 Arm Cortex-M33 MCU 专门用于应用固件开发,包括 BLE 堆栈(控制器和主机)上的配置文件和服务。MCU 处理从最低物理层 (PHY) 上的集成射频模块到通用属性配置文件 (GATT) 和通用访问配置文件 (GAP) 的数据流(图 2)。GAP 定义和管理广播和连接,GATT 则定义和管理进出数据交换。
图 2:MCU 处理从无线电 PHY 到 GATT 和 GAP 的数据流。(图片来源:STMicroelectronics)
BLE 发送的数据包被定义为一个位序列的固定帧结构。用户数据区的长度在 27 到 251 个字节之间动态变化。
BLE 应用实例
在线百科全书 STMicro-Wiki 中有关 STM32WBA MCU 的部分包含多个不同蓝牙角色的应用实例,包括:
- 广播:BLE_Beacon
- 传感器:BLE_HealthThermometer、BLE_HeartRate
- 网桥:BLE_SerialCom
- 路由器:BLE_p2pRouter
- 数据:BLE_DataThroughput、BLE_p2pServer 和 Multi Slave BLE_p2pClient
- 射频监控器:BLE_TransparentMode
- 固件空中升级:BLE_Fuota
设备设计人员和程序员可根据自己的 BLE 项目,将相应 GitHub 项目目录中已编译的二进制文件烧录到 NUCLEO 开发板上,然后启动与智能手机或台式电脑的蓝牙连接。必需的编程器软件 STM32CubeProg 让用户能够通过调试接口和引导程序接口,对设备内存进行读取、写入和验证。
运行 BLE 实例“健康温度计传感器”
健康温度计规范 (HTP) 是蓝牙技术联盟 (SIG) 制定的基于 GAP 的低功耗规范。其将健康温度计收集器和健康温度计传感器结合在一起,在不同应用中进行连接和交换数据(图 3)。
图 3:作为传感器/服务器的 NUCLEO 开发板与作为收集器/客户端的智能手机之间的 BLE 通信。(图片来源:STMicroelectronics)
健康温度计传感器:
- 测量温度,并通过健康温度计服务公布数据
- 包含远程设备要识别的设备信息服务
- 作为 GATT 服务器
健康温度计收集器:
- 访问健康温度计传感器提供的信息,并将其显示给最终用户,或者存储在非易失性存储器中,以便日后分析
- 作为 GATT 客户端
将健康温度计二进制文件烧录到 NUCLEO 的 MCU 上之后,开发人员需要按照以下步骤运行 BLE 应用实例:
使用智能手机应用程序
- 在智能手机上安装 ST BLE 工具箱。该应用程序用于与 ST BLE 设备交互以及对其进行调试。
- 为已烧录健康温度计应用程序的 STM32WBA NUCLEO 开发板通电。
- 打开智能手机蓝牙 (BT),在应用程序中扫描可用的蓝牙设备。选择健康温度计并连接。
使用网络浏览器界面
- 确保浏览器的兼容性:
- 在台式电脑上:Chrome、Edge 或 Opera
- 在智能手机设备上:安卓版 Chrome 浏览器
- 为已烧录健康温度计应用程序的 STM32WBA NUCLEO 开发板通电。
- 在电脑上激活蓝牙。
- 在浏览器中打开网页 https://applible.github.io/Web_Bluetooth_App_WBA/。
- 点击网页顶部的连接按钮,然后在设备列表中选择 HT_xx,点击配对。该设备现已连接。
- 点击健康温度计以显示界面。
表 1 显示了健康温度计传感器的服务结构。128 位长度的全局唯一标识符 (UUID) 可区分各个特征和服务。
|
表 1:“健康温度计传感器”GAP 的 GATT 服务及其 UUID。(图片来源:STMicroelectronics)
来自 GitHub 的以下 JavaScript 序列显示了网络浏览器界面如何筛选不同的 GATT 数据吞吐量特征(清单 1)。
复制
[...]
// Filtering the different datathroughput characteristics
props.allCharacteristics.map(element => {
switch (element.characteristic.uuid) {
case "00002a1c-0000-1000-8000-00805f9b34fb":
IndicateCharacteristic = element; // Temperature Measurement (TEMM)
IndicateCharacteristic.characteristic.startNotifications();
IndicateCharacteristic.characteristic.oncharacteristicvaluechanged =
temperatureMeasurement;
break;
case "00002a1d-0000-1000-8000-00805f9b34fb":
ReadCharacteristic = element; // Temperature Type
readTemperatureType();
break;
case "00002a1e-0000-1000-8000-00805f9b34fb":
NotifyCharacteristic = element; //Immediate Temperature
NotifyCharacteristic.characteristic.startNotifications();
NotifyCharacteristic.characteristic.oncharacteristicvaluechanged = notifHandler;
break;
case "00002a21-0000-1000-8000-00805f9b34fb":
ReadWriteIndicateCharacteristic = element; // Measurement Interval
readMeasurementInterval();
break;
default:
console.log("# No characteristics found..");
}
});
[...]
清单 1:此 JavaScript 序列可筛选表 1 中的不同 GATT 数据吞吐量特征。(清单来源:GitHub、STMicroelectronics)
跟踪 BLE 堆栈进程
NUCLEO-WBA52CG 嵌入了 ST-LINK/V3 在线调试器和编程器,支持 STM32 虚拟 COM 端口驱动程序,可通过串行接口与 PC 通信。任何软件终端都可以打开该串行通信端口,显示由 APP_DBG_MSG 函数在代码中生成的文本短消息。
项目内的跟踪需要在 app_conf.h 文件中启用
#define CFG_DEBUG_APP_TRACE (1)
另外,智能手机应用程序“SE BLE Toolbox”在<应用程序日志>选项卡上提供了跟踪功能。
BLE 5.3 应用程序编程
为了对 STM32WBA52 MCU 进行编程,STM 推出了由硬件抽象层 (HAL)、低层应用程序编程接口 (API)、CMSIS、文件系统、RTOS、BLE/802.15.4、线程和 Zigbee 堆栈组成的 STM32CubeWBA 软件包,以及在 STMicroelectronics 电路板上运行的实例。
每个 NUCLEO-WBA52CG BLE 应用程序实例都包含适用于 IAR Embedded Workbench for Arm (EWARM)、Keil MDK-ARM 和 STM32CubeIDE 等所有三种开发环境 (IDE) 的项目结构设置。
在健康温度计实例中,只有项目目录树(图 4 左侧框架)中的特定文件才会生成 GATT 服务。表 1 中的“健康温度计服务”(hts) 和“设备信息服务”(dis) 这两个例程并行运行(图 4 右下方)。
图 4:程序员可以在框架代码文件(左)中添加自己的 GATT 内容;这些文件会生成 GATT 服务(右)。(图片来源:STMicroelectronics)
程序员可将源代码用于自己的项目,并在标记 USER CODE BEGIN/USER CODE END 的区域内进行扩展,添加他们的 GATT 内容(清单 2)。文件 hts.c 中的初始化序列会生成 GATT 特性温度测量 (TEMM),其 UUID 为 0x2A1C。
复制
[...]
void HTS_Init(void)
{
[...]
/* TEMM, Temperature Measurement */
uuid.Char_UUID_16 = 0x2a1c;
ret = aci_gatt_add_char(HTS_Context.HtsSvcHdle,
UUID_TYPE_16,
(Char_UUID_t *) &uuid,
SizeTemm,
CHAR_PROP_INDICATE,
ATTR_PERMISSION_NONE,
GATT_DONT_NOTIFY_EVENTS,
0x10,
CHAR_VALUE_LEN_VARIABLE,
&(HTS_Context.TemmCharHdle));
if (ret != BLE_STATUS_SUCCESS)
{
APP_DBG_MSG(" Fail : aci_gatt_add_char command : TEMM, error code: 0x%2X\n", ret);
}
else
{
APP_DBG_MSG(" Success: aci_gatt_add_char command : TEMM\n");
}
/* USER CODE BEGIN SVCCTL_InitService2Char1 */
/* USER CODE END SVCCTL_InitService2Char1 */
[...]
}
[...]
清单 2:文件 hts.c 中的初始化序列会生成 GATT 特性 TEMM。(图片来源:GitHub、STMicroelectronics)
外部元器件要求
STM32WBA52 无线 MCU 只需少量外部元器件即可实现基本的蓝牙功能操作。这些元器件包括用于提供电压的电容器、晶体振荡器、带阻抗匹配的印刷电路板天线,以及谐波滤波器(图 5)。
图 5:为实现蓝牙功能,STM32WBA52 的射频终端连接到阻抗匹配网络、谐波滤波器和天线。(图片来源:STMicroelectronics)
总结
无线物联网设备开发人员必须缩短设计周期并降低成本,才能在快速发展的市场中竞争。然而,射频设计非常具有挑战性。STM32WBA52 MCU 集成 BLE 5.3 接口,使开发人员能够经济高效地快速将产品推向市场。预编程的 BLE 堆栈和多个 BLE 应用实例为定制项目提供了编程模板,可轻松插入 GATT 内容。
免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。