该库不再被维护,并且没有计划继承该库。虽然现有 nRF5 SDK 用户仍然可以访问它,但不会收到进一步的更新或支持。我们建议不要使用此库启动新项目,因为可用的固件(.hex 文件)使用过时的 SoftDevice 二进制文件。
pc-ble-driver
提供用于蓝牙低功耗 nRF5 SoftDevice 序列化的 C/C++ 库。
概述
建筑学
支持的环境
操作系统
软器件和IC
安装设备驱动程序
驱动安装
驱动程序验证
安装工具
安装依赖项
在 Windows 上安装
在 Ubuntu Linux 上安装
在 macOS 上安装
从源代码编译 pc-ble-driver
在 Windows 上编译
在 Ubuntu Linux 或 macOS 上编译
编译连接 HEX 文件
在 Windows 上编译
在 Ubuntu Linux 或 macOS 上编译
编程连接 HEX 文件
示例
已知问题
执照
pc-ble-driver
由一组静态和共享库组成,这些库通过与运行 SoftDevice 和连接软件的 nRF5 连接芯片的串行端口通信向应用程序提供 SoftDevice 功能,此处包含为单个 .hex 文件。有关 SoftDevice 序列化的详细信息,请参阅序列化。
C/C++ 库可以直接连接,但也作为更高级别的绑定提供,以减少控制为代价简化开发(在大多数情况下是可以接受的):
pc-ble-driver-js Node.JS 绑定
pc-ble-driver-py Python 绑定
其中“应用芯片”只是通用硬件(即 Windows、Linux 或 macOS 设备),尽管它也可以是 Arduino 或 Raspberry Pi 等。
Windows 7、8 和 10、32 和 64 位(在 Windows 7 上测试)
Ubuntu Linux LTS 64 位(在 Ubuntu 18.04 上测试)
macOS 64 位(在 10.14 Mojave 上测试)
要使用 pc-ble-driver,您的开发套件需要具有正确的固件。所需的固件可在hex/sd_api_v<x>
文件夹中找到,其中包含与pc-ble-driver
通信所需的 SoftDevice 和连接固件。
生成的库与以下 SoftDevice API 版本和 nRF5x IC 兼容:
SoftDevice s130 API 版本 2: connectivity_<version>_1m_with_s130_2.xx
(nRF51 和 nRF52 系列 IC)
SoftDevice s132 API 版本 3: connectivity_<version>_<1m|*usb>_with_s132_3.xx
(仅适用于 nRF52 系列 IC)
SoftDevice s132 API 版本 5: connectivity_<version>_<1m|*usb>_with_s132_5.xx
(仅适用于 nRF52 系列 IC)
SoftDevice s132 API 版本 6: connectivity_<version>_<1m|*usb>_with_s132_6.xx
(仅适用于 nRF52 系列 IC)
SoftDevice s140 API 版本 6: connectivity_<version>_<1m|*usb>_with_s140_6.xx
(仅适用于 nRF52 系列 IC)
*usb) 仅适用于带有 USBD 外设的 nRF52 系列 IC
主成分分析 | 正式名称 | 货号 | 笔记 |
---|---|---|---|
PCA10028 | nRF51 开发套件 | nRF6824 | |
PCA10031 | nRF51 加密狗 | nRF6825 | |
PCA10040 | nRF52 开发套件 | nRF6827 | |
PCA10056 | nRF52840 { 开发套件 } | nRF6828 | *) |
PCA10059 | nRF52840 { 加密狗 } | nRF6829 | 只能使用支持 Nordic USB CDC 串行端口的连接固件 |
*) 可以使用 Nordic USB CDC 串口版本和 SEGGER J-Link-OB (VCOM) 版本。在 PCA10056 上使用 Nordic USB CDC 串口版本需要连接引脚 P0.18 和 P0.24。 QSPI 芯片的引脚也必须就位(默认情况下)。检测是PCA10056还是PCA10059的算法是检查是否可以与QSPI芯片通信。 PCA10059没有QSPI芯片。 nRF Connect DFU 触发器使用检测来确定在 DFU 和应用模式之间切换时使用哪个引脚来重置设备。
该通信库可在任何类型的串行端口 (UART) 上工作,但最常在 Segger J-Link USB CDC UART 上使用。要设置所需的 J-Link 驱动程序,只需下载并安装与您的操作系统匹配的版本:
赛格J-Link
安装所需的驱动程序并连接支持 J-Link 的板(例如 Nordic 开发套件)后,端口应该可用。
此外,您必须禁用Mass Storage Device
才能使用pc-ble-driver
与设备通信,请参阅data corruption or drops issue
。
串行端口将显示为COMxx
。只需检查设备管理器中的“端口(COM 和 LPT)”部分即可。
串行端口将显示为/dev/ttyACMx
。
默认情况下,并非所有用户都可以访问该端口。键入以下命令将您的用户添加到dialout
组,以使其能够访问串行端口。请注意,需要重新登录才能生效。
$ sudo usermod -a -G dialout <用户名>
要防止调制解调器管理器服务尝试连接到 CDC ACM 串行端口:
$ systemctl stop ModemManager.service $ systemctl 禁用 ModemManager.service
串行端口将显示为/dev/tty.usbmodemXXXX
。
有一个已知问题,如果您遇到任何问题,请在此处检查。
要对连接固件进行编程,您需要nrfjprog
,它与 nRF5x 命令行工具捆绑在一起,可以从以下位置下载:
适用于 Windows 的 nRF5x 命令行工具
适用于 Linux 32 位的 nRF5x 命令行工具
适用于 Linux 64 位的 nRF5x 命令行工具
适用于 macOS 的 nRF5x 命令行工具
在 Linux 和 macOS 上将nrfjprog
和mergehex
添加到PATH
。
或者, nRF Connect Programmer
可以帮助您通过 UI 支持对连接固件进行编程。
下载 nRF Connect Desktop 并在那里安装nRF Connect Programmer
。
要编译pc-ble-driver
您将需要以下工具:
AC/C++ 工具链
git (>=2.19)
CMake (>=3.11)
氯苯酚
pc-ble-driver
要编译connectivity
HEX 文件,您将需要其他工具:
巧克力味
忍者
适用于 Arm 的 GNU 嵌入式工具链
Python
点
恩夫蒂尔
connectivity
HEX文件按照以下步骤在特定平台上安装依赖项:
下载Visual Studio 15
或更高版本并安装。
安装巧克力。使用cmd.exe
安装(以管理员身份运行)
# 复制下面的所有内容@"%SystemRoot%System32WindowsPowerShellv1.0powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/ install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%chocolateybin"
如果Chocolatey
已按上述方式安装,但尚未添加到 PATH,请运行:
$ SET "PATH=%PATH%;%ALLUSERSPROFILE%chocolateybin"
安装Git
。
$ choco install -y git
安装CMake
。
$ choco install -y cmake
安装 vcpkg。
$ git 克隆 https://github.com/Microsoft/vcpkg.git $ cd vcpkg $ git checkout 标签/2020.04 $ .bootstrap-vcpkg.bat
然后将 vcpkg 位置添加到PATH
并将其设置为VCPKG_ROOT
环境变量。
仅当您想要编译自己的connectivity
HEX 文件时才需要执行以下步骤。
安装ninja
。
$ choco install -y 忍者
下载并安装GNU Embedded Toolchain for Arm
从这个位置下载。
按照安装说明进行操作。
在环境变量中将其安装路径设置为GNUARMEMB_TOOLCHAIN_PATH
。例如:
$ 设置 GNUARMEMB_TOOLCHAIN_PATH=c:gccarmemb
安装Python
和pip
,然后安装nrfutil
$ pip install nrfutil# 如果安装成功但验证失败则重新启动
安装build-essential
。
$ sudo apt-get -y install build-essential
安装Git
$ sudo apt-get -y 安装 git
如果安装的Git
版本低于要求,则:
$ sudo add-apt-repository ppa:git-core/ppa $ sudo apt 更新 $ sudo apt安装git
安装CMake
。
$ sudo apt-get -y 安装 cmake
如果版本低于要求,请从源安装CMake
。
安装 vcpkg。
$ git 克隆 https://github.com/Microsoft/vcpkg.git $ cd vcpkg $ git checkout 标签/2020.04 $ ./bootstrap-vcpkg.sh
然后将 vcpkg 位置添加到PATH
和VCPKG_ROOT
环境变量中。
安装Ninja
。
$ sudo apt-get install ninja-build
仅当您想要编译自己的connectivity
HEX 文件时才需要执行以下步骤。
安装GNU Embedded Toolchain for Arm
。
从这里下载
提炼
在环境变量中将其位置设置为GNUARMEMB_TOOLCHAIN_PATH
。
安装Python
和pip
,然后安装nrfutil
。
$ pip install nrfutil# 如果安装成功但验证失败则重新启动# 如果错误仍然存在,请尝试更新 pip 本身。
安装Xcode (>=10.1)
。
使用 HomeBrew 安装gcc6
。
$ 酿造安装 gcc6
使用 HomeBrew 安装CMake
。
$ 酿造安装cmake $brew 升级 cmake
如果版本低于要求,请从源安装CMake
。
安装 vcpkg。
$ git 克隆 https://github.com/Microsoft/vcpkg/ $ cd vcpkg $ git checkout 标签/2020.04 $ ./bootstrap-vcpkg.sh
然后将 vcpkg 位置添加到PATH
和VCPKG_ROOT
环境变量中。
仅当您想要编译自己的connectivity
HEX 文件时才需要执行以下步骤。
安装GNU Embedded Toolchain for Arm
。
从这里下载
提炼
在环境变量中将其位置设置为GNUARMEMB_TOOLCHAIN_PATH
。
安装Python
和pip
,然后安装nrfutil
$ pip install nrfutil# 如果安装成功但验证失败则重新启动
安装 vcpkg 依赖项。
# cd <pc-ble-driver-root-folder># 确保设置 %VCPKG_ROOT% 并将其添加到 %PATH%$ mkdir build && cd build $ vcpkg 安装 asio catch2 spdlog
CMake 根据本文选择要使用的 Visual Studio 编译器:在命令行上构建 C/C++ 代码
$ cmake -G 忍者 ..
编译
$ cmake --build .
(可选)使用--config
选项选择构建配置。通常可以使用Debug
、 Release
、 MinSizeRel
和RelWithDebInfo
。例如:
$ cmake --build . --配置调试
安装 vcpkg 依赖项。
# cd <pc-ble-driver-root-folder># 确保 $VCPKG_ROOT 已设置并添加到 $PATH$ mkdir build && cd build $ vcpkg 安装 asio catch2 spdlog
CMake
$ cmake -G忍者 ..
(可选)使用-DCMAKE_BUILD_TYPE
选项选择构建配置。通常可以使用Debug
、 Release
、 MinSizeRel
和RelWithDebInfo
。
(可选)使用-DARCH
选项选择目标体系结构(32 或 64 位)。这些值可以是x86_32
、 x86_64
、 x86_32,x86_64
。例如:
$ cmake -G忍者 -DCMAKE_BUILD_TYPE=调试 -DARCH=x86_32,x86_64 ..
编译
$ cmake --build .
pc-ble-driver
。确保设置了以下环境变量:
VCPKG_ROOT
GNUARMEMB_TOOLCHAIN_PATH
确保以下路径已添加到 PATH:
VCPKG_ROOT
mergehex
按照以下步骤在特定平台上安装依赖项:
设置环境
# cd <pc-ble-driver-root-folder>$ SET "PATH=%PATH%;%ALLUSERSPROFILE%chocolateybin"# 确保已按照本节开头所述设置环境变量#
CMake
$ mkdir build && cd build# 修改 -DCONNECTIVITY_VERSION=abc$ cmake -G Ninja -DCOMPILE_CONNECTIVITY=1 -DCONNECTIVITY_VERSION=1.0.0 ..
COMPILE_CONNECTIVITY
设置为 1 以启用编译连接固件。
CONNECTIVITY_VERSION
定义编译的连接固件的版本。
检查在 Windows 上编译 pc-ble-driver 的更多选项
编译
$ cmake --build . --目标编译连接
编译后,HEX 文件位于hex/sd_api_v<x>
文件夹中。它们包括 SoftDevice 和连接应用程序。
设置环境
# cd <pc-ble-driver-root-folder>$ export TMP=/tmp# 确保已按照本节开头所述设置环境变量#
CMake
$ mkdir build && cd build# 修改 -DCONNECTIVITY_VERSION=abc$ cmake -G忍者 -DCOMPILE_CONNECTIVITY=1 -DCONNECTIVITY_VERSION=1.0.0 ..
COMPILE_CONNECTIVITY
设置为 1 以启用编译连接固件。
CONNECTIVITY_VERSION
定义编译的连接固件的版本。
检查在 Ubuntu Linux 或 macOS 上编译 pc-ble-driver 的更多选项
编译
$ cmake --build . --目标编译连接
编译后,HEX 文件位于hex/sd_api_v<x>
文件夹中。它们包括 SoftDevice 和连接应用程序。
如果尚未安装 nRF5x 命令行工具,请转至安装工具。
要使用此库,您需要对 nRF5x IC 上的连接固件进行编程
使用 nRF5x 命令行工具对 IC 进行擦除和编程:
$ nrfjprog -f NRF5<x> -e $ nrfjprog -f NRF5<x> --program hex/sd_api_v<x>/connectivity_<ver>_<baudrate>_with_s<x>_<a>.<b>.<c>.hex
或者,使用 nRF Connect Programmer 对 IC 进行擦除和编程。
某些套件(例如 pca10059 nRF52 加密狗)没有板载调试器,必须通过串行 DFU 进行编程。在 Windows 上,需要设备驱动程序才能让操作系统正确检测到套件。要安装所需的驱动程序,请确保您安装了最新的 nRF Connect for Desktop。
可以通过命令行或 nRF Connect for Desktop 通过串行 DFU 对连接固件进行编程。
使用 nrfutil 进行设备固件升级通常分两步完成:1:生成 DFU zip 包,2:执行 DFU 过程。 DFU zip 包已预先制作并包含在该存储库中。要使用 nrfutil 和预制的 DFU 包运行 DFU 过程:
nrfutil dfu usb-serial -pkg connectivity_x.x.x_usb_with_s<x>_<a>.<b>.<c>_dfu_pkg.zip -p <serial port>
这些示例是使用pc-ble-driver
进行开发的良好起点。示例包括心率监测器(BLE 外设)和心率收集器(BLE 主设备),并展示了基于pc-ble-driver
构建的应用程序的基本结构。
要快速启动并运行示例,请参阅示例/README.md。
如果您在安装 pc-ble-driver 过程中遇到问题,请参阅 Issues.md。
请随意通过创建拉取请求来提出更改。
如果您计划进行任何重要的更改,请从小处开始,并在投入太多工作之前征求意见。如果拉取请求不太适合当前产品路线图,则可以拒绝该拉取请求。
为了接受您的拉取请求,我们需要您签署我们的贡献者许可协议 (CLA)。提交第一个拉取请求后,您将看到执行此操作的说明。
如果您发现任何错误,或者有疑问或其他反馈,请在 Nordic DevZone 门户上提交帖子。请注意,错误报告应足够详细地描述如何重现错误。
有关详细信息,请参阅许可证文件。