如何快速而经济高效地将蓝牙 5.3 添加至边缘物联网设计

2023年12月11日 08:36    发布者:eechina
来源:DigiKey
作者:Jens Wallmann

激烈的竞争给物联网 (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 应用实例:

使用智能手机应用程序

1、在智能手机上安装 ST BLE 工具箱。该应用程序用于与 ST BLE 设备交互以及对其进行调试。
2、为已烧录健康温度计应用程序的 STM32WBA NUCLEO 开发板通电。
3、打开智能手机蓝牙 (BT),在应用程序中扫描可用的蓝牙设备。选择健康温度计并连接。

使用网络浏览器界面

1、确保浏览器的兼容性:
        · 在台式电脑上:Chrome、Edge 或 Opera
        · 在智能手机设备上:安卓版 Chrome 浏览器
2、为已烧录健康温度计应用程序的 STM32WBA NUCLEO 开发板通电。
3、在电脑上激活蓝牙。
4、在浏览器中打开网页 https://applible.github.io/Web_Bluetooth_App_WBA/
5、点击网页顶部的连接按钮,然后在设备列表中选择 HT_xx,点击配对。该设备现已连接。
6、点击健康温度计以显示界面。

表 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 内容。