EFR32MG项目开发“复盘”

来源:互联网 发布:java开源吗 编辑:程序博客网 时间:2024/05/16 15:28

芯片:EFR32MG12P系列

Stack:EmberZNet 5.10.0

产品简介:符合ZigBee3.0标准和IControl标准的温度计,与其他设备绑定后定期上报温度,带有IAS Zone报警功能

主要开发内容:内部ADC采样(温度、电源电压),按键IO口中断配置和LED控制等

主要难度:芯片,Z3协议都是最新的,官方旧版stack对一些芯片没有适配带来的一系列问题

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

前期使用DK板开发,所以写完一些逻辑后基本上就可以完成项目的Demo了,遇到的问题也是一些新工具使用的问题:

a. 折腾了很久,发现新的DK板子不支持抓包功能(不支持切换信道),官方后面在论坛发文说EFR系列抓包暂时不可用,建议使用EM357

b. EFR32系列只能使用Simplicity Studio来配置工程,但是由于“Device”列表的右键菜单是动态加载的,经常会出现没有“Lounch Console”或者“Upload Application”的情况,很让人蛋疼,解决方法一般是先检查软件上设置的核心板和底板型号是否与你连接的DK板保持一致,如果不一致“右键-Device Configuration”--“Device hardware”标签下设置对应的模组型号/SOC型号/底板型号,有一些型号的SOC没有对应的模组,那么只需要选Soc和底板型号就可以了,确认信息无误后还连接不上可以拔掉DK板的usb线后重新插上,或者重启Simplicity Studio软件。

c. 烧录程序需要先右键-disconnect,然后烧写,这个与之前Ember Desktop软件使用逻辑是相反的

d. Z3的设备可以加入到HA 的网络中,但是HA的设备加入到Z3的网络中会被踢掉,因为HA的设备无法更新TC-LINK key

e. Z3的Router支持组建分布式加密网络,但不是强制的,可根据实际需求选择是否支持

f. Z3的ZigBee 3.0的Router和Coordiantor必须支持Green Power(endpoint 242),EndDevice类型的设备需要根据硬件设计来选择是否支持Green Power。

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

在原来DK建立的Demo功能基础上,根据电路图,修改实际项目中使用的SOC型号,IO口配置,遇到的问题大部分与Stack、simplicity studio和硬件设计有关

a. simplicity studio没有生成EFR32MG12P相关的board.h文件,造成生成的IAR工程报错,stack5.10.0解决这个问题

b. stack5.9.2里面的各个plugin关联还是以前HA的逻辑,在选用的时候造成不必要的麻烦,stack5.10.0中解决了这个问题

c. stack 5.10.0在选用虚拟串口为port0时会出现程序运行异常的问题

d. 遇到一些奇怪的bug会导致程序跑飞,调试方法:先找到程序跑飞的地方(仿真断点调试或者通过屏蔽部分代码来找)->然后使用相同硬件去跑官方Demo程序,如果还是一样的地方出现程序跑飞,那么很可能是Stack本身的问题,需要尝试卸载Stack,重新安装原版Stack,并在原版Stack上建立工程去调试,我有一些奇奇怪怪的问题都是这么弄的

f. 按键IO口中断问题,stack是通过PIN脚注册中断服务程序的,所以硬件设计上按键IO口应该避开重复Pin脚,如PF2和PA2,这样会导致无法产生中断,同时避开系统自用的一些debug口:PIN0、1,这种问题一旦前期没有发现,到中后期改硬件会非常麻烦,所以在项目开始硬件设计时,软件工程师应该给出合适的建议,告诉硬件工程师按键、LED的合适的IO口设置,而我们最简单和保险的办法就是参考官方DK板的按键、IO口布局。

g. stack5.10.0中电源电压测量的plugin在DK板上正常使用,但到了自己的(同系列,不同型号)板子上却出现问题,这个问题是由于stack对于不同型号的soc,一些API参数不同,却没有明确的告知用户造成的,这种问题非常棘手,通常只能求助官方技术支持,但我们在soc选型的时候对此类问题进行规避,我们的soc尽量和选用官方DK板上同一型号的soc,因为这种soc一般都是跑Demo程序没有问题的,不会出现适配的问题,因此在硬件工程师设计硬件时,我们应该提出意见尽量使用DK板上搭载的Soc

h.adc采样通道配置问题,这个问题的根本原因是stack对EFR32系列的ADC采样API适配问题,参数在某个API中被错误赋值导致后面采样的值出错,最简单有效的办法就是去查看ADC相关的寄存器,看我们赋值API的值设置的寄存器对不对,参照官方文档里面ADC寄存器介绍,那里不对改哪里

i.电压低于2.4V设备无法正常使用,但是soc最低工作电压是1.8V,原因在于内部DC-DC供电的工作最低电压为2.4V