安装nRF-Connect-SDK
nRF Connect SDK,简称NCS,是Nordic最新的SDK平台,该平台支持Nordic所有产品线的所有技术,包括BLE,AoA,NFC,蜂窝网与GPS,Wi-Fi,2.4G,蓝牙Mesh,Zigbee,Thread,Matter, Homekit, FindMy等。
NCS是跨平台的(Windows/Linux/OSX),其基础是Zephyr系统。Zephyr系统是Linux基金会维护的一个项目,除了一个基本的Zephyr RTOS之外,还有很多方便的第三方软件库,像是MCUBoot、TCP/UDP/MQTT/TLS等网络库等等。
更多信息可参考:
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/installation.html
开发你的第一个nRF Connect SDK(NCS)/Zephyr应用程序 - iini - 博客园 (cnblogs.com)
1. 简介
本节将会详细介绍如何在一台Windows 11的电脑上安装NCS开发环境(Windows 10也适用),包含NCS、编译器以及其他工具。如果你已经安装好NCS开发环境,可以跳过本节。
需要安装的内容列表:
序号 | 软件 | 分类 | 用途 |
---|---|---|---|
1 | Visual Studio Code | 编辑器 | 代码文本编辑器,并且通过安装插件的方式为其他开发调试工具提供可视化界面 |
2 | nRF Command Line Tools | 工具链 | Jlink驱动、nrfjprog等命令行烧录工具 |
3 | nRF Connect for Desktop | 桌面工具 | 桌面工具集合,含SDK安装器、功耗评估、射频抓包等工具 |
4 | Git | 工具链 | 版本管理工具 |
5 | Python 3.9 | 工具链 | 为编译套件的python脚本提供运行环境 |
6 | Ninja | 工具链 | 快速构建工具(类似make) |
7 | CMake | 工具链 | 工程管理器,根据配置生成.ninja或Makefile文件的工具 |
8 | Zephyr SDK | 工具链 | 交叉编译工具链(编译器、链接器等) |
9 | NCS | SDK源码包 | 含nRF产品驱动包、内核、第三方库等代码和编译配置文件等 |
10 | VS Code: nRF Connect插件包 | 编辑器 | 在VS Code中为NCS功能提供可视化 |
2. 下载安装包并进行安装
上述列表中1~3号软件都是使用安装包的形式进行安装,点击表格中的链接进入官网,下载安装后可以直接双击安装。安装路径需要无中文、空格或“-”,“_”以外的特殊字符。
VS Code的安装,这里不做介绍,一步一步安装即可。剩余的两个Nordic的工具,安装方式是类似的。下图仅示例nRF Connect for Desktop的下载方式:
![image-20221122213145436](/jayant97.github.io/imgs/安装nRF-Connect-SDK.assets/image-20221122213145436.png)
3. 安装SDK和工具链
3.1. 自动安装与手动安装的区别
列表中4~10号软件有2种安装方式,自动安装和手动安装。
- 自动安装(推荐):自动下载SDK和工具链,所有工具链都放在一个文件夹内,编译时,只使用此文件夹内的工具链。工具链与电脑上本身安装的软件不冲突;
- 手动安装:只拉取SDK,工具链单独安装到电脑里,并添加到PATH环境变量,编译时直接用PATH环境变量。
3.1. 自动安装
打开刚刚安装的nRF Connect for Desktop软件,找到Toolchain Manager,Install然后Open。
![image-20221122214549553](/jayant97.github.io/imgs/安装nRF-Connect-SDK.assets/image-20221122214549553.png)
打开后,先在SETTINGS中选择自己想要存放NCS和toolchains的位置:
![image-20221122215033170](/jayant97.github.io/imgs/安装nRF-Connect-SDK.assets/image-20221122215033170.png)
然后,在SDK ENVIRONMENTS中选择想安装的SDK版本进行安装(如①)。由于是从Github拉取,可能会要很久。安装完毕后,可打开VS Code(如②)。也可以在对应目录下打开终端(如③④)。
![image-20221122215310523](/jayant97.github.io/imgs/安装nRF-Connect-SDK.assets/image-20221122215310523.png)
点击“打开VS Code”,它会弹窗提示,帮你自动安装VS Code的nRF Connect插件包,如下图:
![image-20221123161445490](/jayant97.github.io/imgs/安装nRF-Connect-SDK.assets/image-20221123161445490.png)
【重要】检查安装是否完整
由于墙的存在,即使没有任何报错,SDK很有可能安装是不完整的。不过不必担心toolchain不完整,因为toolchain不完整的时候会报错。
这时,需要在SDK的目录下打开命令行。但不是直接打开,因为直接打开命令行,环境变量都是PATH。而是要从上图的“Open command prompt”来打开命令行,这时,打开的命令行中的环境变量是指向Toolchain文件夹的。
打开后,输入west update
。NCS是由多个Github上的仓库组成的,此命令会依次pull这些仓库,如果有文件缺失,就能从命令行的输出看出来。
如果某些仓库pull失败,就继续不断重复执行west update
,因为它是可以断点继续下载的。直到命令不报错为止,则说明仓库全部拉取完毕。
最后执行west zephyr-export
,此命令会让工具链中的CMake记住SDK的位置。
3.2. 手动安装方式
安装过程需要网络代理(注意,命令行终端也需要被代理)
(1)【Windows专用】安装choco
choco
是一个包管理工具,类似于Ubuntu中的apt-get
,可以通过命令行安装软件工具,并自动添加到全局PATH环境变量中。
首先右键单击开始菜单,然后打开管理员终端,输入以下命令:
# 设置脚本执行权限 |
测试是否安装成功:
choco |
(2)利用choco安装其他工具
部分工具也可自己去官网下载,并用安装包安装,注意安装时要勾选“添加到PATH环境变量”。
# 设置choco |
Git也建议从官网安装,同时勾选安装Git bash。可以让你在windows上使用bash终端,而不是powershell。
![]()
(3)安装GN工具(可选)
GN工具是开发Matter所需的工具。
从GN网站下载编译好的Windows压缩包(Getting a binary),推荐在用户目录(C:\Users\<用户名>
)下解压。并且添加到PATH环境变量即可。
如果你的Windows用户名是中文,那还是换个无中文的目录。
(4)安装west
west是一个多仓库管理工具(类似Android的repo),支持添加自定义插件。在NCS中,除了可以管理NCS仓库外,也通过插件实现了板卡选择、触发编译动作、触发flash烧写的功能。
利用Python的pip进行安装
pip3 install west |
(5)安装NCS
nRF Connect SDK前面已经介绍过,含驱动、内核以及第三方库的源码。
- 在一个无中文、无空格的合适路径下打开终端(powershell或bash):
#创建并进入文件夹 |
- 这一步如果下载失败想重新下载,需要把创建的ncs文件夹下的所有内容删除干净,尤其是
.west
隐藏文件夹。然后再次执行west init
即可;- 如果网络实在差,可以从百度网盘下载,见《开发你的第一个nRF Connect SDK(NCS)/Zephyr应用程序》 - iini - 博客园 (cnblogs.com)
- 更新仓库
#更新仓库 |
由于国内网络原因,这一步也经常失败,但是没关系,每次
west update
都能下载一点点,如果失败了,就重复west update
就行了。不需要像west init
失败一样删除干净重新下载。
- 导出Zephyr CMake package,便于CMake自动识别SDK的路径,后续生成工程
west zephyr-export |
- 安装额外的python依赖
安装python依赖之前,还需要安装”Microsoft Visual C++ Build Tools 14.0”或更高版本:Microsoft C++ Build Tools - Visual Studio,用来编译这些python工具。在上述微软链接下载,会获得一个VS安装工具。只在Workloads栏里选择 **”Desktop Development with C++”**,然后安装即可。
安装python依赖包:
pip3 install -r zephyr/scripts/requirements.txt |
(6)安装Zephyr SDK工具链
Zephyr SDK是编译器、链接器等工具。建议放在用户目录下(同样的,如果你的用户名是中文,还是换个目录吧)。
下方展示了通过Poweshell命令下载Zephyr SDK的方式。其中Zephyr工具链的版本是我安装时使用的版本。你需要获取最新的版本,最新版本的下载地址可从 Zephyr SDK — Zephyr Project Documentation 获取。
# 进入到用户目录(c:\Users\[用户名]) |
注意:
setup.cmd
只需执行一次。如果改变了安装位置,需要再次执行。- Zephyr SDK安装完成后,会发现:如果在前面安装了ncs的目录下执行
west --help
会比其他目录下执行west --help
多出一些扩展指令,如build
,board
等等。这是因为NCS中的.west
文件夹的配置了Zephyer的base路径,提供了这个仓库独有的插件。这些扩展的指令就是调用了插件进行编译、调试、烧写等工作。
为了让其他目录下也能使用Zephyr工具,需要设置全局环境变量:
在Windows环境变量中新建ZEPHYR_BASE
环境变量,并把其值设置为ncs
安装目录下的zephyr
目录的路径即可。(这个效果和执行一次
ncs
目录下的zephyr/zephyr-env.cmd
脚本是一样的,但这个脚本设置环境变量只是临时生效,关闭终端再另开一个终端就不起作用了。而设置全局环境变量是永久生效。)
(7)安装VS Code插件
打开VS Code,在插件中心搜索nRF Connect for VS Code Extension Pack,这个插件包会自动安装其他nRF Connect 所需的VS Code插件。
![image-20221122220619736](/jayant97.github.io/imgs/安装nRF-Connect-SDK.assets/image-20221122220619736.png)
可以在VS Code的设置中,对插件进行单独的设置,例如可以设置使用工具链的路径。可以对全局进行设置(USER),也可以单独对某个工作区进行设置(WORKSPACE)。
由于我们是手动安装的,已经设置了
PATH
环境变量。所以把插件设置的工具链路径设为PATH
即可。
3.3. SDK更新
手动安装和自动安装的SDK是一样的。如果有新版本SDK出来,想切换到新版本,都可以按照以下步骤操作:
确保SDK中的git仓库状态均为Clean
这意味着,客户平时不要随便去改SDK中的任何代码。也不要往里添加任何内容。但是编译例程是没问题的,因为例程编译目录build*
是被.gitignore
忽略掉的。
# 此命令可查看当前git仓库的状态 |
但是NCS中的仓库很多。也可以用VS Code打开整个NCS,用git界面图形化查看是否每个仓库均为clean。
检查manifest有无新版本
NCS中,nrf为主仓库,nrf的版本即为整个SDK的版本
# 查看nfr仓库下有多少版本 |
切换到自己想要的版本
# 检出想要的版本 |
4. 打开一个例程
从VS Code 的一个全新窗口,选择打开文件夹:
含有例程的目录:
NCS
|-- nrf
| |-- applications/ # Nordic商业级例程
| |-- samples/ # Nordic外设、蓝牙、LTE等例程
| |-- tests/ # 模块测试例程
`-- zephyr
|-- samples # Zephyr Kernel、各类板子、各类传感器芯片例程
`-- tests # 模块测试例程
zephyr/samples/
中有RTOS的组件例程、Zephyr支持的各类厂商的板卡例程、各类传感器的例程等,其中也有蓝牙例程。
zephyr/tests/
中有全部的API测试例程。
nrf
仓库的目录结构仿造zephyr
仓库,也有samples/
和tests/
目录。samples/
中有Nordic提供的软件库例程、Zephyr未收录的例程(如 nRF9160的LTE)等。
我们选择一个蓝牙例程,nrf/samples/bluetooth/peripheral_uart
,并打开文件夹。这只是在VS Code 中打开,打开后,nRF Connect 插件会检测到这是一个Application文件夹,询问你是否要把它加入到nRF Connect插件的Application中,点击Yes即可:
打开后,在VS Code资源管理器中可以看到文件夹视图:
另外,也可以在Application中看到这个例程:
5. 以例程为模板创建新工程
上一节讲解了如何打开一个例程。
如果我们只是打开例程,例程的文件夹还是在ncs仓库内部,受到ncs的git仓库的管理。如果想自己开发项目,并用git管理版本,就需要创建新工程。
NCS支持把例程当作模板,复制到NCS外部,并创建新工程。
5.1. 创建新工程
NCS支持以例程作为模板,复制并创建新的工程。这也是Nordic非常推荐的方式。
首先在VS Code中打开一个新窗口
在 VS Code中,选择左侧nRF Connect for VS Code插件,进入Welcome页面,先检查toolchain和SDK是否已经检测到。
然后点击Create a new application
创建新工程。
选择“Copy a sample”
选择自己想要拷贝的例程,支持文字搜索:
这里的例程列表,和第4节中提到的目录结构是一致的。同时也和SDK官网的例程说明是保持一致的,每个例程都有其对应的说明文档:
Nordic商业级应用:https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/applications.html
Nordic例程:https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/samples.html
Zephyr例程:https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/samples/index.html
选择自己新建例程的父目录(我这里是Linux电脑的路径):
选择自己新建例程的文件夹名称:
然后就可以打开新的工程。
5.2. 使用git跟踪你的代码修改
如果你从没用过git,需要先配置用户名和邮箱。这个用户名和邮箱不是登陆什么网站用的,而是一个签名,在提交代码时用于标记这段代码是谁提交的。这个配置存在你电脑的本地,并且是全局的,对所有git仓库都有效。
git config --global user.name "Jayant.Tang"
git config --global user.email "jayant.tang@nordicsemi.no"
新建的工程都会自动初始化git仓库,我们可以看到.gitignore文件:
你可以把.vscode/
添加到其中
如果你不熟悉Git以及Git在VS Code中的使用,强烈建议去学习一下,它极大的方便了代码的管理。
例如:如果安装了git history插件,就可以查看提交历史:
Git History提供了很方便的视图,可以看到每次commit都改动了哪些代码和配置(左侧是旧的,右侧是新的):
更多Git的使用,可以去网上了解其他教程。本文不再赘述。
6. 编译工程
6.1. 创建一个编译目标(Build Target)
所谓编译目标就是在同一套代码下,可能有不同的配置项(Debug/Release,不同的优化级别等等),编译出不同的可执行文件。一个项目下可以创建多个编译目标。
Board
创建Build,需要选择自己使用的板子,Zephyr自带各个厂商的开发板配置。
下图中,Board下拉框是用来选板子的,下方还有三个过滤器,来过滤可选的板子:
Compatible boards:本例程适配的板子,如果选择这些板子,不需要任何修改就可以烧录进去使用
Nordic boards:Nordic 出品的官方开发板,以及一些Nordic的demo板
All boards:Zephyr 支持的所有开发板
Nordic开发板board配置的命名规则:
例如:
nrf52840dk_nrf52840
,是说这个板子的配置是为 nrf52840dk 这块开发板上的 nrf52840 这颗 MCU 创建的,会记录这个MCU的外设地址,以及此MCU连接的外部硬件的信息(如SPI Flash)。例如:
nrf9160dk_nrf9160
和nrf9160dk_nrf52840
,都是nrf9160dk这块开发板的配置。但是这块开发板上有两颗MCU/SoC,一颗是9160 SiP,另一颗是52840。所以有两个配置可选,分别为这两颗MCU/SoC编译固件。例如:
nrf5340dk_nrf5340_cpuapp
和nrf5340dk_nrf5340_cpunet
,都是nrf5340dk这块板子的配置,并且这块板子上只有nRF5340这一颗主控。但是nRF5340是一颗双核MCU,所以,可以有两种配置来区分两个核。这两个核的固件是分开运行的,因此编译时也是分别编译的。例如:
nrf5340dk_nrf5340_cpuapp
和nrf5340dk_nrf5340_cpuapp_ns
,都是nrf5340dk开发板上,nrf5340芯片的应用核的配置。但是,这颗应用核使用的CPU是Cortex-M33,基于Arm V8架构,提供了TrustZone的安全保护技术,同样的一个外设寄存器,可以有安全(Secure)和非安全(Non-Secure)两个地址,这样可以把安全应用和非安全应用隔离开来。因此,这两个board配置的不同之处,就是从安全地址还是非安全地址去访问芯片上的外设资源。例如:
nrf52833dk_nrf52820
。这块开发板上只有nrf52833这一块主控。但是由于nRF52833和nRF52820同属nRF52系列,52820上的资源是52833的子集,并且Nordic并未单独为52820制作开发板,因此可以用52833来模拟52820。此配置文件限制了52833上的硬件资源,使其表现和52820相同。更详细的信息牵扯到DeviceTree,可参考:【详解Zephyr设备树与设备驱动模型】
Configuation
选用的Kconfig配置。Zephyr的Kconfig菜单中,很多配置项都是有默认值的。项目内的prj.conf
配置文件的作用是,对原始的默认配置进行覆盖。通常只选prj.conf
即可,如果有不一样的,可以参考例程的说明文档。
Kconfig fragments
其实和prj.conf
差不多,相当于对prj.conf
的一个补充。通常,同一个例程支持很多不同的板子的情况下,prj.conf
中记录的是例程通用的配置。
而boards/xxx.conf
中记录的是某种开发板单独需要的配置。boards/
下的通常不用选,编译时会自动根据板子选择。
此外还可能有其他的配置文件可以选,说明这个例程支持不同的功能,具体需要看那个例程的文档。
Devicetree overlays
系统选择板子时,板子都会有一个device tree。这里的overlay就是当前例程对板子device tree的增、删、改。所以叫做覆盖(overlay)。默认名称是app.overlay
。boards/
目录下也可能有不同开发板对应的overlay文件。通常也不用选择,编译时会自动使用app.overlay,或者自动根据板子选择。
Extra CMake arguments
跟直接在CMakeLists.txt里面写set(xxx yyy)
定义一个宏的值,效果是一样的。格式是-Dxxx=yyy
,也就是在命令行中运行CMake时通过-D
进行传参。
6.2. 进行编译
新建完build target后,点击Build Configuration进行编译。
如果后续要再次编译这个target,可以在APPLICATIONS栏选中自己要构建的工程和target。然后在ACTIONS栏通过build按钮进行项目的构建。
按Build旁的圆圈箭头按钮,可以全部重新编译。
补充:命令行编译
按 “ CTRL + ` “,可以呼出终端。点击“+”号右边的下拉箭头,选择nRF Connect:
这样打开的终端,其环境变量指向前面安装的toolchain
# 利用当前已经创建的build target进行编译
west build更多用法:
west build -h编译时可以指定项目根目录、build目录、板子名称、配置文件、overlay文件等。你可以先用上面的图形化的方式在VS Code中进行编译,然后在VS Code终端中查看这次编译的命令是什么。
7. 连接设备
nrf-connect插件,底层调用的是nrfjprog
或nrfutil
命令来连接开发板上的JLink。因此,需要通过USB线连接到JLink口。
以nRF52840DK为例,中间最大的带有贴纸的芯片为JLink主控(官方称其为Interface MCU),左侧为JLink USB口,此接口可以用来给整块板供电。
需确保左下角电源开关打开。左侧中间位置的开关置于VDD挡位,右上角开关置于DEFAULT挡位(如上图)。
对于一些有多颗MCU的开发板,注意要使用拨码开关选择自己要调试的MCU,例如nRF9160DK可选择9160和52840:
然后就可以在VS Code中识别到设备了:
如果不能自动识别到,或者很不稳定。可能是最新的底层Python工具
nrfutil
在Windows上不太稳定。可以把它改回之前的nrfjprog
:打开VS Code Settings:
搜索“Device Provider”,并改为
nrfjprog
:
8. 烧录固件
连接并成功识别到Jlink后,可以通过ACTIONS栏中的Flash
按钮触发烧录动作:
![image-20221123160139273](/jayant97.github.io/imgs/安装nRF-Connect-SDK.assets/image-20221123160139273.png)
也可以通过命令行进行烧录:
west flash |
备注:
这样直接烧录,有一部分项目可能会烧写失败,显示:
这是因为,Nordic的MCU中通常都有一个用于存储用户信息的寄存器(UICR),可以认为是一块特殊的flash区域,存储了客户自己的加密密钥、引脚配置等产品信息。由于信息安全的原因,是不允许在保持UICR不变的情况下烧写新的固件的。相关资料,可以参考Nordic芯片数据手册的UICR章节。
这种情况下只能全片擦除然后再烧录,点击Flash右边的按钮:
或者使用命令行方式:
west flash --force --erase此外,还有一种可能是,调试接口启用了保护,需要recover这颗芯片来解除保护。
通常,右下角会有弹窗来问你是否要recover,就选择Yes就好。
如果没有效果,也可以用命令行来recover
nrfjprog --recover如果是nRF5340这种双核芯片,那么网络核也要recover
nrfjprog --recover --coprocessor CP_NETWORK
9. 运行并测试
连接的设备,可以看到Jlink上的主控芯片、串口以及RTT。
这里的串口是MCU上真实的物理串口,在开发板上通过PCB走线连接到Jlink,然后Jlink把这个串口转化为USB虚拟串口。
新款开发板,板载的Jlink是拿5340做的,这种新款开发板有两个USB虚拟串口:
但是对于52840DK来说,开发板上只连了一个串口,另一个是空的。具体是哪个?要试一下,因为可能USB枚举的顺序不一样。
对于5340DK, 7002DK来说,两个串口分别对应Application Core和Network Core的日志输出。
9.2. 连接串口
点击串口,选择波特率,即可打开串口。串口接收的信息在Terminal展示:
这个串口工具类似于Putty,按下键盘的按键就立即发送出去一个字符,不会显示自己发出了什么。便于在这个串口上运行命令行终端之类的,这也是Zephyr所支持的。
9.3. 连接RTT
RTT是Segger提供的日志调试手段,全称Real Time Transmit。MCU将日志打印到内部缓存中,然后利用Jlink的高速通道,把日志打印到电脑上。这个方法不需要占用串口外设,而且速度极快,对CPU运行影响小。
大多数例程的默认日志输出口是串口。但本例程是蓝牙串口透传,串口需要传输用户数据,因此日志的默认输出就是RTT。
查看RTT日志输出的相关配置:
打开工程根目录下的
.prj
文件:
可以看到:
CONFIG_LOG=y # 启用日志系统
CONFIG_USE_SEGGER_RTT=y # 启用RTT
CONFIG_LOG_BACKEND_RTT=y # 日志后端选用RTT
CONFIG_LOG_BACKEND_UART=n # 日志后端不选用串口
CONFIG_LOG_PRINTK=n # 不启用PRINTK日志
如下图连接RTT:
9.4. 测试peripheral_uart例程
一般来说,需要两块开发板,一块烧peripheral_uart
,一块烧central_uart
。两块开发板上电后会自动连接。从一个开发板串口输入的数据,会从另一个开发板输出。
但是这里我们只有一块开发板,那么BLE central我们就用手机。iOS应用商店可以下载nRF Connect
,安卓可以在谷歌商店下载,或者直接去Github下载APK。
通过BLE连接设备
在nRF Connect APP中,先扫描,扫到设备后,再连接:
开发板接收数据
可以在串口看到数据:
开发板发送数据
BLE协议是Client-Server架构。BLE协议规定,从机作为Server,只能被Client读、写上面的属性。默认情况下不能主动发消息到Client。除非Client使能了Notify的功能,Server才能Nortify到Client。更多信息,大家可以搜索CCCD(Client Characteristic Configuration Descriptor)。这里,就需要点亮TX属性的CCCD:
然后在串口中通过键盘输入内容:hello+回车。屏幕上不会显示东西,但是按键确实会发送出去。
这个串口工具类似于Putty,按下键盘的按键就立即发送出去一个字符,不会在屏幕上显示自己发出了什么。
这里之所以要加回车,是因为例程代码就是这么写的。在串口回调函数内,检测到回车,才会把串口数据打包从蓝牙发出。
至此,我们完成了在nRF52840DK上的peripheral_uart
例程的编译、烧录与运行测试。
10. 官方资料
NCS官网
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/index.html
进入官网,首先看到右上角可以选择文档的版本,需要与SDK的版本对应。
然后可以看到中间的一排标签页:
Zephyr Project:是Zephyr官方文档的一个镜像,包含Zephyr RTOS内核服务、操作系统API、各种驱动、协议支持以及它们的例程文档。一些比较通用的功能的如日志、Flash存储、线程间通信等功能的文档都在这里面。它对应的是NCS中的
zephyr
文件夹。nRF Connect SDK: 是Nordic在Zephyr系统上扩展的各种Nordic独有的库、驱动和例程的文档。里面大多数是一些Nordic独有的技术,对应的是NCS中的
nrf
文件夹。nrfx与nrfxlib:Nordic的外设驱动库,是最接近寄存器操作的一层,和目前已经停止维护的的nRF5 SDK中的nrfx几乎是一样的。在Zephyr中,通常应用层只需调用Zephyr的标准API,Nordic提供的底层驱动会把nrfxlib和一些寄存器操作封装成Zephyr的标准API。通常,只有客户在对MCU外设功能进行较为深入的开发时,会参考到这一块的文档。
MCUboot:MCUboot是一个开源的第三方安全bootloader,支持很多系统和平台,Zephyr只是其中之一。很多支持OTA的例程基本都是使用MCUboot
Trust Firmware-M:ARM提出了平台安全架构(Platform Security Architecture, PSA),意思就是说,客户自己开发软件容易有安全漏洞,因此运行环境应分为安全环境(SPE)和非安全环境(NSPE)。客户开发的程序,属于非安全环境。安全环境的程序,由厂商提供,主要提供一些安全存储、安全启动之类的API给客户的非安全环境来调用。Trust Firmware-M(TFM)是安全环境的一个样板固件。 如果你使用了nRF5340或者nRF9160这种带有ARM v8架构的主控平台,则在编译选板子时,都可以看到
_s
或_ns
后缀。_s
的意思是说,客户直接在安全环境开发程序,安全性全由客户自己掌控。_ns
的意思是说,客户在非安全环境开发程序,编译时,Zephyr会自动把TFM一起编译进去,和客户的应用程序一起工作。对于9160来说,由于要和蜂窝modem进行交互,因此,牵扯到蜂窝网络操作的例程,都必须选择nrf9160dk_nrf9160_ns
。Matter:Matter是智能家居的新标准,目的是打破厂商之间的壁垒,实现生态融合。从连接方式上讲,Matter是基于局域网IPv6的,因此,Wi-Fi和Thread都是可以作为Matter的底层的。从配网方式上讲,Matter通过BLE来传输认证信息,此外可以通过NFC或者二维码的方式,让手机快速的找到要配网的这个设备的BLE广播。此页面主要是Matter SDK的文档,并不局限于在Nordic MCU上进行开发。如果要找Matter在Nordic产品上运行的例程,还是要去nRF Connect SDK页面的Samples目录下去寻找。
Kconfig:Zephyr系统中有大量的Kconfig配置,Nordic扩展的库、驱动中也有大量Kconfig配置。如果你不知道一个Kconfig配置是干什么的,可以在这个页面进行搜索。
总之,NCS官网里面有大量的技术细节,在运行一个例程之前,一定要参照网站中该例程的说明进行操作。
Nordic资料中心
目前最新的资料中心,可以通过技术或产品系列进行分类,查找想要的资料。芯片数据手册(Specification)、开发板说明都可以在这里查看。也会导向到NCS官网。
Nordic旧版资料中心
https://infocenter.nordicsemi.com/index.jsp
也可以下载到芯片数据手册(Specification)、开发板说明、技术白皮书等。这里也有目前已停止维护的nRF5 SDK的文档。
Nordic官网
一些商业新闻和产品介绍。但是最重要的是一些工具软件、开发板原理图/PCB/BOM之类,需要在这里下载。
例如:
nRF52840DK开发板默认例程、Jlink固件、原理图等:https://www.nordicsemi.com/Products/Development-hardware/nRF52840-DK/Download?lang=en#infotabs
DevZone开发者论坛
https://devzone.nordicsemi.com/
有问题可以在上面搜索,也可以用英文提问。每天都有原厂support team查看问题并回复。Nordic注册客户,还可以提交private ticket,解决一些与代码、板子有关的问题,也可以简单审核PCB。
11. 其他推荐阅读
- 理解Zephyr编译与配置系统
- (开坑)Zephyr日志系统介绍
- 详解Zephyr设备树(DeviceTree)与驱动模型
- (开坑)Zephyr设备树与驱动应用实战——串口
- (开坑)不想用Zephyr DeviceTree?试试nrfx api