关于MistMesh固件开发

H-IoT提供一套Mist软件开发包,即mist-example,此开发包可供您快速编译、开发基于Mist的应用。与此同时,也要求您掌握相应的专业技能。

所需技能

  • Linux虚拟机及日常操作
  • Git源码管理
  • C语言交叉编译
  • FreeRTOS编程
  • Makefile工程管理
  • Python编程
  • Shell编程
  • Batch编程

固件架构

  • mist-example框架如下图所示:

    Firmware Framework
    • HW Platform

      硬件平台定义与板载相关的信息,包含MCU、外设、驱动、UUID等,软件开发包中已包含一系列板载文件,目录路径为 zoo/thinnect.dev-platforms/zoo/thinnect.hiot-platforms/ ,这些目录下含有与板载相关的Makefile文件、硬件引脚配置头文件等,您可根据实际应用来创建自己的板载文件。

    • RAIL

      Silicon Labs的RAIL库,即无线电抽象接口层,它提供直观,易于定制的无线电接口层,支持专有或基于标准的无线协议。RAIL旨在简化和缩短开发过程,开发人员不再需要处理多个产品上的数百个寄存器,而可以依靠统一的软件API。有关RAIL详细信息,请至Silicon Labs官网查看 UG103: RAIL Fundamentals

    • FreeRTOS Kernel & CMSIS-RTOS

      基于FreeRTOS实时内核的CMSIS-RTOS标准接口框架。

    • libbeat

      Mist网络协议栈,包含时分复用、网络路由等Mesh功能,以库文件形式提供。

    • libmist

      Mist中间件,包含了Mist规则引擎、消息缓存等功能,以库文件形式提供。

    • FS

      基于开源spiffs文件系统,服务于Mist规则引擎、设备参数更新等功能。

    • LowLevelLogging

      Mist提供的日志组件,辅助软件调试与测试。

    • Application

      Mist应用层,基于Mist发布/订阅模型,您只需要完成少量的驱动集成工作,即可快速开发出Mist相关应用。

  • Makefile工程:

    • Platform参数

      指定目标编译平台,每个设备应用可能对应一款硬件平台,请参考 zoo/thinnect.dev-platforms/ zoo/thinnect.hiot-platforms/ 目录下的相关定义。

    • DEFAULT_RADIO_CHANNEL参数

      该参数指定默认无线电信道,设备运行时可通过 deviceparameter 工具修改。

    • INCLUDE_BOOTLOADER参数

      该参数指定是否支持bootloader,如果需要支持OTA升级功能,必须使能该参数,即INCLUDE_BOOTLOADER=1。

    • INCLUDE_BEATSTACK参数

      该参数指定网络形态,设置为0时,编译生成单跳网络应用;设置为1时,编译生成多跳网络应用。

  • 编译示例:

make wfs-c301 MIST_MOVEMENT=1 DEFAULT_RADIO_CHANNEL=17 INCLUDE_BEATSTACK=1 INCLUDE_BOOTLOADER=1

上述命令,基于wfs-c301平台编译,无线信道为17,多跳网络,支持bootloader。

软件包概览

mist-example软件开发包目录结构如下图所示:

Firmware Framework

由此可见,软件包由Mist协议栈、Mist中间件、Mist应用以及一系列Git子模块构成,各目录功能描述如下:

  • libbeat/: Mist协议栈
  • libmist/: Mist中间件
  • zoo/FreeRTOS-Kernel/: 开源FreeRTOS内核
  • zoo/graphitemaster.incbin/: 包含二进制bin文件工具
  • zoo/jtbr.endianness/: 大小端类型变换宏定义库
  • zoo/lammertb.libcrc/: CRC函数库
  • zoo/pellepl.spiffs/: 面向SPI Nor Flash的文件系统
  • zoo/prolab.dt-types/: Mist数据类型
  • zoo/prolab.motexml/: Mist应用层消息编解码库
  • zoo/thinnect.cmsis-ext/: CMSIS扩展接口
  • zoo/thinnect.cmsis-freertos/: CMSIS RTOS接口
  • zoo/thinnect.dev-platforms/: 硬件平台定义
  • zoo/thinnect.device-signature/: 设备签名接口
  • zoo/thinnect.hiot-platforms/: 硬件平台定义
  • zoo/thinnect.lll/: 日志组件
  • zoo/thinnect.node-buildsystem/: 工程编译
  • zoo/thinnect.node-filesystem/: 文件系统抽象层接口
  • zoo/thinnect.node-platform/: 平台相关或通用驱动接口
  • zoo/thinnect.tos-deviceannouncement/: Mist DeviceAnnouncement协议接口

在开发Mist应用时,您需要集中在平台相关的目录下进行开发,也就是 zoo/thinnect.dev-platforms/zoo/thinnect.node-platform/zoo/thinnect.node-platform/ 这三个目录。

驱动集成

zoo/thinnect.node-platform/ 下包含了一些与平台相关和无关的驱动,某些情况下,您只需要简单地配置硬件引脚定义,便可在应用中调用驱动接口直接使用。

如果需要开发与Silicon Labs芯片紧密相关的驱动,您需要完成以下步骤:

  • 安装Simplicity Studio获取Silicon Labs EFR32硬件外设驱动库 emlib,Windows下的路径为 C:\SiliconLabs\SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\v2.7\platform,具体安装路径根据实际确定
  • 找到驱动需要使用到的外设库源文件,添加至Makefile工程
  • 调用相关API进行驱动集成

固件烧录

Silicon Labs提供的一套烧录工具,即Simplicity Commander,该套工具在安装了Simplicity Studio后即可获得。

Simplicity Commander

需要注意的是,每个Mist设备都包含有签名,需要烧录至MG21系列的UserData区,Flash地址为0x0FE00000,签名内容包括:设备EUI64、平台UUID、固件信息以及设备License等,设备签名可通过 usersiggen 工具获得。

Commander Userdata

设备运行程序,即bootloader和application的烧录起始地址为0x00000000。

固件升级

设备部署运行时,可通过一套Mist升级工具,配合Bridge来进行OTA升级以及参数更改,这里的Bridge是连接至PC与待升级设备RF同方案的硬件,但是需要烧录特殊固件 mistr5-connector.bin。现提供的工具包括 radiobootdeviceparameter

  • radioboot工具

    Mist提供一套OTA升级工具,即radioboot。要求待升级设备的Board UUID必须与Bridge一致,当前固定为 68e1437b-f0da-4615-a934-1790012e6dba,所以在用 usersiggen 生成设备签名时,必须设定Board UUID与之一致。

  • deviceparameter工具

    通过deviceparamter工具可以配置一系列设备运行参数,比如license下发、远程重启、信道更改等。

日志与调试

Mist提供一套日志组件,方便系统调试与测试,具体使用示例如下:

#include "loglevels.h"
#define __MODUUL__ "m_m_b"
#define __LOG_LEVEL__ (LOG_LEVEL_mist_mod_button & BASE_LOG_LEVEL)
#include "log.h"

/* Implement code below */

loglevels.h 头文件中定义了日志宏开关。

参考案例

H-IoT基于mist-example的照明解决方案lighting-apps。

包含设备类型:

  • LED控制器
  • PIR
  • 按键
  • 窗机
  • Lux