关于MistMesh固件开发¶
H-IoT提供一套Mist软件开发包,即mist-example,此开发包可供您快速编译、开发基于Mist的应用。与此同时,也要求您掌握相应的专业技能。
所需技能¶
- Linux虚拟机及日常操作
- Git源码管理
- C语言交叉编译
- FreeRTOS编程
- Makefile工程管理
- Python编程
- Shell编程
- Batch编程
固件架构¶
mist-example框架如下图所示:
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软件开发包目录结构如下图所示:
由此可见,软件包由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后即可获得。
需要注意的是,每个Mist设备都包含有签名,需要烧录至MG21系列的UserData区,Flash地址为0x0FE00000,签名内容包括:设备EUI64、平台UUID、固件信息以及设备License等,设备签名可通过 usersiggen 工具获得。
设备运行程序,即bootloader和application的烧录起始地址为0x00000000。
固件升级¶
设备部署运行时,可通过一套Mist升级工具,配合Bridge来进行OTA升级以及参数更改,这里的Bridge是连接至PC与待升级设备RF同方案的硬件,但是需要烧录特殊固件 mistr5-connector.bin。现提供的工具包括 radioboot 与 deviceparameter。
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 头文件中定义了日志宏开关。