当前位置: 首页 > news >正文

第一课 — nRF Connect SDK介绍

第一课 — nRF Connect SDK介绍

(一)概述

nRF Connect SDK是由诺德公司(Nordic Semiconductor)开发的一款软件开发工具包(software development kit, SDK),专门用于构建基于诺德半导体芯片(nRF52、nRF53、nRF70 和 nRF91 系列)的低功耗无线连接应用程序。我们将深入了解 SDK 的内部结构,以更好地了解其结构和内容。

在本课程的联系部分,我们将介绍使用 VS Code集成开发环境下载和安装 nRF Connect SDK 所需的所有步骤。然后,我们将通过构建和刷新示例程序来测试安装blinky,该程序会切换诺德公司板上的 LED。最后,我们将介绍如何修改blinky源代码并重建程序以使 LED 以不同的频率切换。

练习由两个部分组成:

  • 练习1 — 安装nRF Connect SDK和VS Code;
  • 练习2 — 实现您的第一个 nRF Connect SDK 应用程序。

(二)目标

  • 理解nRF Connect SDK的结构和构成;
  • 学会如何下载并安装nRF Connect SDK;
  • 学会如何部署 nRF Connect for VS Code 扩展包
  • 测试west, nRF Connect SDK 中的核心命令行 (common-line) 实用程序;
  • 学会如何构建应用程序;
  • 学会如何烧录应用程序到开发版;
  • 运行你的第一个应用程序blinky,使开发版上的LED灯进行闪烁。

(三)课程内容

3.1 nRF Connect SDK的结构和构成

nRF Connect SDK一款可扩展的标准统一的软件开发套件SDK,用于基于 Nordic Semiconductor nRF52、nRF53、nRF70 和 nRF91 系列无线设备构建低功耗无线应用。它提供了一个可扩展的框架,用于为内存受限的设备构建尺寸优化的软件,以及为更先进的设备和应用构建功能强大且复杂的应用程序。

它集成了 Zephyr 实时操作系统 (RTOS) 和各种完整的应用程序、示例和协议栈,例如低功耗蓝牙、蓝牙网状网络、Wi-Fi、Matter、Thread/Zigbee 和 LTE-M/NB-IoT/GPS、TCP/IP。同时,它还包括中间件,例如 CoAP、MQTT、LwM2M、各种库、硬件驱动、用于安全的 Trusted Firmware-M 和安全引导加载程序 (MCUBoot)。

img

图1.1 nRF Connect SDK的架构

Zephyr RTOS 和第三方组件(例如:MCUBoot、Trusted Firmware-M)在图1.1中以深蓝色显示。

Zephyr RTOS 是一款开源RTOS,适用于联网且资源受限的嵌入式设备。它包含一个调度程序,用于确保可预测/确定的执行模式并抽象出时间要求。它还附带了一套丰富的基础库和中间件,可简化开发并帮助缩短产品上市时间。Zephyr RTOS 具有高度可配置性,可实现从内存受限设备的极小配置(最低 8 千字节,例如简单的 LED 闪烁应用程序)到功能强大、功能丰富、处理能力强的设备(多 兆字节内存)的大内存配置的可扩展配置。

nRF Connect SDK 为所有 Nordic 设备和软件组件提供单一代码库。从而简化了将模块、库和驱动程序从一个应用程序移植到另一个应用程序的过程,缩短了开发时间。通过让开发人员为其应用程序挑选必要的软件组件,可以保证高内存效率。nRF Connect SDK 在 GitHub 上公开托管。

在内部,nRF Connect SDK 代码由四个主要存储库构成:

  • nrf — 应用程序,应用程序、示例、连接协议(Nordic);
  • nrfxlib — 通用库和堆栈(Nordic);
  • Zephyr — RTOS & 主板配置(Open source);
  • MCUBoot — 安全引导加载程序(Open source)。

除了四个主要存储库之外,还有其他存储库,如 TrustedFirmware-M 存储库和 Matter 存储库。

如图1.2所示,直观地展示了 nRF Connect SDK 中的工具链,该工具链基于 Zephyr 工具链。您可以看到一组不同的工具,每个工具都在应用程序的创建过程中发挥作用,从配置系统到构建系统。

img

图1.2 nRF Connect SDK的工具和配置方法

Kconfig(第三课中介绍)生成配置整个系统的定义,例如,在应用程序中要包含哪种无线协议或哪些库。Devicetree(第二课中介绍)描述硬件。然后,CMake 使用来自 Kconfig 和Devicetree的信息来生成构建文件,Ninja(类似于make)将使用该文件来构建程序。GCC 编译器系统用于创建可执行文件。

如图1.3所示,通过 Kconfig (.conf文件 )将源代码 ( .c文件) 与配置系统高度分离,通过 devicetree (.dts文件 ) 将硬件描述系统高度分离,这样只需进行很少的更改,就可以在不同硬件和不同配置上使用相同的应用程序源代码。这对可移植性和可维护性的易用性有很大影响。

img

图1.3 nRF Connect SDK的工具和配置方法

现在我们已经了解了 nRF Connect SDK 的内容和结构,让我们进入本课的实践部分,我们将通过一些高级工具安装 nRF Connect SDK,这些工具简化了获取存储库和设置所需工具链的过程。

3.2 练习1

本课程使用v2.9.0-v2.7.0版本,如果需要安装老版本,例如v2.6.2-v2.0.0,请阅读

3.2.1 安装nRF Connect SDK and VS Code

(1)安装nRF Command Line Tools.

下载链接:https://www.nordicsemi.com/Products/Development-tools/nRF-Command-Line-Tools/Download?lang=en#infotabs

[!IMPORTANT]

在Ubuntu和MacOS(本文作者使用MacOS)系统中,要确认手动安装了SEGGER J-Link程序,Windows系统中该步骤是自动完成的。以下是在ubuntu系统里的演示:

img

nRF Command Line Tools 是在安装SEGGER J-Link工具包时所必须的,SEGGER J-Link工具包是用来下载程序到开发版的。

[!IMPORTANT]

SEGGER j-Link安装

当到达“Choose Optional Components”安装窗口时,确定选择‘Install Legacy USB Driver for J-Link’。这个驱动程序对于许多开发包来说时必要的。

(2)安装VS Code

下载链接:Download Visual Studio Code - Mac, Linux, Windows

(3)安装nRF Connect 扩展包

点击Extensions图标,搜索nRF Connect for VS Code Extension Pack安装,如下图1.4所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保在这里插入图片描述

图1.4 在VS Code中安装nRF Connect扩展包

nRF Connect for VS Code 扩展包允许开发人员使用流行的 Visual Studio Code 集成开发环境 (VS Code IDE) 来开发、构建、调试和部署基于 Nordic 的 nRF Connect SDK(软件开发套件)的嵌入式应用程序。它包括编译器接口、链接器、整个构建系统、RTOS 感知调试器、nRF Connect SDK 无缝接口、Devicetree 可视化编辑器和集成串行终端以及其他有价值的开发工具。

nRF Connect for VS Code 扩展包由以下组件组成:

  • nRF Connect for VS Code:主要扩展,包含构建系统和 nRF Connect SDK 的接口。它还提供了一个接口来管理 nRF Connect SDK 版本和工具链并设置活动的 SDK/工具链版本。
  • nRF DeviceTree:提供Devicetree语言支持和Devicetree可视化编辑器。
  • nRF Kconfig:提供Kconfig语言支持。
  • nRF终端:串行和RTT终端。
  • 微软的 C/C++:添加对 C/C++ 的语言支持,包括 IntelliSense 等功能。
  • CMake:CMake 语言支持。
  • GNU 链接器映射文件:链接器映射文件支持。

(4)安装Toolchain

工具链是一组用于构建 nRF Connect SDK 应用程序的工具。它包括汇编器、编译器、链接器和 CMake 等工具。

首次打开 nRF Connect for VS Code 时,它会提示您安装工具链。这通常是因为扩展程序在您的机器上找不到任何已安装的工具链。

单击Install Toolchain。它将列出可在您的机器上下载和安装的工具链的可用版本。选择与您计划使用的 nRF Connect SDK 版本相匹配的工具链版本。我们建议使用nRF Connect SDK 的最新发布标签。因此,请使用最新标记版本的工具链。

(5)安装 nRF Connect SDK

在 nRF Connect for VS Code 中(完成以上工作,此时应该在VS Code的侧边栏出现 nRF Connect 图标),如图1.5所示,单击Manage SDK。通过 Manage SDK ,我们可以安装、卸载和设置活动的 nRF Connect SDK 版本。由于这是我们第一次使用该扩展,我们将只看到两个选项。单击Install SDK。它将列出可在您的机器上下载和安装的 nRF Connect SDK 的可用版本。选择您希望用于项目开发的 nRF Connect SDK 版本。

在这里插入图片描述

图1.5 在VS Code中安装nRF Connect SDK

[!NOTE]

如果您已在 VS Code 中打开 SDK 文件夹,则“管理 SDK”菜单选项将不存在,而您将看到“管理 west 工作区”。要解决此问题,请在 VS Code 中打开另一个窗口或文件夹。
如果您没有看到任何选项,请确保您拥有最新版本的 nRF Connect for VS Code 扩展包。

通过以上步骤,我们就完成了nRF Connect SDK 和 VS Code的安装。后面的课程将教授如何构建和下载我们的第一个nRF Connect SDK应用程序blinky到开发版。

值得注意的是,nRF Connect SDK 与 IDE 无关,这意味着您可以将它与您选择的 IDE 一起使用,也可以不使用 IDE。可以通过 nRF Util ( nrfutil ) 使用命令行界面 (CLI) 下载和安装 nRF Connect nrfutil。但是,我们强烈建议将 VS Code 与我们的 nRF Connect for VS Code 扩展包一起使用,因为它在一个地方包含方便的图形用户界面 (GUI) 和高效的命令行界面 (CLI),此外还有许多使固件开发更容易的功能。设置另一个 IDE 以与 nRF Connect SDK 一起使用将需要一些额外的手动步骤,这超出了本课程的范围。

3.3 练习2

3.3.1 构建并下载您的第一个 nRF Connect SDK 应用程序

在本练习中,我们将根据示例编写一个简单的应用程序blinky来切换我们板上的 LED灯。次流程在任何 Nordic Semiconductor 开发板都可以使用(nRF52、nRF53、nRF70、nRF91 系列)。这样做的目的是确保正确设置了构建和刷新示例所需的所有工具。重点是学习如何从模板“复制示例”创建应用程序、构建应用程序并将其刷新到 Nordic 驱动的板上。

因此,我们将引导您完成以下三点工作:

  • 根据模板(示例)创建一个新的应用程序;
  • 构建应用程序;
  • 将应用程序刷入主板。

步骤1

在根目录的地方创建一个文件夹,该文件夹将保存我们在本课程中进行的所有练习。
我们将在 C 盘上创建该文件夹,C:\nordic\myapps.避免将应用程序存储在路径较长的位置,因为如果应用程序路径太长,构建系统可能会在某些操作系统上失败。避免在路径中使用空格以及特殊字符。

步骤2:在 VS Code 中,单击 nRF Connect Extension 图标。在欢迎视图中,单击创建新应用程序。

img

图1.6 在VS Code中创建应用程序

步骤3:在 VS Code 中,如图1.7所示,选择Copy a sample。

img

图1.7 在VS Code中Copy a sample

您将看到两个选项:创建空白应用程序 将创建一个具有空函数的空白应用程序main()。而复制示例将向您展示来自 nRF Connect SDK 中不同模块的所有模板“示例”,并使您能够基于模板创建应用程序。SDK 包含一组丰富的模板。在模板上下文中,示例很简单,展示单个功能或库(例如 SHA256 示例、UART 示例、PWM 示例、闪烁示例等),而应用程序很复杂,包含各种库以实现特定用例(例如资产跟踪器应用程序、键盘应用程序、鼠标应用程序)。

(1) 在搜索字段中输入 blinky 并选择 Blinky Sample。Blinky 示例会无限期地闪烁开发板上的 LED1。

在这里插入图片描述

图1.7 在VS Code中选择blinky实例

我们将以 Blinky 示例为基础开发我们的第一个应用程序。Blinky 示例来自 nRF Connect SDK 中的 Zephyr 模块。这就是您zephyr 在示例路径中看到名称的原因:zephyr\samples\basic\blinky。

通过img我们可以分别访问树内示例(在SDK安装目录内),示例的在线文档以及示例的github。

通过img,我们可以根据样本/应用程序所属的模块(nrf、zephyr 等)和支持的硬件对其进行过滤。请注意,支持的硬件并不总是准确的,因为它依赖于明确列出支持硬件的样本,而并非所有样本都是如此。

(2) 输入您希望存储应用程序的完整路径。

步骤1: 选择您要存储应用程序的位置。输入您创建的目录(例如:C:\nordic\myapps)。

步骤2: 为您的应用程序命名fund_less1_exer2。这是我们将在本课程的练习中使用的命名约定。请注意,这将为您的应用程序创建一个名为的文件夹fund_less1_exer2。

输入完整路径后,按回车键。

VS Code 会询问您是否要在同一个 VS Code 实例中打开该应用程序,还是打开一个新的 VS Code 实例。选择“打开”以在同一个 VS Code 实例中打开该应用程序。

img

这将复制所选模板“Blinky sample”,并将其存储在您指定的应用程序目录中,并将未构建的应用程序添加到 VS Code,如下所示:

img

图1.8 在VS Code中完成blinky实例的构建

[!NOTE]

nRF Connect for VS Code 可能会显示一些未找到未构建应用程序的头文件的错误波浪线。请在此阶段忽略这些错误波浪线。添加并构建配置后,这些错误将自动解决(下一步)。

(4)添加构建配置

nRF Connect SDK 的众多优势之一是应用程序源代码与软件配置/硬件描述之间的高度解耦,从而可以非常轻松地切换构建以适应新的硬件或软件配置。

此步骤将指定我们要为哪个开发板或定制板(硬件)构建应用程序。我们还将选择*.conf构建中要使用的软件配置(以及可能的覆盖)。

在APPLICATIONS视图中,在应用程序名称下,单击Add Build Configuration。

img
这将打开如下所示的添加构建配置窗口:

img

步骤4:

4.1 使用主板 ID 选择要将应用程序刷入的主板。请参阅下表以了解 Nordic 设备的主板 ID 概述。

在这里插入图片描述

我们通过指定其 ID选择了nRF52833DKnrf52833dk_nrf52833。

4.2 主板修订版本通常写在主板背面的贴纸上。但是,此字段是可选的,并且仅在主板有多个修订版本时才适用(如 nRF9160 DK 的情况),通过将其设置为默认值,构建系统会选择一个修订版本。

4.3 根据您在步骤 3 中选择的模板,您将看到至少一个应用程序配置prj.conf。某些模板包含多个应用程序配置文件(例如:prj.conf、prj_minimal.conf, prj_cdc.conf)。如果在模板中找到这些不同的配置,则会在模板文档中进行说明。blinky 模板只有一个选项。如果在west里,就相当于FILE_SUFFIX(和CONF_FILE)。

4.4 Kconfig fragments字段将列出模板中可用的或添加到应用程序文件夹中的 Kconfig Fragments。这些是应用程序配置文件的修饰符(第 3 课中介绍)。blinky 模板没有。

4.5 Devicetree Overlay字段将列出模板中可用或已添加到应用程序文件夹的设备树覆盖。这些是硬件描述的修饰符(第 3 课中介绍)。闪烁模板没有。

4.6 额外的Devicetree Overlay参数字段,提供了附加的可自定义的Devicetree Overlay字段

4.7 代码片段。代码片段将软件配置(Kconfig)和硬件配置(Devicetree)结合在一起。SDK中有多个代码片段。

4.8 额外的 CMake 参数字段允许您在需要时将参数传递给构建系统。在本演示中,我们将该字段留空。

4.9 构建目录名称字段可让您手动命名将存储最终二进制文件和临时构建文件的构建目录。我们将保留该名称为工具指定的默认名称,build或者build_1如果您之前已经构建过一个应用程序。

4.10 优化级别(大小、速度或者调试)。这里有四个选项。

  • 使用项目默认值:使用应用程序配置文件(prj.conf)中设置的项目默认设置,应用程序配置文件在第 3 课中介绍。
  • 优化调试 (-Og):如果您计划调试应用程序并使用 nRF Connect for VS Code 中的 RTOS 感知调试器,则此项设置很重要。在 GUI 中选择此选项将把以下 Kconfig 符号传递给构建系统CONFIG_DEBUG_THREAD_INFO="y"和CONFIG_DEBUG_OPTIMIZATIONS=“y”
  • 优化速度(-O2):这将把以下 Kconfig 传递给构建系统CONFIG_SPEED_OPTIMIZATIONS=“y”
  • 优化大小(-Os):这将把以下 Kconfig 传递给构建系统CONFIG_SIZE_OPTIMIZATIONS=“y”

在本练习中,我们将保留使用项目默认值的选项。但是,如果您计划调试应用程序,请务必记住使用优化调试(-Og) 。

保持生成配置后构建选项处于启用状态,以便在单击构建配置按钮后触发构建过程。

4.11 从nRF Connect SDK 2.8.0开始,默认启用Sysbuild。当您的应用程序具有多个映像时,Sysbuild非常重要。

4.12 单击“构建配置”按钮来创建配置并启动构建过程。构建过程需要一些时间才能完成。打开 nRF Connect Terminal(View->Terminal)查看构建进度。

img

通过显示应用程序的内存使用情况来表明构建成功,如上面的屏幕截图所示。

[!NOTE]

构建过程中的一个关键组件是west,它是 nRF Connect SDK/Zephyr 中的核心命令行实用程序。

west提供多种服务,如存储库管理、构建应用程序和闪存,并由 nRF Connect for VS Code 内部调用。如果您喜欢在终端中工作,也可以在命令行提示符中手动发出这些命令。如果您有兴趣了解如何将命令行界面与 nRF Connect SDK 结合使用,请west help在终端面板中输入。

或者,您可以观看此简短视频或阅读此处west 提供的文档。确保选择 nRF Connect Terminal,如下面的屏幕截图所示,因为这是工具链来源的终端。

img

如果你切换到VS Code 中的资源管理器或浏览到应用程序目录,你会注意到在构建过程中创建了一个名为 的新子目录build。此文件夹包含构建输出,其中包括我们将在下一步中刷入到板上的二进制文件。

img

  1. 确保您的开发套件已连接到计算机并且已打开。它应该列在nRF Connect for VS Code 扩展中的已连接设备视图中

[!IMPORTANT]

如果您使用的是Thingy:53、Thingy:91 X或Thingy:91(不带内置调试器),则闪存过程会有所不同,设备将不会显示在nRF Connect for VS Code扩展的“连接设备视图”中。跳过步骤5和6,请在此处为Thingy:53执行闪存过程,在此处为Thingy:91 X或Thingy:91执行闪存过程。

img

如果您没有看到列出您的主板,请按“连接设备视图”中的“刷新连接设备”图标。

img

在Actions View中,单击Flash 将应用程序刷入开发板。您可以打开Terminal Panel查看刷入进度,如下所示。

[!IMPORTANT]

Flash和Erase and Flash To Board之间的区别在于,后者会擦除整个设备,包括应用程序保存的所有数据。

例如,如果设备被添加到网状网络中,Erase And Flash To Board将使设备忘记这一点。

img

您的开发板上的LED1现在应该以一秒的间隔闪烁。

Picture13.gif (391×468)

  1. 为了演示的目的,我们来改变 LED 闪烁频率。

在源文件main.c第 11 行,将值SLEEP_TIME_MS从 1000 更改为 100。这将改变 LED 闪烁的间隔。

#define SLEEP_TIME_MS 100
  1. 重建并刷新开发板上的应用程序。您应该会发现 LED 现在以更高的频率闪烁。

在第 2 课中,我们将深入了解该应用程序的源代码,以了解其工作原理。


http://www.mrgr.cn/news/91436.html

相关文章:

  • 代码补全『三重奏』:EverEdit如何用上下文识别+语法感知+智能片段重构你的编码效率!
  • 蓝桥杯单片机基础部分——6、555定时器
  • DeepSeek V3和R1
  • C++共享指针实战
  • ls命令的全面参数解析与详尽使用指南
  • 观察者模式原理详解以及Spring源码如何使用观察者模式?
  • gcc和g++的区别以及明明函数有定义为何链接找不到
  • 3.10 企业级AI内容生成引擎:从策略到落地的全链路技术指南
  • 02.05、链表求和
  • 网络安全的态势如何以及如何解决?
  • 投资组合风险管理
  • Day48(补)【AI思考】-设计模式三大类型统一区分与记忆指南
  • Java-数据结构-(HashMap HashSet)
  • 【实用技巧】云服务器+FRP搭建自己的远程控制向日葵
  • 计算机毕业设计Python商品推荐系统 商品比价系统 电商比价系统 商品可视化(代码+LW文档+PPT+讲解视频)
  • Rust中的collections
  • 2013年下半年软件设计师上午题考察知识点及其详细解释(附真题及答案解析)
  • Leetcode2080:区间内查询数字的频率
  • 文档检测校正的重要性
  • Mycat中间件