北方 发表于 2023-11-14 15:16

【nRF7002-DK Wi-Fi® 6开发套件评测】#5 基于nRF7002开发matter协议入门

<div class='showpostmsg'><p><strong><span style="font-size:16px;">1、概述</span></strong></p>

<p>&nbsp; &nbsp; &nbsp;前帖介绍了nRF SDK基于zephyr的开发,具体可以参考<a href="https://docs.zephyrproject.org/latest/build/dts/api/bindings.html">Bindings index &mdash; Zephyr Project Documentation</a>, 这里有完整的zephyr原理和线程开发指南,总体来说并不容易,需要完整配置环境,参数,硬件树和功能选择配置以及cmake参数。这个过程在keil等开发工具中一部分用图形化的属性配置,可以直接参照。使用zephyr则都要文本编辑,比较考验能力,需要先当专家再开发简单程序,否则就只能下载范例浅尝辄止。</p>

<p>&nbsp; &nbsp; &nbsp; nRF SDK并不是简单的照搬zephyr而是自己独立维护这个库,扩展了独立的库,其中适用于nRF7002的库<a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/drivers/wifi/nrf700x/nrf700x.html">nRF70 Series Wi-Fi driver &mdash; nRF Connect SDK 2.5.99 documentation (nordicsemi.com)</a>是支持这个开发板开发的关键。这个nRF7002是一个协处理内核,不能单独工作,需要作为从处理器运行,适用QSPI的端口访问,但是加入这个库就很简单,需要再Kconfig中配置CONFIG_WIFI_NRF700X这个参数,然后根据其他指令逐个选择就可以启动了。其内核逻辑如下</p>

<div style="text-align: left;"></div>

<div style="text-align: left;">直接在drivers/wifi/nrf700x/zephyr/这个目录下引用这个库的源代码到新建工程中。开发过程中选择nrf7002dk_nrf5340_cpuapp这个内核,直接是哦那个nRF5340的无线内核,不启动nRF7002,而只有nrf7002dk_nrf5340_cpunet这个选择,才能是启动nRF7002这个协处理内核。这个内核下,有些引脚被占用,所以ADC这样的功能也不能适用了,具体如下</div>

<div style="text-align: left;">
<div style="text-align: left;"></div>

<div style="text-align: left;">具体配置如下</div>

<div style="text-align: left;">
<p>The connections and IOs supported by the development kit are listed in this section.</p>

<section id="led">
<h6>LED<a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/device_guides/working_with_nrf/nrf70/gs.html#led" title="Permalink to this heading"></a></h6>

<ul>
        <li>
        <p>LED1 (green) = P1.06</p>
        </li>
        <li>
        <p>LED2 (green) = P1.07</p>
        </li>
</ul>
</section>

<section id="push-buttons">
<h6>Push buttons<a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/device_guides/working_with_nrf/nrf70/gs.html#push-buttons" title="Permalink to this heading"></a></h6>

<ul>
        <li>
        <p>BUTTON1 = SW1 = P1.08</p>
        </li>
        <li>
        <p>BUTTON2 = SW2 = P1.09</p>
        </li>
        <li>
        <p>BOOT = SW5 = boot/reset</p>
        </li>
</ul>
</section>

<section id="wi-fi-control">
<h6>Wi-Fi control<a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/device_guides/working_with_nrf/nrf70/gs.html#wi-fi-control" title="Permalink to this heading"></a></h6>

<ul>
        <li>
        <p>BUCKEN = P0.12</p>
        </li>
        <li>
        <p>IOVDD CONTROL = P0.31</p>
        </li>
        <li>
        <p>HOST IRQ = P0.23</p>
        </li>
        <li>
        <p>COEX_REQ = P0.28</p>
        </li>
        <li>
        <p>COEX_STATUS0 = P0.30</p>
        </li>
        <li>
        <p>COEX_STATUS1 = P0.29</p>
        </li>
        <li>
        <p>COEX_GRANT = P0.24</p>
        </li>
</ul>
</section>
</div>

<p>&nbsp; &nbsp; 随后各种wifi功能的使用可以参照这个<a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/device_guides/working_with_nrf/nrf70/developing/index.html">Developing with nRF70 Series &mdash; nRF Connect SDK 2.5.99 documentation (nordicsemi.com)</a>说明来照搬。</p>

<p>&nbsp; &nbsp; 那么使用这个协处理内核nRF7002的好处是什么,本来主内核就可以搞wifi和蓝牙,使用nRF7002的最大好处就是提升了性能,扩展了可以使用的外存和内存,这样就可以用matter协议了。这个matter协议最近突然走红,这款开发板算是率先支持这个生态的工具。所以,就要仔细看一下。</p>
</div>

<p>&nbsp;</p>

<p><strong><span style="font-size:16px;">2、Matter协议</span></strong></p>

<p>&nbsp; &nbsp; &nbsp; Matter协议是几个美国巨头讨价还价的结果,因为Wifi,BLE,Thread,Zigbee都各自在2.4GHz频段上各不相让,然后Apple,Google,Samsung,Amazon等又在各自的智能生态中加入私货,在BLE再套个皮,成google xxx协议。本来就是想搞小院高墙,自留地独占,不让别人进来,这样的结果很美好,但是效果很骨感,一个无线灯灯智能终端必须要原配的无线环境才行,分成春秋战国,结果地方占差不多了,小的市场就不能搜更多银子发展。于是,这个几个霸王就说我们集体搞墙吧,就把别人搞外面去,提高入场门槛,这样Matter就再撕扯之后快快乐乐的出场了。Matter单独形成一个收费社区,需要matter认证,matter密码验证,又出了一堆生意,这个套路我们看多了也就慢慢晓得了。</p>

<p>&nbsp; &nbsp; 所以这个matter搞得非常非常复杂,搞得专业整活的人看都不想看一眼,而且特别吃内存,如果嵌入式开发完整支持这个生态,要1M内存起步,所以能够支持matter的 都是斗士,都是芯片飞机中的战斗机,比如本nRF7002开发板。不过,这样好吗?中国人口大致是美国的3-4倍,所以,细分市场即使很小的地盘就能喂饱一个小的生态开发者。如果像小米一样已经自己成体系,如果不介意就用小米全家桶,那么起始可以不搭理这个matter协议。不过,就看小米打算不打算去搞美国市场,或者让不让小米进她们地盘,如果想抢地盘,小米这些还要弄一个海外特供版,用高价芯片去攻占地盘。这个是废话,让小米自己去想吧。</p>

<p>&nbsp; &nbsp; Matter这样看起来就非常高大上,每个小网中都需要一个matter控制器,在不同的网络协议中,需要连接网关,这样,就把各家的设备都可以联通起来了。</p>

<div style="text-align: left;"></div>

<div style="text-align: left;">最终就形成这样的格局,终端设备可以被原生系统管控,经过matter一搞,还可以同时被多个生态访问和控制,这个不同小院之间用数据封包的方式,通过安全传输信道,实现数据交换性的安全访问。是不是真安全,那个只有云知道。</div>

<div style="text-align: left;">
<div style="text-align: left;"></div>

<p><a href="https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/matter-testing-nrf-connect-sdk-platform-with-apple-google-and-samsung-ecosystems-218911247#mcetoc_1gkq24ojdf">Matter: Testing the nRF Connect platform with Apple, Google and Samsung ecosystems - Blogs - Nordic Blog - Nordic DevZone (nordicsemi.com)</a>这个帖子就说明了,如果一奴多主的,先登入一个系统,因为她们已经都准备好了接受别人家的matter信道,所以,添加设备的时候可以发现具有matter封包的终端设备,然后再搞一个二次认证,就可以进入两个以上的网络。对于用户来说,这个独立的网络就是不同的物联网控制app,比如Amazon的语音控制音箱,苹果的Apple Home等。大致是这么个样子</p>

<div style="text-align: left;"></div>

<div style="text-align: left;">作为嵌入式开发,就是最左边的Matter Accessary,真正搞事情的是Matter 控制器,这样能把信号再套一个快递纸箱,传给下一个接收者。目前,有两种结构,一个是Matter over Wifi,这个是本代码想弄的,另一个是matter over thread,这个小复杂,我也没看懂,就先跳过了。因为,thread在国内就没有热乎起来,大家用脚投票已经把他淘汰了,用自行车就很好,哪里用得着比亚迪。</div>

<div style="text-align: left;">相比蓝牙等协议,matter第一重要的步骤,也是第一个步骤,commission,我这里按照实际效果,称为配网,就是通过一系列勾心斗角的互不信任的验证和确认过程,让不是一家人的进入一家门。看着就头大,如下图,</div>

<div style="text-align: left;">
<div style="text-align: left;"></div>

<div style="text-align: left;">这个过程的核心就是需要把这64位的身份证纳进去,</div>

<div style="text-align: left;">
<ul>
        <li>
        <p>16-bit 厂家ID和16-bit产品ID,这个估计要从Matter海盗公会去申请去花钱购买,先到先得,可以先弄一个吉祥号段,</p>
        </li>
        <li>
        <p>12-bit设备编号</p>
        </li>
        <li>
        <p>27-bit 起始密码</p>
        </li>
        <li>
        <p>8-bit 入网掩码</p>
        </li>
</ul>
</div>

<p>当然,这个matter协议的最大含金量在这里<a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/protocols/matter/overview/security.html#ug-matter-network-topologies-concepts-security">Matter network security</a>,构建了一个非常赞的数据加密验证体系,包括两部分<a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/protocols/matter/overview/security.html#id7" role="doc-backlink">Passcode-Authenticated Session Establishment (PASE)</a>&nbsp;和<a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/protocols/matter/overview/security.html#id8" role="doc-backlink">Certificate-Authenticated Session Establishment (CASE)</a>,分别使用于初始验证,也就是配网,以及运行加密。这个过程,所有数据都额外增加了加密验证的计算量。</p>

<p>&nbsp; &nbsp;不过,这个还是很可以的,因为,我朝很多物联网产品近乎裸奔,所有数据都是明文发送,就是当中途数据劫包的中继器不存在,所以就有了监控摄像头被别人呢破解后视频在网上直播,智能门锁直接用手机APP通用开锁的故事。</p>
</div>

<p>&nbsp;</p>
</div>

<p><span style="font-size:16px;"><strong>3、Matter范例开发环境创建</strong></span></p>

<p>&nbsp; &nbsp; 那么这里先简单说一下matter over wifi的开发环境如何生成。</p>

<p>&nbsp; &nbsp; 首先准备一个ubuntu20.04以上的主机,插入一个无线收发器,再准备一个可以接入ipv6的高速路由器,并取消广播信号屏蔽功能,因为,这些metter终端节点要无时无刻地不停的发彪,这样再把nRF7002开发成终端节点,写入代码。其中最重要的就是matter controller,这个是用CHIP tool这个工具实现的,需要运行在主机上。这样就构成了一个完整的生态。才能开始设置matter节点。</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:16px;">4、新建matter工程</span></strong></p>

<p>&nbsp;按照前面的新建过程,复制了这个light bulb范例,就是一个智能照明灯设计</p>

<div style="text-align: left;"></div>

<div style="text-align: left;">代码如下,完全是RTOS的线程在跑。先苦后甜,忙乎大半天,到最后了,其实真需要写的代码工作量不大。</div>

<div style="text-align: left;">
<pre>
<code class="language-cpp">#include "app_task.h"

#include &lt;zephyr/logging/log.h&gt;

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;
}
</code></pre>

<p>&nbsp;</p>
</div>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2023-11-15 07:49

<p>需要写的代码工作量确实不大,方便</p>

damiaa 发表于 2023-11-21 09:02

<p>开发环境的搭建麻烦,可能还要梯子。<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smile.gif" width="48" /></p>
页: [1]
查看完整版本: 【nRF7002-DK Wi-Fi® 6开发套件评测】#5 基于nRF7002开发matter协议入门