Zephyr添加nrf52_moderate
本文说明如何在zephyr中添加nrf52_moderate, 并描述如何建立和编译测试app,将编译后的app在CoreBoard上运行。
概述 链接到标题
nrf52_moderate是用于研究zephyr和建立iot测试程序的一个DIY开发板,硬件上计划分为三部分:
- CoreBoard: 只包含nrf52832的核心电路,上电后可以直接运行测试程序硬件介绍
- MotherBoard: 包含较丰富的资源,例如传感器,控制器,以太网模块等等,包含一个CoreBoard的底座,插上Coreboard后可上单运行硬件介绍
- ModeRateBoard: 资源有限的母板,插入Coreboard后通过电池供电,作为一个iot节点**[TODO]**
本文以CoreBoard为目标板,将其加入到zephyr,并编译运行。
添加Board 链接到标题
建立board文件 链接到标题
zephyr允许board文件夹脱离于zephyr主目录,为了方便管理我把nrf52_moderate CoreBoard的board文件夹独立出来,CoreBoard以nrf52832为CPU,而zephyr已经有不少以nrf52832为CPU的board因此只用任意参照一种建立Board即可, 这里我们直接参考96b_nitrogen。
mkdir -p ~/work/project/nrf52_moderate/boards/arm
cd ~/work/project/nrf52_moderate/boards/arm
mkdir nrf52_moderate
cd ./nrf52_moderate
cp ~/work/project/zephyr/boards/arm/96b_nitrogen/* ./
将对应96b的名称全部修改如下:
frank@frank-ThinkPad-Edge:~/work/project/nrf52_moderate/boards/arm/nrf52_moderate$ tree
.
├── board.cmake
├── board.h
├── doc
│ ├── img
│ └── nrf52_moderate.rst
├── Kconfig
├── Kconfig.board
├── Kconfig.defconfig
├── nrf52_moderate_defconfig
├── nrf52_moderate.dts
└── nrf52_moderate.yaml
将下面列表中文件96b nitrogen字样都修改为nrf52_moderate
./nrf52_moderate.yaml:identifier: nrf52_moderate
./Kconfig.defconfig: default "nrf52_moderate"
./nrf52_moderate.dts: model = "Frank nrf52 moderate";
修改配置文件 链接到标题
决定相同CPU不同board的最大区别就是board的配置。其它文件保持不变,参考CoreBoard的引脚连接表进行配置nrf52_moderate_defconfig
CONFIG_ARM=y
CONFIG_SOC_FAMILY_NRF=y
CONFIG_SOC_SERIES_NRF52X=y
CONFIG_BOARD_NRF52_MODERATE=y
# Enable MPU
CONFIG_ARM_MPU_NRF52X=y
# enable uart driver
CONFIG_SERIAL=y
CONFIG_UART_NRFX=y
CONFIG_UART_0_NRF_UART=y
CONFIG_UART_0_NRF_TX_PIN=25
CONFIG_UART_0_NRF_RX_PIN=26
# enable console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
# additional board options
CONFIG_GPIO_AS_PINRESET=y
这里主要不一样是重新定义了UART RX/TX引脚
添加测试app 链接到标题
app建立 链接到标题
mkdir -p ~/work/project/nrf52_moderate/apps/
cd ~/work/project/nrf52_moderate/apps/
mkdir basetest
cd ./basetext
添加app的文件:
frank@frank-ThinkPad-Edge:~/work/project/nrf52_moderate/apps/basetest$ tree
.
├── CMakeLists.txt
├── prj.conf
└── src
└── main.c
详细参考Zephyr创建应用&模拟运行 修改prj.conf文件,添加shell功能,让其编译不进行优化
CONFIG_NO_OPTIMIZATIONS=y
CONFIG_DEBUG=y
CONFIG_CONSOLE_SHELL=y
CONFIG_KERNEL_SHELL=y
编译 链接到标题
编译环境搭建参考zephyr编译环境搭建,这篇文章说明的esp32的编译,nrf52832是基于arm-cortex-m4,这里补充说明如何搭建arm的编译环境
安装arm toolchain 链接到标题
在https://launchpad.net/gcc-arm-embedded/+download 选择下载arm toolchain,下载后解压缩到/opt下
/opt/gcc-arm-none-eabi-7-2017-q4-major/
创建arm tool set script
mkdir -p mkdir -p ~/work/project/nrf52_moderate/script
cd ~/work/project/nrf52_moderate/script
vim arm.sh
arm.sh内如如下
export GCCARMEMB_TOOLCHAIN_PATH="/opt/gcc-arm-none-eabi-7-2017-q4-major"
export ZEPHYR_GCC_VARIANT=gccarmemb
编译app 链接到标题
cd ~/work/project/nrf52_moderate/apps/basetest
mkdir build && cd build
source ~/work/project/nrf52_moderate/script/arm.sh
source ~/work/project/zephyr/zephyr-env.sh
cmake -GNinja -DBOARD=nrf52_moderate -DBOARD_ROOT=/home/frank/work/project/nrf52_moderate ..
ninja
编译完成后可以看到

- BOARD_ROOT说明: zephyr在使用独立于项目代码外的Board时,可以用BOARD_ROOT来指定Board路径,但必须满足路径下是boards/core/youbord这样的结构,例如我的就是boards/arm/nrf52_moderate。如果没有board/core是无法找到Board的
运行 链接到标题
连接 链接到标题
按照nrf52_moderate CoreBoard说明将DAPLink和CoreBoard连接好,并将DAPLink插入电脑。开启putty,以115200波特率打开/dev/ttyACM0。 DAPLink相关的安装配置将会有另外文章说明,这里不展开。
烧写 链接到标题
在~/work/project/nrf52_moderate/apps/basetest/build下执行
ninja flash
烧写成功后可以看到
同时putty打开的/dev/ttyACM0上可以看到串口的输出
