Silicon Labs Zigbee 3.0智能门锁及网关开发复盘(EFR32MG21P)

芯片:EFR32MG21PA020F1024

Stack:EmberZNet 6.5.5.0

产品简介:开发一款门锁和一个网关的Zigbee部分,门锁要求通过Zigbee3.0认证,并能通过标准Zigbee协议接入SmartThings平台,同时需要通过自定义Cluster实现自有的私有透传协议,通过自家的网关对接外国的Wyze平台

主要开发内容:

1.与主控芯片的串口通讯(包含低功耗串口通讯设计、串口ACK重发机制设计、串口协议解析和处理模块设计等)

2.自定义Cluster的透传接口设计、Zigbee网络层分包组包功能、透传消息接收队列设计

3.标准Zigbee命令的处理

主要难度:EFR32MG21新型号刚推出,协议栈适配可能还会有各种问题,私有协议的适配,需要修改network-steering相关流程

硬件原理框图:

I.开发前期阶段遇到的问题(用DK板建Demo工程):

1.用EFR32MG21A020(设置发射功率为20dBm)官方开发板,测试睡眠电流无法达到低功耗(最低大概24微安),原来是MG21无法关闭开发板的外部SPI的Flash,造成耗电,但是可以被MG12关闭,需要使用客户板进行测试睡眠电流

客户板上测试结果(大概10微安):

将未使用的其他悬空IO口配置为gpioModeDisabled模式,进入睡眠将串口的TX配置为gpioModeDisabled模式,唤醒之后将串口TX配置为gpioModePushPull上拉模式,测试到的睡眠静态电流为5.7μA左右

2.入网之后没有请求更新Link-Key,后面发现是CLI命令参数给的不对,如果入网后需要更新Link-Key,需要使用“plugin network-steering start 0”,0代表要更新Link-Key,1则不需要

3.如下图日志所示,不难分析出设备进入睡眠之后,会发生重启,这个是随机出现的,且只发生在Sleep EndDevice类型设备上,有时候重新烧录程序又恢复正常,这个问题主要是进入睡眠看门狗未关闭造成的,需要在进入睡眠前关闭软件看门狗,在唤醒之后打开看门狗

4.MG21平台OTA升级提示“Invalid Image”,需要使用“Slot Manager”,然后选择“use first slot”,修改bootloader的ISC文件Slot 0 的开始地址为655360,大小为393216,OTA功能正常了

II.开发中期遇到的问题(根据电路图设计建立工程)

5.MG21在睡眠EM2模式下无法触发外部GPIO中断,需要在初始化函数中使能外部中断

  //Enable GPIO interrupt
  halGpioClear(ZB_WAKE_UP_GPIO);
  NVIC_ClearPendingIRQ(GPIO_EVEN_IRQn);
  NVIC_EnableIRQ(GPIO_EVEN_IRQn);

6.网关ZB作为OTA Server,网关Zigbee自身OTA的问题

官方资料-->

I.How to upgrade(downgrade) the ncp image with host application

II.Upgrading the device firmware through UART XMODEM

由于主控端芯片不支持Zigbee Host模式,因此网关ZB需要配置为SOC模式,且需要支持OTA server

a.网关Zigbee自身固件更新方案设计:

       主控端将网关Zigbee的固件(.gbl)文件下载到本地后,拉低网关ZB的BootLoader脚并重启Zigbee,使Zigbee进入到boot模式并等待固件更新,主控通过Xmode协议将网关Zigbee的固件(.gbl)文件通过串口传给网关Zigbee,相当于程序烧录,如果中断则需要网关重新让Zigbee进入Boot并更新固件,这个方案主要需要修改BootLoader程序,因为Xmode是用在NCP模式上,APP的Bootloader类型是Standalone,而我们的网关是SOC模式的,APP的BootLoader模式只能选Application或者Local stoage,因此需要把Xmode移植到普通BootLoader程序上,另外需要修改Xmode相关程序,如定义的IO口和等待Xmode开始超时时间

b.网关Zigbee作为OTA Server的方案设计

     OTA Server实际放在服务器端,网关Zigbee将收到的OTA相关消息命令用自定义的串口协议发给主控,透传给服务器,服务器的OTA消息透传给网关主控,并通过自定义的串口协议发给网关Zigbee,网关Zigbee需要从中解析出标准的OTA数据,并转成Raw Massage发给门锁,此方案的弊端为OTA请求应答路径太长,如果服务器有延时会导致更新较慢,优点是固件放在服务器端,安全性较高,且无需OTA固件签名等繁琐操作

7.Zigbee与主控串口通讯,使用PA4作为TX,PA5作为RX,串口通讯异常

8.FCC相关串口测试命令

测试发送数据包(适用于专业的射频微波仪器)

network leave
plugin mfglib mfgenable 1
plugin mfglib tone stop
plugin mfglib stop
plugin mfglib start 0
plugin mfglib set-channel 11   //zigbee信道
plugin mfglib set-power 20 3   //20为发送功率
plugin mfglib send test 0xFFFE 0x50 //发包测试 (包数量 - 包大小)
plugin mfglib send test 0x5FFE 0x20 //发包测试 (包数量 - 包大小)
plugin mfglib mfgenable 0
接收:

network leave
plugin mfglib mfgenable 1
plugin mfglib stream stop
plugin mfglib stop
plugin mfglib start 1  
plugin mfglib set-channel 20
plugin mfglib set-power 20 3    
plugin mfglib stream start
plugin mfglib stream stop
plugin mfglib status
plugin mfglib mfgenable 0

9.网络层分包组包的问题

勾选<fragmentation>plugin,并且设置支持的最大的分包数量和网络包大小最大值

10.MG21烧录固件及更新SE固件的问题

a)APP和BootLoader固件合成为一个.bin文件

commander.exe convert Ford-Zigbee-Bootloader.s37 Ford-Lock-Zigbee-V1.1.1.1-debug.gbl --address 0x00 --outfile Ford-Lock-Zigbee-V1.1.1.1-debug.bin
PAUSE

b)烧录APP和BootLoader固件脚本

注意:J-LINK需要接MG21芯片的VCC、GND、SWDIO、SWCLK和RESET

commander device reset
commander device recover --device EFR32MG21A020F1024IM32
commander flash Ford_Lock_Zigbee_V1.1.0.0.bin --device EFR32MG21A020F1024IM32
commander device lock --debug enable --device EFR32MG21A020F1024IM32
commander device reset
PAUSE

c)烧录SE固件脚本

commander device reset
commander device recover --device EFR32MG21A020F1024IM32
commander.exe flash s2c1_se_fw_upgrade_app_1v0p2.hex --device EFR32MG21A020F1024IM32
PAUSE

d)单独解锁脚本

commander device reset
commander device recover --device EFR32MG21A020F1024IM32
PAUSE

11.MG21偏频调整的方法

a)修改Power Mode如下图

b)修改CMU里面的高频晶振的CTUNE值

12.MG21串口丢包的问题

修改hal-config.h文件里面的串口接收发送的队列大小:

#define HAL_USART1_RX_QUEUE_SIZE                     (1024UL)
#define HAL_USART1_TX_QUEUE_SIZE                     (1024UL)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值