陈拓 2022/07/19-2022/07/22
1. 概述
nRF5 SDK开发环境有下面4种:
- Keil µVision IDE
- IAR Embedded Workbench
- SES SEGGER Embedded Studio
- GCC ARM Embedded
我选择GCC ARM Embedded,它是开源跨平台交叉工具链,可以选择Windows、Linux或者macOS环境进行开发。
2. 开发环境
我的开发环境是Windows Liunx子系统WSL,详细说明见:
《Win10启用Linux子系统安装Ubuntu》
https://zhuanlan.zhihu.com/p/341394468
https://blog.csdn.net/chentuo2000/article/details/112131624?spm=1001.2014.3001.5502
3. 在WSL上安装 GCC ARM Embedded
https://launchpad.net/gcc-arm-embedded
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads
asc不用下载。
x86_64 Linux hosted cross toolchains是64位Linux系统的交叉编译工具链。
AArch32 bare-metal target (arm-none-eabi) 是目标运行环境,32位的ARM芯片,编译的是裸机(bare-metal)程序。
nRF52832的内核是64 MHz的32位ARM Cortex™ M4F CPU,所以我们下载这个工具链。
wget shttps://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi.tar.xz
- 解压
tar -xvf gcc-arm-none-eabi-5_4-2016q3-20160926-mac.tar.bz2
- 查看版本
cd gcc-arm-11.2-2022.02-x86_64-arm-none-eabi
./bin/arm-none-eabi-gcc --version
4. 安装 nRF5 SDK
nRF5 SDK用来开发nRF51/52系列产品。nRF5 SDK是一个zip压缩包。
- 下载
因为原来的代码是在nRF5 SDK 14.2下开发的,我们就下载这个版本。
https://www.nordicsemi.com/Products/Development-software/nRF5-SDK/Download#infotabs
下载nRF5 SDK 14.2
只需要下载SDK就可以了。
DeviceDownload.zip
- 解压
unzip DeviceDownload.zip
ls -l nRF5_SDK_14.2.0_17b948a
设置环境变量
修改 Makefile.posix文件,配置成前面安装GCC ARM Embedded的路径:
find . -name Makefile.posix
nano /home/ccdc/nrf/nRF5_SDK_14.2.0_17b948a/components/toolchain/gcc/Makefile.posix
修改这一行:
GNU_INSTALL_ROOT := /home/ccdc/nrf/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/
5. 编译一个例程测试
测试一个LED闪烁例程。官方例程是针对官方开发板的,我们用pca10040的例程,原装的pca10040很贵。我们在项目硬件板子上测试。
- 修改代码
在VSCode中打开项目目录。
gpio的引脚定义位于
~/nrf/nRF5_SDK_14.2.0_17b948a/components/boards/pca10040.h
文件中。
nrf52832的gpio为p0.0-p0.31。
pca10040板子上有4个LED,其中LED2是在GPIO 18上:
在我们的板子上有一个LED连在P0.28上:
用我们的LED代替LED2:
- 编译
cd ~/nrf/nRF5_SDK_14.2.0_17b948a/examples/peripheral/blinky/pca10040/blank/armgcc/
make
hex文件包含地址信息,可以直接烧录。
bin文件没有包含地址信息,所以在下载bin文件时需要选择内存的起始地址。
6. 连接下载器
- ARM仿真器
- 接口
我们用SWD接口,接线图如下:
ARM仿真器 --- nRF52832
VTref --- 3.3V
SWDIO --- SWDIO
SWCLK --- SWDCLK
GND --- GND
7. 安装nrfjprog
我们用nrfjprog烧录前面编译好的hex文件。
因为WSL本身并不支持连接USB设备,虽然可以通过安装开源的usbipd-win项目连接USB设备,见:
https://docs.microsoft.com/zh-cn/windows/wsl/connect-usb
为了减少麻烦,我们在Windows环境中用nrfjprog烧录hex文件。在Windows中可以方便的访问WSL目录,所以这种方法也很实用。
- 下载nrfjprog
http://www.nordicsemi.com/
搜索下载Command Line Tools
https://www.nordicsemi.com/Products/Development-tools/nRF-Command-Line-Tools/Download
选择Windows平台版本下载:
- 安装
双击nrf-command-line-tools-10.16.0-x86.exe进行安装。
根据你的系统情况,可能还会安装VC++库:
安装nrf-command-line-tools:
一路Next,完成安装。
- 测试nrfjprog
nrfjprog -v
出错,这是因为还需安装J-Link。
8. 安装J-Link驱动软件
我的PC是Win10系统。
- 下载
https://www.segger.com/downloads/jlink/
- 安装
双击JLink_Windows_V768_x86_64.exe
默认安装。
插上ARM仿真器,在PC上在设备管理器中查看:
- 测试
运行J-Link Commander V7.68
- 查看连接状态
q退出。
- 再测试nrfjprog
nrfjprog -v
9. 用nrfjprog烧录hex文件
- 准备工作
要烧录我们前面编译好的nrf52832_xxaa.hex,为方便操作,我在D盘创建了一个临时目录nrfhex。
之前我们的编译好的hex文件在目录:
\\wsl$\Ubuntu-20.04\home\ccdc\nrf\nRF5_SDK_14.2.0_17b948a\examples\peripheral\blinky\pca10040\blank\armgcc\_build
把它拖到D:\nrfhex中
进入目录D:\nrfhex:
cd D:\nrfhex
- 清除memory
nrfjprog -f NRF52 --eraseall
- 下载烧录hex文件
nrfjprog -f nrf52 --program nrf52832_xxaa.hex -sectorerase --verify
- 重启nRF52832
nrfjprog -f nrf52 --reset
板子上的LED开始闪烁了。
参考文档
- 快速构建 nRF5 SDK + ARM GCC 开发环境
https://zhuanlan.zhihu.com/p/24604398