1、概述
前帖介绍了nRF SDK基于zephyr的开发,具体可以参考Bindings index — Zephyr Project Documentation, 这里有完整的zephyr原理和线程开发指南,总体来说并不容易,需要完整配置环境,参数,硬件树和功能选择配置以及cmake参数。这个过程在keil等开发工具中一部分用图形化的属性配置,可以直接参照。使用zephyr则都要文本编辑,比较考验能力,需要先当专家再开发简单程序,否则就只能下载范例浅尝辄止。
nRF SDK并不是简单的照搬zephyr而是自己独立维护这个库,扩展了独立的库,其中适用于nRF7002的库nRF70 Series Wi-Fi driver — nRF Connect SDK 2.5.99 documentation (nordicsemi.com)是支持这个开发板开发的关键。这个nRF7002是一个协处理内核,不能单独工作,需要作为从处理器运行,适用QSPI的端口访问,但是加入这个库就很简单,需要再Kconfig中配置CONFIG_WIFI_NRF700X这个参数,然后根据其他指令逐个选择就可以启动了。其内核逻辑如下
直接在drivers/wifi/nrf700x/zephyr/这个目录下引用这个库的源代码到新建工程中。开发过程中选择nrf7002dk_nrf5340_cpuapp这个内核,直接是哦那个nRF5340的无线内核,不启动nRF7002,而只有nrf7002dk_nrf5340_cpunet这个选择,才能是启动nRF7002这个协处理内核。这个内核下,有些引脚被占用,所以ADC这样的功能也不能适用了,具体如下
具体配置如下
The connections and IOs supported by the development kit are listed in this section.
LED
-
LED1 (green) = P1.06
-
LED2 (green) = P1.07
Wi-Fi control
-
BUCKEN = P0.12
-
IOVDD CONTROL = P0.31
-
HOST IRQ = P0.23
-
COEX_REQ = P0.28
-
COEX_STATUS0 = P0.30
-
COEX_STATUS1 = P0.29
-
COEX_GRANT = P0.24
随后各种wifi功能的使用可以参照这个Developing with nRF70 Series — nRF Connect SDK 2.5.99 documentation (nordicsemi.com)说明来照搬。
那么使用这个协处理内核nRF7002的好处是什么,本来主内核就可以搞wifi和蓝牙,使用nRF7002的最大好处就是提升了性能,扩展了可以使用的外存和内存,这样就可以用matter协议了。这个matter协议最近突然走红,这款开发板算是率先支持这个生态的工具。所以,就要仔细看一下。
2、Matter协议
Matter协议是几个美国巨头讨价还价的结果,因为Wifi,BLE,Thread,Zigbee都各自在2.4GHz频段上各不相让,然后Apple,Google,Samsung,Amazon等又在各自的智能生态中加入私货,在BLE再套个皮,成google xxx协议。本来就是想搞小院高墙,自留地独占,不让别人进来,这样的结果很美好,但是效果很骨感,一个无线灯灯智能终端必须要原配的无线环境才行,分成春秋战国,结果地方占差不多了,小的市场就不能搜更多银子发展。于是,这个几个霸王就说我们集体搞墙吧,就把别人搞外面去,提高入场门槛,这样Matter就再撕扯之后快快乐乐的出场了。Matter单独形成一个收费社区,需要matter认证,matter密码验证,又出了一堆生意,这个套路我们看多了也就慢慢晓得了。
所以这个matter搞得非常非常复杂,搞得专业整活的人看都不想看一眼,而且特别吃内存,如果嵌入式开发完整支持这个生态,要1M内存起步,所以能够支持matter的 都是斗士,都是芯片飞机中的战斗机,比如本nRF7002开发板。不过,这样好吗?中国人口大致是美国的3-4倍,所以,细分市场即使很小的地盘就能喂饱一个小的生态开发者。如果像小米一样已经自己成体系,如果不介意就用小米全家桶,那么起始可以不搭理这个matter协议。不过,就看小米打算不打算去搞美国市场,或者让不让小米进她们地盘,如果想抢地盘,小米这些还要弄一个海外特供版,用高价芯片去攻占地盘。这个是废话,让小米自己去想吧。
Matter这样看起来就非常高大上,每个小网中都需要一个matter控制器,在不同的网络协议中,需要连接网关,这样,就把各家的设备都可以联通起来了。
最终就形成这样的格局,终端设备可以被原生系统管控,经过matter一搞,还可以同时被多个生态访问和控制,这个不同小院之间用数据封包的方式,通过安全传输信道,实现数据交换性的安全访问。是不是真安全,那个只有云知道。
3、Matter范例开发环境创建
那么这里先简单说一下matter over wifi的开发环境如何生成。
首先准备一个ubuntu20.04以上的主机,插入一个无线收发器,再准备一个可以接入ipv6的高速路由器,并取消广播信号屏蔽功能,因为,这些metter终端节点要无时无刻地不停的发彪,这样再把nRF7002开发成终端节点,写入代码。其中最重要的就是matter controller,这个是用CHIP tool这个工具实现的,需要运行在主机上。这样就构成了一个完整的生态。才能开始设置matter节点。
4、新建matter工程
按照前面的新建过程,复制了这个light bulb范例,就是一个智能照明灯设计
代码如下,完全是RTOS的线程在跑。先苦后甜,忙乎大半天,到最后了,其实真需要写的代码工作量不大。
#include "app_task.h"
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(app, CONFIG_CHIP_APP_LOG_LEVEL);
int main()
{
CHIP_ERROR err = AppTask::Instance().StartApp();
LOG_ERR("Exited with code %" CHIP_ERROR_FORMAT, err.Format());
return err == CHIP_NO_ERROR ? EXIT_SUCCESS : EXIT_FAILURE;
}