nRF Connect SDK安装与入门
本文更新日期:2024.10.29
nRF Connect SDK,简称NCS,是Nordic最新的SDK平台。该平台支持Nordic所有产品线的所有技术,从射频的角度主要分为以下三个部分:
- 短距离2.4G MCU:BLE(含主机、从机、主从一体、多主多从、BLE MESH、AoA/AoD蓝牙测向、LE Audio、 PAwR与ESL),OpenThread,2.4G私有协议,Zigbee。
- Wi-Fi收发器 :目前是RF700x系列的Wi-Fi收发器,支持低功耗双频Wi-Fi6。不含CPU,需要搭配上述2.4G MCU或者Linux主机当作主控使用,QSPI/SPI接口。支持Wi-Fi蓝牙共存。
- 长距离蜂窝:nRF91系列,支持CAT-NB1(NB-IoT)和CAT-M1的SiP(系统级封装),全球多国运营商认证。低功耗小尺寸,内部CPU和外设开放,直接一颗完成产品开发,无需外挂MCU。
除此之外,软件上还支持Matter,HomeKit,Apple FindMy,Google FindMy等物联网协议;硬件上还支持Nordic的2.4G无线功率放大器和电源管理芯片(PMIC)。
NCS的开发环境是跨平台的(Windows/Linux/OSX),其运行环境是Zephyr系统。Zephyr系统是Linux基金会维护的一个开源项目,目前已经支持许多的MCU和SoC。除了Zephyr ROTS之外,还有很多中间件和库,以及现成的硬件驱动。Zephyr系统也易于扩展,可以通过CMake添加你需要的其他库和源码。
NCS支持许多连接方式,除了Zephyr本身支持的(BLE, IPv6, TCP/IP, UDP, LoRa and LoRaWAN),还有Nordic增加的(ANT, Bluetooth Mesh, Apple Find My, LTE-M/NB-IoT/GPS, DECT NR+, Matter, Amazon Sidewalk, Thread, Wi-Fi)。
注:Nordic目前没有支持LoRa的硬件
NCS中也提供了镜像分区、配置存储、文件系统、固件升级等功能。支持蓝牙、TCP/IP、串口、USB等多种方式传输。固件为双区镜像存储,支持版本回滚。无需开发者再从底层进行DFU(Device Firmware Update)开发。
NCS中也有许多例程。其中有Zephyr自带的一些基础例程,如线程、线程间通讯、TCP/UDP;也有Nordic提供的较为复杂的例程,如BLE键鼠、蓝牙多连接、Matter例程等。在参考例程时,注意也要阅读NCS官网针对每个例程提供的文档。
更多信息可参考:
1. 简介
本节将会详细介绍如何在一台Windows 11的电脑上安装NCS开发环境(Windows 10也适用),包含NCS、编译器以及其他工具。其他平台的安装也是类似的,参考好官网英文教程即可。
需要安装的内容列表:
序号 | 软件 | 分类 | 用途 |
---|---|---|---|
1 | Visual Studio Code | 编辑器 | 代码文本编辑器,并且通过安装插件的方式为其他开发调试工具提供可视化界面 |
2 | nRF Command Line Tools | 命令行工具 | nrfjprog命令行烧录工具 |
3 | nRF Util | 命令行工具 | 更高级的命令行工具,类似于包管理器,可以安装各种子命令。包括烧录、管理toolchain/SDK、DFU、BLE抓包、蜂窝ModemTrace |
4 | nRF Connect for Desktop | 桌面工具 | 桌面工具集合,含SDK安装器、功耗评估、射频抓包、串口助手等工具 |
5 | NCS Toolchain | 编译工具链 | 一个独立的工具链文件夹,含Git、CMake、Python、Ninja、GCC等工具,与你电脑上已经安装的环境不冲突 |
6 | NCS | SDK源码包 | 含nRF产品驱动包、内核、第三方库等代码和编译配置文件等 |
2. 下载安装包并进行安装
上述列表中1~4号软件都可以自行安装,点击表格中的链接进入官网,下载安装后可以直接双击安装。安装路径需要最好无中文、空格,且文件夹层数不要太深。nrfutil需要添加到PATH环境变量。
其中有些软件不是安装完就能工作,还需要连网下载其他功能。如果工作环境不能连网,有离线安装的需求,请参考:
- nrfutil离线安装方法
- nRF Connect for Desktop离线安装方法
- nRF Connect for VS Code插件离线安装方法(待补充)
VS Code的安装这里不做介绍。VS Code的插件可以在VS Code插件市场搜索nRF Connect for VS Code Extension pack来一次性安装所有需要的插件。
Nordic的工具安装方式是类似的。下图仅示例nRF Connect for Desktop的下载方式:
3. Toolchain和SDK
Toolchain和SDK是两个独立的文件夹。其中,工具链可以直接自动下载,下载完毕后就不要去改动里面的东西了。
SDK也可以自动下载,SDK是由多个git仓库组成的,其中manifest是nrf仓库。因此SDK也可以手动拉取,下载完后也可以用git去升级版本。
3.1. 自动安装工具链和SDK
下面提供两种自动安装的方式:
利用VS Code自动安装[点击]
利用VS Code自动安装
(1)安装VS Code插件
打开VS Code,在插件中心搜索nRF Connect for VS Code Extension Pack,这个插件包会自动安装其他nRF Connect 所需的VS Code插件。
(2)安装Toolchain
在插件的Welcome界面,选择安装新的Toolchain
Toolchain的版本号与你想安装的SDK的版本号保持一致即可。
这种方法下载的各个版本的toolchain压缩包会放在${HOME}/ncs/toolchains
目录下(在Windows上是C:\\ncs\toolchains\
)。
然后,我们在VS Code中,可以设置默认的Toolchain:
Toolchain文件夹中已经安装了我们需要的各种工具,并且这些工具不会被添加到你的电脑上PATH环境变量中。这样就可以防止工具链中的软件和你电脑上已经安装的同名软件产生冲突(如Python)。
要想使用这个Toolchain中的工具,需要用单独的命令行环境。这个环境我们后面会经常用到:
如何确定当前终端中所用的工具是toolchains文件夹里,而不是PC里其他位置安装的?
在Linux中,可以用
which
命令查看某个软件的路径:
也可以用
echo $PATH
命令查看PATH环境变量。每个终端打开时,nRF Connect会自动修改当前终端的环境变量。类似地,在Windows PowerShell环境中,可以用
where
命令来查看一个软件的位置。
然后用$env:PATH
查看环境变量。
(3)安装SDK
你可以仿照上面安装Toolchain的方式来安装SDK:在VS Code插件的Welcome界面,选择想要安装的SDK进行安装。
也可以手动通过命令行安装。在刚刚打开的nRF Connect命令行中,找到想要安装SDK的位置,执行以下步骤:
- 在一个无中文、无空格的合适路径下打开终端(powershell或bash):
#创建并进入文件夹
mkdir ncs
cd ncs
# 初始化仓库(从github拉取)
west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.6.0
# 也可选择其他分支或tag,如:
# west init -m https://github.com/nrfconnect/sdk-nrf --mr main
# 但通常不建议用户使用main分支
- 这一步如果下载失败想重新下载,需要把创建的ncs文件夹下的所有内容删除干净,尤其是
.west
隐藏文件夹。然后再次执行west init
即可;- 如果网络实在差,可以从百度网盘下载,见《开发你的第一个nRF Connect SDK(NCS)/Zephyr应用程序》 - iini - 博客园 (cnblogs.com)
- 更新仓库
#更新仓库
west update
由于国内网络原因,这一步也经常失败,但是没关系,每次
west update
都能下载一点点,如果失败了,就重复west update
就行了。不需要像west init
失败一样删除干净重新下载。
- 导出Zephyr CMake package,便于CMake自动识别SDK的路径
后续以SDK中的例程为模板建立新工程时,就是用这个来找SDK的位置。
west zephyr-export
利用nRF Connect for Desktop自动安装[点击]
利用nRF Connect for Desktop自动安装
打开刚刚安装的nRF Connect for Desktop软件,找到Toolchain Manager,Install然后Open。
打开后,先在SETTINGS中选择自己想要存放NCS和toolchains的位置:
然后,在SDK ENVIRONMENTS中选择想安装的SDK版本进行安装(如①)。由于是从Github拉取,可能会要很久。安装完毕后,可打开VS Code(如②)。也可以在对应目录下打开终端(如③④)。
点击“打开VS Code”,它会弹窗提示,帮你自动安装VS Code的nRF Connect插件包,如下图:
【重要】检查安装是否完整
由于墙的存在,即使没有任何报错,SDK很有可能安装是不完整的。不过不必担心toolchain不完整,因为toolchain不完整的时候会报错。
这时,需要在SDK的目录下打开命令行。但不是直接打开,因为直接打开命令行,环境变量都是PATH。而是要从上图的“Open command prompt”来打开命令行,这时,打开的命令行中的环境变量是指向Toolchain文件夹的。
打开后,输入west update
。NCS是由多个Github上的仓库组成的,此命令会依次pull这些仓库,如果有文件缺失,就能从命令行的输出看出来。
如果某些仓库pull失败,就继续不断重复执行west update
,因为它是可以断点继续下载的。直到命令不报错为止,则说明仓库全部拉取完毕。
最后执行west zephyr-export
,此命令会让工具链中的CMake记住SDK的位置。
3.2. 手动拉取或者更新SDK
手动安装和自动安装的SDK是一样的。如果有新版本SDK出来,想切换到新版本,都可以按照以下步骤操作:
(1)确保SDK中的git仓库状态均为Clean
这意味着,开发者平时不要随便去改SDK中的任何代码。也不要往里添加任何内容。但是编译例程是没问题的,因为例程的默认编译目录build/
是被.gitignore
忽略掉的。
# 此命令可查看当前git仓库的状态
git status
但是NCS中的仓库很多。也可以用VS Code打开整个NCS,用git界面图形化查看是否每个仓库均为clean。
(2)检查manifest有无新版本
NCS中,nrf为主仓库,nrf的版本即为整个SDK的版本
# 查看nfr仓库下有多少版本
cd nrf
git pull
git tag # 按键盘上下键翻阅,按q退出
切换到自己想要的版本
# 检出想要的nrf版本
git checkout v2.6.0
# 更新nrf之外的整个NCS仓库
west update
4. 打开一个例程
从VS Code 的一个全新窗口,选择打开文件夹:
含有例程的目录:
NCS |-- nrf | |-- applications/ # Nordic商业级例程 | |-- samples/ # Nordic外设、蓝牙、LTE等例程 | |-- tests/ # 组件API测试例程 `-- zephyr |-- samples # Zephyr Kernel、各类板子、各类传感器芯片例程 `-- tests # 组件API测试例程
zephyr/samples/
中有RTOS的组件例程、Zephyr支持的各类厂商的板卡例程、各类传感器的例程等,其中也有蓝牙例程。
zephyr/tests/
中有全部的API测试例程。
nrf
仓库的目录结构仿造zephyr
仓库,也有samples/
和tests/
目录。samples/
中有Nordic提供的软件库例程、Zephyr未收录的例程(如 nRF9160的LTE)等。
我们选择一个蓝牙例程,nrf/samples/bluetooth/peripheral_uart
,并打开文件夹。
打开后,在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://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/applications.html
Nordic例程:https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples.html
Zephyr例程:https://docs.nordicsemi.com/bundle/ncs-latest/page/zephyr/samples/index.html
此外,还有一些隐藏例程不会出现在这个界面,但是可供参考:
${NCS}/modules/hal/nordic/nrfx/samples/src/
: NRFX外设驱动库例程。如果用户不想用、或者Zephyr没有提供某些外设的标准驱动,则可以使用NRFX驱动,其用法和老的nRF5 SDK基本一致。${NCS}/zephyr/tests
:zephyr所有的API的测试用例。如果你不知道某个Zephyr API怎么用,可以从这里面找。
选择自己新建例程的父目录(我这里是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。
编译命令示例:
west build -d build -b nrf52840dk_nrf52840 -p -- -DCONF_FILE="prj.conf" # -d 指定编译目录为./build # -b 板子为nrf52840dk_nrf52840 # -p 表示pristine build,全部重新编译。 # -- 之后可以添加CMake选项。如-D表示设置CMake变量。 # -DCONF_FILE等价于在CMakeLists.txt中写 set(CONF_FILE prj.conf)
更多用法:
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
按钮触发烧录动作:
也可以通过命令行进行烧录:
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。
要查看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中,先scan搜索附近蓝牙。scan按钮一开始是三角形,点击开始扫描后,变成方形。
扫到设备后,再连接:
开发板接收数据
可以在串口看到数据:
开发板发送数据
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. 阅读代码、跳转与搜索
当一个工程编译完毕后,工程中的函数与变量、Kconfig配置、设备树都是可以ctrl+鼠标左键点击跳转到定义的。
此外,有时还会有搜索代码的需求。但是,工程文件夹里的代码只是所有参与编译的代码的一小部分,大部分代码都位于SDK中,不方便搜索。
这时,可以考虑把SDK和当前工程文件夹添加到一起,在VS Code中形成同一个workspace:
然后,就可以在nRF插件中进行浏览了:
Source File中是所有参与编译的源码。其中Application下的是当前工程中的源码;nRF Connect SDK下的是NCS中参与编译的源码(不参与编译的不会在里面);Generated下是工具链自动生成的一些代码(中断向量表、Kconfig转换成宏等等)。
由于我们前面已经把SDK放进了VS Code workspace,所以可以直接搜索代码:
点击上面的搜索按钮后,会自动跳转到VS Code搜索界面,并且已经自动填充好文件搜索范围:
11. 官方资料
Nordic TechDocs资料中心
目前最新的资料中心,可以通过技术或产品系列进行分类,查找想要的资料。芯片数据手册(Specification)、开发板说明都可以在这里查看。
记得进入NCS文档后,第一步先选择文档的版本与自己使用的NCS版本一致:
从2024.6.18开始,NCS官网和Infocenter都会下线。所有开发资料都会集中在TechDocs。上图中我们可以看到,除了各个产品系列的介绍之外,下方有nRF Connect SDK和老的nRF5 SDK的资料,点击跳转进去即可。
关于文档的结构,可以展开下面章节中被折叠的信息来了解。
NCS官网
此网站已于2024.6.18被Nordic资料中心替代
展开查看
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旧版资料中心(Info Center)
此网站已于2024.6.18被Nordic资料中心替代
如果要查询老的nRF5 SDK资料,看:https://docs.nordicsemi.com/bundle/sdk_nrf5_v17.1.0/page/index.html
展开查看
https://infocenter.nordicsemi.com/index.jsp ![](https://img2024.cnblogs.com/blog/3028998/202406/3028998-20240618103019099-1297214744.png) 也可以下载到芯片数据手册(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。
Nordic DevAcademy官方课程
https://academy.nordicsemi.com/
类似于慕课的网站,目前有NCS,BLE、Wi-Fi、Cellular等课程。有视频结合题目,适合英文好的读者去学习,是非常适合入门的课程。