Zephyr添加nrf52_moderate

Creative Commons
本作品采用知识共享署名

本文说明如何在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。

1
2
3
4
5
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的名称全部修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

1
2
3
./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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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建立

1
2
3
4
mkdir -p ~/work/project/nrf52_moderate/apps/
cd ~/work/project/nrf52_moderate/apps/
mkdir basetest
cd ./basetext

添加app的文件:

1
2
3
4
5
6
frank@frank-ThinkPad-Edge:~/work/project/nrf52_moderate/apps/basetest$ tree 
.
├── CMakeLists.txt
├── prj.conf
└── src
└── main.c

详细参考Zephyr创建应用&模拟运行
修改prj.conf文件,添加shell功能,让其编译不进行优化

1
2
3
4
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下

1
/opt/gcc-arm-none-eabi-7-2017-q4-major/

创建arm tool set script

1
2
3
mkdir -p mkdir -p ~/work/project/nrf52_moderate/script
cd ~/work/project/nrf52_moderate/script
vim arm.sh

arm.sh内如如下

1
2
export GCCARMEMB_TOOLCHAIN_PATH="/opt/gcc-arm-none-eabi-7-2017-q4-major"
export ZEPHYR_GCC_VARIANT=gccarmemb

编译app

1
2
3
4
5
6
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

编译完成后可以看到
build

  • 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下执行

1
ninja flash

烧写成功后可以看到
burn
同时putty打开的/dev/ttyACM0上可以看到串口的输出
out

参考

http://docs.zephyrproject.org/porting/board_porting.html