1. Home
  2. 博客

    nRF Connect SDK安装与入门

nRF Connect SDK安装与入门 2024-02-27 Jayant Tang, Nordic Semiconductor

nRF Connect SDK是Nordic最新的SDK平台,该平台支持Nordic所有产品线的所有技术,包括BLE,AoA,NFC,蜂窝网与GPS,Wi-Fi,2.4G,蓝牙Mesh,Zigbee,Thread,Matter, Homekit, FindMy等。

nRF Connect SDK 是跨平台的(Windows/Linux/OSX),其基础是Zephyr系统。Zephyr系统是Linux基金会维护的一个项目,除了一个基本的Zephyr RTOS之外,还有很多方便的第三方软件库,像是MCUBoot、TCP/UDP/MQTT/TLS等网络库等等。

更多信息可参考:

1. 简介

本节将会详细介绍如何在一台 Windows 11 的电脑上安装nRF Connect SDK开发环境(Windows 10也适用),包含nRF Connect SDK、编译器以及其他工具。如果你已经安装好nRF Connect SDK开发环境,可以跳过本节

需要安装的内容列表:

软件 分类 用途
Visual Studio Code 编辑器 代码文本编辑器,并且通过安装插件的方式为其他开发调试工具提供可视化界面
nRF Command Line Tools 工具链 Jlink驱动、nrfjprog等命令行烧录工具
nRF Connect for Desktop 桌面工具 桌面工具集合,含SDK安装器、功耗评估、射频抓包等工具
Git 工具链 版本管理工具
Python 3.9 工具链 为编译套件的python脚本提供运行环境
Ninja 工具链 快速构建工具(类似make)
CMake 工具链 工程管理器,根据配置生成.ninja或Makefile文件的工具
Zephyr SDK 工具链 交叉编译工具链(编译器、链接器等)
nRF Connect SDK SDK源码包 含nRF产品驱动包、内核、第三方库等代码和编译配置文件等
VS Code: nRF Connect插件包 编辑器 在VS Code中为nRF Connect SDK功能提供可视化

2. 下载安装包并进行安装

上述列表中1~3号软件都是使用安装包的形式进行安装,点击表格中的链接进入官网,下载安装后可以直接双击安装。安装路径需要无中文、空格或“-”,“_”以外的特殊字符。

VS Code的安装,这里不做介绍,一步一步安装即可。剩余的两个Nordic的工具,安装方式是类似的。下图仅示例nRF Connect for Desktop的下载方式:

nRF Connect SDK安装与入门

nRF Connect SDK安装与入门

“开始”菜单中安装好的工具(未完全展示)

3. 安装SDK和工具链

3.1. 安装SDK

列表中4~10号软件有2种安装方式,自动安装手动安装

  • 自动安装:自动下载SDK和工具链,所有工具链都放在一个文件夹内,编译时,只使用此文件夹内的工具链。工具链与电脑上本身安装的软件不冲突。这种方式最简单,只不过很多操作都隐含在后台了。

  • 手动安装(简易版):分别下载SDK和工具链,所有工具链都放在一个文件夹内,编译时,只使用此文件夹内的工具链。工具链与电脑上本身安装的软件不冲突。这种方式能让你更了解nRF Connect SDK开发环境各个文件的存放位置。

  • 手动安装:只拉取SDK,工具链单独安装到电脑里,并添加到PATH环境变量,编译时直接用PATH环境变量。


3.1.1 自动安装[点击]

自动安装

打开刚刚安装的nRF Connect for Desktop软件,找到Toolchain Manager,Install然后Open。

nRF Connect SDK安装与入门

打开后,先在SETTINGS中选择自己想要存放nRF Connect SDK和toolchains的位置:

nRF Connect SDK安装与入门

然后,在SDK ENVIRONMENTS中选择想安装的SDK版本进行安装(如①)。由于是从Github拉取,可能会要很久。安装完毕后,可打开VS Code(如②)。也可以在对应目录下打开终端(如③④)。

nRF Connect SDK安装与入门

点击“打开VS Code”,它会弹窗提示,帮你自动安装VS Code的nRF Connect插件包,如下图:

nRF Connect SDK安装与入门

【重要】检查安装是否完整

由于墙的存在,即使没有任何报错,SDK很有可能安装是不完整的。不过不必担心toolchain不完整,因为toolchain不完整的时候会报错。

这时,需要在SDK的目录下打开命令行。但不是直接打开,因为直接打开命令行,环境变量都是PATH。而是要从上图的“Open command prompt”来打开命令行,这时,打开的命令行中的环境变量是指向Toolchain文件夹的。

打开后,输入west update。nRF Connect SDK是由多个Github上的仓库组成的,此命令会依次pull这些仓库,如果有文件缺失,就能从命令行的输出看出来。

如果某些仓库pull失败,就继续不断重复执行west update,因为它是可以断点继续下载的。直到命令不报错为止,则说明仓库全部拉取完毕。

最后执行west zephyr-export,此命令会让工具链中的CMake记住SDK的位置。


3.1.2 手动安装(简易版)[点击]

手动安装(简易版)

安装VS Code插件

打开VS Code,在插件中心搜索nRF Connect for VS Code Extension Pack,这个插件包会自动安装其他nRF Connect 所需的VS Code插件。

nRF Connect SDK安装与入门

安装Toolchain

在插件的Welcome界面,选择安装新的Toolchain

nRF Connect SDK安装与入门

nRF Connect SDK安装与入门

Toolchain的版本号与你想安装的SDK的版本号保持一致即可。

这种方法下载的各个版本的toolchain压缩包会放在 ${HOME}/ncs/toolchains 目录下(在Windows上是 C:\\ncs\toolchains\ )。

然后,我们在VS Code中,可以设置默认的Toolchain:

nRF Connect SDK安装与入门

Toolchain文件夹中已经安装了我们需要的各种工具,并且这些工具不会被添加到你的电脑上PATH环境变量中。这样就可以防止工具链中的软件和你电脑上已经安装的同名软件产生冲突(如Python)。

要想使用这个Toolchain中的工具,需要用单独的命令行:

nRF Connect SDK安装与入门

nRF Connect SDK安装与入门

如何确定这个命令行所用的工具是toolchains里的?

在Linux中,可以用 which 命令查看某个软件的路径:

nRF Connect SDK安装与入门

也可以用 echo $PATH 命令查看PATH环境变量。 类似地,在Windows PowerShell环境中,可以用 where 命令来查看一个软件的位置。
然后用 $env:PATH 查看环境变量。

安装SDK

你可以仿照上面的方式,在VS Code插件中选择想要安装的SDK进行安装。也可以在刚刚打开的nRF Connect命令行中,找到想要安装SDK的位置,执行:

  1. 在一个无中文、无空格的合适路径下打开终端(powershell或bash):

    #创建并进入文件夹
    mkdir ncs
    cd ncs
    
    # 初始化仓库(从github拉取)
    west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.4.2
    # 也可选择其他分支或tag,如:
    # west init -m https://github.com/nrfconnect/sdk-nrf --mr main
    # 但通常不建议用户使用main分支
  • 这一步如果下载失败想重新下载,需要把创建的ncs文件夹下的所有内容删除干净,尤其是 .west 隐藏文件夹。然后再次执行 west init 即可;

  • 如果网络实在差,可以从百度网盘下载,见开发你的第一个nRF Connect SDK/Zephyr应用程序

  1. 更新仓库

    #更新仓库
    west update

    由于国内网络原因,这一步也经常失败,但是没关系,每次west update都能下载一点点,如果失败了,就重复west update就行了。不需要像west init失败一样删除干净重新下载。

  2. 导出Zephyr CMake package,便于CMake自动识别SDK的路径
    后续以SDK中的例程为模板建立新工程时,就是用这个来找SDK的位置。

    west zephyr-export

3.1.3 手动安装[点击]

手动安装

安装过程需要网络代理(注意,命令行终端也需要被代理)

【Windows专用】安装choco

choco是一个包管理工具,类似于Ubuntu中的apt-get,可以通过命令行安装软件工具,并自动添加到全局PATH环境变量中

首先右键单击开始菜单,然后打开管理员终端,输入以下命令:

# 设置脚本执行权限
Set-ExecutionPolicy AllSigned

# 从网络端执行安装脚本
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

测试是否安装成功:

choco
# 有版本号输出即为成功

利用choco安装其他工具

部分工具也可自己去官网下载,并用安装包安装,注意安装时要勾选“添加到PATH环境变量”

# 设置choco
choco feature enable -n allowGlobalConfirmation

# 安装cmake (也可以把这步替换成从官网下载cmake安装包,注意安装时要勾选添加进PATH环境变量)
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'

# 安装git (也可以把这步替换成从官网下载git安装包,注意安装时要勾选添加到环境变量)
choco install git

# 安装python (建议把这步换成从官网下载python3.9安装包,并勾选添加到环境变量,通过choco安装容易出错)
choco install python --version=3.9.13

# 安装其他工具
choco install ninja gperf dtc-msys2 wget unzip

Git也建议从官网安装,同时勾选安装Git bash。可以让你在windows上使用bash终端,而不是powershell。

nRF Connect SDK安装与入门

安装GN工具(可选)

GN工具是开发Matter所需的工具。

GN网站下载编译好的Windows压缩包(Getting a binary),推荐在用户目录(C:\Users<用户名>)下解压。并且添加到PATH环境变量即可。

如果你的Windows用户名是中文,那还是换个无中文的目录。

安装west

west是一个多仓库管理工具(类似Android的repo),支持添加自定义插件。在nRF Connect SDK中,除了可以管理nRF Connect SDK仓库外,也通过插件实现了板卡选择、触发编译动作、触发flash烧写的功能。

利用Python的pip进行安装

pip3 install west
# 若python版本不对,这一步可能会报错

安装nRF Connect SDK

nRF Connect SDK前面已经介绍过,含驱动、内核以及第三方库的源码。

  1. 在一个无中文、无空格的合适路径下打开终端(powershell或bash):

    #创建并进入文件夹
    mkdir ncs
    cd ncs
    
    # 初始化仓库(从github拉取)
    west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.4.2
    # 也可选择其他分支或tag,如:
    # west init -m https://github.com/nrfconnect/sdk-nrf --mr main
    # 但通常不建议用户使用main分支
  • 这一步如果下载失败想重新下载,需要把创建的ncs文件夹下的所有内容删除干净,尤其是 .west 隐藏文件夹。然后再次执行 west init 即可;
  • 如果网络实在差,可以从百度网盘下载,见开发你的第一个nRF Connect SDK/Zephyr应用程序
  1. 更新仓库

    #更新仓库
    west update

由于国内网络原因,这一步也 经常 失败,但是没关系,每次 west update 都能下载一点点,如果失败了,就重复 west update 就行了。不需要像 west init 失败一样删除干净重新下载。

  1. 导出Zephyr CMake package,便于CMake自动识别SDK的路径,后续生成工程

    west zephyr-export
  2. 安装额外的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
pip3 install -r nrf/scripts/requirements.txt
pip3 install -r bootloader/mcuboot/scripts/requirements.txt

安装Zephyr SDK工具链

Zephyr SDK是编译器、链接器等工具。建议放在用户目录下(同样的,如果你的用户名是中文,还是换个目录吧)。

下方展示了通过Poweshell命令下载Zephyr SDK的方式。其中Zephyr工具链的版本是我安装时使用的版本。你需要获取最新的版本,最新版本的下载地址可从 Zephyr SDK — Zephyr Project Documentation 获取。

# 进入到用户目录(c:\Users\[用户名])
cd $HOME
# 如果是你的终端是bash而非powershell,则命令为
# cd ~

# 下载(最新版本的下载地址可从上述链接获取)
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.15.1/zephyr-sdk-0.15.1_windows-x86_64.zip

# 解压
unzip zephyr-sdk-0.15.1_windows-x86_64.zip

# 配置
cd zephyr-sdk-0.15.1
setup.cmd

注意:

  • setup.cmd只需执行一次。如果改变了安装位置,需要再次执行。

  • Zephyr SDK安装完成后,会发现:如果在前面安装了ncs的目录下执行west --help会比其他目录下执行west --help多出一些扩展指令,如build,board等等。这是因为nRF Connect SDK中的 .west 文件夹的配置了Zephyer的base路径,提供了这个仓库独有的插件。这些扩展的指令就是调用了插件进行编译、调试、烧写等工作。

    为了让其他目录下也能使用Zephyr工具,需要设置全局环境变量:

    在Windows环境变量中新建ZEPHYR_BASE环境变量,并把其值设置为ncs安装目录下的zephyr目录的路径即可。

(这个效果和执行一次ncs目录下的zephyr/zephyr-env.cmd脚本是一样的,但这个脚本设置环境变量只是临时生效,关闭终端再另开一个终端就不起作用了。而设置全局环境变量是永久生效。)

安装VS Code插件

打开VS Code,在插件中心搜索nRF Connect for VS Code Extension Pack,这个插件包会自动安装其他nRF Connect 所需的VS Code插件。

nRF Connect SDK安装与入门

可以在VS Code的设置中,对插件进行单独的设置,例如可以设置使用工具链的路径。可以对全局进行设置(USER),也可以单独对某个工作区进行设置(WORKSPACE)。

nRF Connect SDK安装与入门

由于我们是手动安装的,已经设置了PATH环境变量。所以把插件设置的工具链路径设为PATH即可。


3.2. SDK更新

手动安装和自动安装的SDK是一样的。如果有新版本SDK出来,想切换到新版本,都可以按照以下步骤操作:

确保SDK中的git仓库状态均为Clean

这意味着,客户平时不要随便去改SDK中的任何代码。也不要往里添加任何内容。但是编译例程是没问题的,因为例程编译目录build*是被 .gitignore忽略掉的。

# 此命令可查看当前git仓库的状态
git status

但是nRF Connect SDK中的仓库很多。也可以用VS Code打开整个nRF Connect SDK,用git界面图形化查看是否每个仓库均为clean。

检查manifest有无新版本

nRF Connect SDK中,nrf为主仓库,nrf的版本即为整个SDK的版本

# 查看nfr仓库下有多少版本
cd nrf
git pull
git tag  # 按键盘上下键翻阅,按q退出

切换到自己想要的版本

# 检出想要的版本
git checkout v2.4.2

# 更新整个仓库
west update

4.打开一个例程

从VS Code 的一个全新窗口,选择打开文件夹

nRF Connect SDK安装与入门

或者:

nRF Connect SDK安装与入门

含有例程的目录:

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即可:

nRF Connect SDK安装与入门

打开后,在VS Code资源管理器中可以看到文件夹视图:

nRF Connect SDK安装与入门

另外,也可以在Application中看到这个例程:

nRF Connect SDK安装与入门

5.以例程为模板创建新工程

上一节讲解了如何打开一个例程。

如果我们只是打开例程,例程的文件夹还是在ncs仓库内部,受到ncs的git仓库的管理。如果想自己开发项目,并用git管理版本,就需要创建新工程。

nRF Connect SDK支持把例程当作模板,复制到nRF Connect SDK外部,并创建新工程。

5.1. 创建新工程

nRF Connect SDK支持以例程作为模板,复制并创建新的工程。这也是Nordic非常推荐的方式。

首先在VS Code中打开一个新窗口:

nRF Connect SDK安装与入门

在 VS Code中,选择左侧nRF Connect for VS Code插件,进入Welcome页面,先检查toolchain和SDK是否已经检测到。

然后点击Create a new application创建新工程。

nRF Connect SDK安装与入门

选择“Copy a sample”:

nRF Connect SDK安装与入门

选择自己想要拷贝的例程,支持文字搜索:

nRF Connect SDK安装与入门

这里的例程列表,和第4节中提到的目录结构是一致的。同时也和SDK官网的例程说明是保持一致的,每个例程都有其对应的说明文档:

nRF Connect SDK安装与入门

此外,还有一些隐藏例程不会出现在这个界面,但是可供参考:

  • ${NCS}/modules/hal/nordic/nrfx/samples/src/: NRFX外设驱动库例程。如果用户不想用、或者Zephyr没有提供某些外设的标准驱动,则可以使用NRFX驱动,其用法和老的nRF5 SDK基本一致。
  • ${NCS}/zephyr/tests:zephyr所有的API的测试用例。如果你不知道某个Zephyr API怎么用,可以从这里面找。

选择自己新建例程的父目录(我这里是Linux电脑的路径):

nRF Connect SDK安装与入门

选择自己新建例程的文件夹名称:

nRF Connect SDK安装与入门

然后就可以打开新的工程。

5.2. 使用git跟踪你的代码修改

如果你从没用过git,需要先配置用户名和邮箱。这个用户名和邮箱不是登陆什么网站用的,而是一个签名,在提交代码时用于标记这段代码是谁提交的。这个配置存在你电脑的本地,并且是全局的,对所有git仓库都有效。

git config --global user.name "Jayant.Tang"
git config --global user.email "[email.protected]"

新建的工程都会自动初始化git仓库,我们可以看到.gitignore文件:

nRF Connect SDK安装与入门

你可以把 .vscode/ 添加到其中

如果你不熟悉Git以及Git在VS Code中的使用,强烈建议去学习一下,它极大的方便了代码的管理。

例如:如果安装了git history插件,就可以查看提交历史:

nRF Connect SDK安装与入门

Git History提供了很方便的视图,可以看到每次commit都改动了哪些代码和配置(左侧是旧的,右侧是新的):

nRF Connect SDK安装与入门

更多Git的使用,可以去网上了解其他教程。本文不再赘述。

6. 编译工程

6.1. 创建一个编译目标(Build Target)

所谓编译目标就是在同一套代码下,可能有不同的配置项(Debug/Release,不同的优化级别等等),编译出不同的可执行文件。一个项目下可以创建多个编译目标。

Board

创建Build,需要选择自己使用的板子,Zephyr自带各个厂商的开发板配置。

下图中,Board下拉框是用来选板子的,下方还有三个过滤器,来过滤可选的板子:

  • Compatible boards:本例程适配的板子,如果选择这些板子,不需要任何修改就可以烧录进去使用
  • Nordic boards:Nordic 出品的官方开发板,以及一些Nordic的demo板
  • All boards:Zephyr 支持的所有开发板

nRF Connect SDK安装与入门

Nordic开发板board配置的命名规则:

  • 例如:nrf52840dk_nrf52840,是说这个板子的配置是为 nrf52840dk 这块开发板上的 nrf52840 这颗 MCU 创建的,会记录这个MCU的外设地址,以及此MCU连接的外部硬件的信息(如SPI Flash)。
  • 例如:nrf9160dk_nrf9160nrf9160dk_nrf52840,都是nrf9160dk这块开发板的配置。但是这块开发板上有两颗MCU/SoC,一颗是9160 SiP,另一颗是52840。所以有两个配置可选,分别为这两颗MCU/SoC编译固件。
  • 例如:nrf5340dk_nrf5340_cpuappnrf5340dk_nrf5340_cpunet,都是nrf5340dk这块板子的配置,并且这块板子上只有nRF5340这一颗主控。但是nRF5340是一颗双核MCU,所以,可以有两种配置来区分两个核。这两个核的固件是分开运行的,因此编译时也是分别编译的。
  • 例如:nrf5340dk_nrf5340_cpuappnrf5340dk_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.overlayboards/ 目录下也可能有不同开发板对应的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旁的圆圈箭头按钮,可以全部重新编译。

nRF Connect SDK安装与入门

补充:命令行编译

按 " CTRL + ** ",可以呼出终端。点击“+”号右边的下拉箭头,选择nRF Connect:

nRF Connect SDK安装与入门

这样打开的终端,其环境变量指向前面安装的toolchain

# 利用当前已经创建的build target进行编译
west build

更多用法:

west build -h

编译时可以指定项目根目录、build目录、板子名称、配置文件、overlay文件等。你可以先用上面的图形化的方式在VS Code中进行编译,然后在VS Code终端中查看这次编译的命令是什么。

7.连接设备

nrf-connect插件,底层调用的是nrfjprognrfutil命令来连接开发板上的JLink。因此,需要通过USB线连接到JLink口。

nRF Connect SDK安装与入门

以nRF52840DK为例,中间最大的带有贴纸的芯片为JLink主控(官方称其为Interface MCU),左侧为JLink USB口,此接口可以用来给整块板供电。

需确保左下角电源开关打开。左侧中间位置的开关置于VDD挡位,右上角开关置于DEFAULT挡位(如上图)。

对于一些有多颗MCU的开发板,注意要使用拨码开关选择自己要调试的MCU,例如nRF9160DK可选择9160和52840:

nRF Connect SDK安装与入门

然后就可以在VS Code中识别到设备了:

nRF Connect SDK安装与入门

如果不能自动识别到,或者很不稳定。可能是最新的底层Python工具nrfutil在Windows上不太稳定。可以把它改回之前的nrfjprog

打开VS Code Settings:

nRF Connect SDK安装与入门

搜索“Device Provider”,并改为nrfjprog

nRF Connect SDK安装与入门

8.烧录固件

连接并成功识别到Jlink后,可以通过ACTIONS栏中的Flash按钮触发烧录动作:

nRF Connect SDK安装与入门

也可以通过命令行进行烧录:

west flash

备注:

这样直接烧录,有一部分项目可能会烧写失败,显示:

nRF Connect SDK安装与入门

这是因为,Nordic的MCU中通常都有一个用于存储用户信息的寄存器(UICR),可以认为是一块特殊的flash区域,存储了客户自己的加密密钥、引脚配置等产品信息。由于信息安全的原因,是不允许在保持UICR不变的情况下烧写新的固件的。相关资料,可以参考Nordic芯片数据手册的UICR章节。

这种情况下只能全片擦除然后再烧录,点击Flash右边的按钮:

nRF Connect SDK安装与入门

或者使用命令行方式:

west flash --force --erase

此外,还有一种可能是,调试接口启用了保护,需要recover这颗芯片来解除保护。

通常,右下角会有弹窗来问你是否要recover,就选择Yes就好。

如果没有效果,也可以用命令行来recover

nrfjprog --recover
```shell

如果是nRF5340这种双核芯片,那么网络核也要recover

```shell
nrfjprog --recover --coprocessor CP_NETWORK

9.运行并测试

连接的设备,可以看到Jlink上的主控芯片、串口以及RTT。

nRF Connect SDK安装与入门

这里的串口是MCU上真实的物理串口,在开发板上通过PCB走线连接到Jlink,然后Jlink把这个串口转化为USB虚拟串口。

新款开发板,板载的Jlink是拿5340做的,这种新款开发板有两个USB虚拟串口:

nRF Connect SDK安装与入门

nRF Connect SDK安装与入门

但是对于52840DK来说,开发板上只连了一个串口,另一个是空的。具体是哪个?要试一下,因为可能USB枚举的顺序不一样。

对于5340DK, 7002DK来说,两个串口分别对应Application Core和Network Core的日志输出。

9.2. 连接串口

nRF Connect SDK安装与入门

点击串口,选择波特率,即可打开串口。串口接收的信息在Terminal展示:

nRF Connect SDK安装与入门

这个串口工具类似于Putty,按下键盘的按键就立即发送出去一个字符,不会显示自己发出了什么。便于在这个串口上运行命令行终端之类的,这也是Zephyr所支持的。

9.3. 连接RTT

RTT是Segger提供的日志调试手段,全称Real Time Transmit。MCU将日志打印到内部缓存中,然后利用Jlink的高速通道,把日志打印到电脑上。这个方法不需要占用串口外设,而且速度极快,对CPU运行影响小。

大多数例程的默认日志输出口是串口。但本例程是蓝牙串口透传,串口需要传输用户数据,因此日志的默认输出就是RTT。

查看RTT日志输出的相关配置:

打开工程根目录下的 .prj 文件:

nRF Connect SDK安装与入门

可以看到:

CONFIG_USE_SEGGER_RTT=y      # 启用RTT
CONFIG_LOG_BACKEND_RTT=y     # 日志后端选用RTT
CONFIG_LOG_BACKEND_UART=n    # 日志后端不选用串口
CONFIG_LOG_PRINTK=n          # 不启用PRINTK日志

如下图连接RTT:

nRF Connect SDK安装与入门

9.4. 测试peripheral_uart例程

一般来说,需要两块开发板,一块烧peripheral_uart,一块烧central_uart。两块开发板上电后会自动连接。从一个开发板串口输入的数据,会从另一个开发板输出。

但是这里我们只有一块开发板,那么BLE central我们就用手机。iOS应用商店可以下载nRF Connect,安卓可以在谷歌商店下载,或者直接去Github下载APK

通过BLE连接设备

在nRF Connect APP中,先扫描,扫到设备后,再连接:

nRF Connect SDK安装与入门

开发板接收数据

nRF Connect SDK安装与入门

nRF Connect SDK安装与入门

可以在串口看到数据:

nRF Connect SDK安装与入门

开发板发送数据

BLE协议是Client-Server架构。BLE协议规定,从机作为Server,只能被Client读、写上面的属性。默认情况下不能主动发消息到Client。除非Client使能了Notify的功能,Server才能Nortify到Client。更多信息,大家可以搜索CCCD(Client Characteristic Configuration Descriptor)。这里,就需要点亮TX属性的CCCD:

nRF Connect SDK安装与入门

然后在串口中通过键盘输入内容:hello+回车。屏幕上不会显示东西,但是按键确实会发送出去。

这个串口工具类似于Putty,按下键盘的按键就立即发送出去一个字符,不会在屏幕上显示自己发出了什么。

这里之所以要加回车,是因为例程代码就是这么写的。在串口回调函数内,检测到回车,才会把串口数据打包从蓝牙发出。

nRF Connect SDK安装与入门

至此,我们完成了在nRF52840DK上的peripheral_uart例程的编译、烧录与运行测试。

10. 官方资料

nRF Connect SDK官网

https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/index.html

nRF Connect SDK安装与入门

进入官网,首先看到右上角可以选择文档的版本,需要与SDK的版本对应。

然后可以看到中间的一排标签页:

  • Zephyr Project:是Zephyr官方文档的一个镜像,包含Zephyr RTOS内核服务、操作系统API、各种驱动、协议支持以及它们的例程文档。一些比较通用的功能的如日志、Flash存储、线程间通信等功能的文档都在这里面。它对应的是nRF Connect SDK中的zephyr文件夹。
  • nRF Connect SDK: 是Nordic在Zephyr系统上扩展的各种Nordic独有的库、驱动和例程的文档。里面大多数是一些Nordic独有的技术,对应的是nRF Connect SDK中的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配置是干什么的,可以在这个页面进行搜索。

总之,nRF Connect SDK官网里面有大量的技术细节,在运行一个例程之前,一定要参照网站中该例程的说明进行操作。

  • Nordic资料中心 https://docs.nordicsemi.com/

    目前最新的资料中心,可以通过技术或产品系列进行分类,查找想要的资料。芯片数据手册(Specification)、开发板说明都可以在这里查看。也会导向到nRF Connect SDK官网。

  • Nordic官网 https://www.nordicsemi.com/

    一些商业新闻和产品介绍。但是最重要的是一些工具软件开发板原理图/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. 其他推荐阅读

订阅Nordic新闻简报

了解最新信息!订阅后即可获取最新Nordic及物联网资讯

立即订阅