4. Simplicity Studio开发环境搭建

Simplicity Studio 是 Silicon Labs 为 EFM32/EFR32 系列无线 SoC 提供的集成开发环境,Zigbee 智能家居产品的固件开发、编译、下载、调试都围绕它展开。本节以 EFR32MG21(或 EFR32MG24)为例,完整走通从环境安装到首次下载的链路,让开发板真正跑起第一段代码。

一、安装 Simplicity Studio 与 SDK

从 Silicon Labs 官网下载 Simplicity Studio 5(SSv5)安装包,安装时勾选 Simplicity Studio 与 Gecko SDK。SSv5 采用“Launcher + IDE”结构:Launcher 负责设备识别、SDK 管理与示例工程浏览,IDE 基于 Eclipse,负责代码编辑与编译。首次启动需要登录 Silicon Labs 账号,登录后 Launcher 会自动识别通过 USB 连接的开发板,并显示芯片型号、板卡名称与可用的 SDK 版本。

SDK 安装有两种方式:一是安装时随包安装,二是启动后在 Install 页面按需下载。Zigbee 开发需要的关键组件包括:Gecko SDK(含 Zigbee 协议栈 EmberZNet)、Gecko Bootloader、GNU ARM Toolchain(arm-none-eabi-gcc)以及 Simplicity Commander(命令行烧录工具)。建议 SDK 版本与后续量产固件保持一致,避免协议栈行为差异。安装完成后,在 Preferences → Simplicity Studio → SDKs 中确认 SDK 路径已被正确索引。

SDK 目录结构:gecko_sdk/ 下包含 platform/(底层驱动)、protocol/zigbee/(EmberZNet 协议栈)、bootloader/(Gecko Bootloader 源码与示例)、app/(示例应用)。理解这一结构有助于后续定位文件。

二、Gecko Bootloader 配置

Gecko Bootloader 是 Silicon Labs 的二级引导程序,负责上电初始化、固件升级(OTA/串口/SPI)与固件校验。Zigbee 设备若要支持 OTA 升级,必须烧录 Bootloader。Bootloader 分为 Standalone(独立,无应用也能运行)与 Application(与应用合并)两类,Zigbee 产品通常使用 Standalone Bootloader。

配置流程:在 Launcher 的 Example Projects 中搜索 Bootloader,选择与芯片匹配的 Bootloader – SoC 示例,创建工程后打开 .slcp 配置文件,在 Bootloader 组件中设置:

  • Storage:选择内部 Flash 或外部 SPI Flash,决定升级镜像存放位置;
  • Communication:选择 UART、SPI 或 EZSP(Zigbee OTA 走 EZSP);
  • Bootloader size:默认约 16–32 KB,需与链接脚本中的 Bootloader 区域对齐;
  • Slot 配置:定义 Slot 起始地址与大小,OTA 镜像写入 Slot,重启后由 Bootloader 搬运到应用区。

配置完成后编译生成 .s37 或 .hex 文件,用 Simplicity Commander 烧录到芯片起始地址 0x00000000。烧录后复位,若 Bootloader 正常,串口会输出启动信息,或通过 Commander 的 flash 命令读取校验。

EFR32 Flash 分区与 Bootloader / OTA 数据流 Bootloader 0x00000000 Application (Zigbee 固件) 0x00008000 起 OTA Slot / Storage 升级镜像暂存区 OTA 镜像写入 Slot 校验后搬运到应用区 Simplicity Commander 烧录 Bootloader commander flash bootloader.s37 --address 0x0 SSv5 编译下载 Build → Debug / Flash 生成 .hex / .bin 写入 Application 区 OTA 升级触发 Zigbee OTA Cluster 镜像下载到 Slot 复位后 Bootloader 搬运

三、创建 Zigbee 工程

在 Launcher 的 Example Projects 中筛选 Zigbee,选择 Zigbee – SoC Zigbee Coordinator / Router / Sleepy End Device 示例。以 Zigbee – SoC Light 为例,创建工程时需指定:

  • Board:选择实际开发板(如 BRD4180B),SSv5 会自动匹配芯片与引脚;
  • SDK 版本:与 Bootloader 使用同一 SDK;
  • Project name:如 zigbee_light_demo;
  • Toolchain:GNU ARM v10 或更高。

工程创建后,.slcp 文件是核心配置入口。在 Software Components 中可添加 Zigbee 协议栈组件、OTA Client/Server、LED、Button、UART 等。Zigbee 应用的关键组件包括:Zigbee Stack、Zigbee Application Framework、Zigbee Cluster Library。在 Zigbee Application Framework 中可配置 Endpoint、Cluster、Attribute,SSv5 会自动生成 zcl_callback.c、zcl_config.h 等文件。

工程目录中,src/ 存放应用代码,config/ 存放 ZCL 配置,autogen/ 为自动生成代码,linker/ 为链接脚本。修改 .slcp 后需重新生成,避免手动改动 autogen 文件被覆盖。

四、首次编译与下载

点击工具栏 Build(锤子图标)编译工程。首次编译会生成协议栈、平台驱动与自动代码,耗时约 1–3 分钟。编译成功后,Console 输出 Build Finished. 0 errors, 0 warnings,并在 GNU ARM v10.3.1 - Default/ 下生成 .hex、.bin、.out 文件。

下载方式有两种:

  1. IDE 内 Debug:点击 Debug,SSv5 通过 J-Link 下载并进入调试会话,可设置断点、查看变量、观察 Zigbee 事件;
  2. Simplicity Commander 命令行:适合批量烧录,命令如下:
commander flash zigbee_light_demo.hex --address 0x00008000
commander flash bootloader.s37 --address 0x00000000
commander reset

下载完成后复位开发板。若使用 Zigbee – SoC Light 示例,设备会以 Router 或 End Device 身份加入网络,串口打印启动日志,LED 按 ZCL On/Off 命令响应。此时可用 Zigbee 网关或另一块开发板作为 Coordinator 进行入网测试,观察 Network Joined、Endpoint 1 等日志,确认首次下载与运行成功。

常见问题:若下载后无日志,先检查 Bootloader 是否烧录、链接脚本中应用起始地址是否与 Bootloader 大小匹配;若编译报错找不到 ember.h,检查 SDK 是否被正确索引、工程是否使用了正确的 SDK 版本。

五、首次下载后的验证要点

首次下载不是终点,而是验证环境是否可用的关键节点。建议按以下顺序确认:

  • Bootloader 校验:用 Commander 读取 0x00000000 区域,确认非全 0xFF;
  • 应用运行:串口输出启动信息,LED 或按键有响应;
  • 协议栈初始化:日志中出现 EZSP 或 Zigbee 初始化完成提示;
  • 入网测试:与 Coordinator 组网,确认设备能加入并上报属性;
  • OTA 预留:确认 Slot 区域已按规划划分,为后续 OTA 升级留出空间。