meishaoming / blog

MIT License
1 stars 2 forks source link

nRF52832 #52

Open meishaoming opened 5 years ago

meishaoming commented 5 years ago

nordic 的 nRF52 系列有三款产品。这三款 MCU 分别定位 低、中、高端,见 nRF52 Series 介绍页面

15447683444540

SoftDevice

SoftDevice 是跑在 MCU 上的无线协议栈。命名规则:

image

这里我要用到的 S132 就是 BLE,主+从,nRF52。(另外有一个 S140 是 nRF52840 专用)。

S132 SoftDevice 当前最新版本 v6.2

nRF5 SDK

nRF5 SDK 也有三种:

我使用 nRF5 SDK,最新版本 v15.2。

SDK 下载解压后,其中带有 SoftDevice。nRF5 SDK v15.2.0 内置 S132 SoftDevice v6.1.0 。

以前踩过编译器版本的坑,特意注意了下 SDK 描述的编译器版本 GCC: GCC ARM Embedded 6.3 2017-q2-update,下载地址

这个版本 SDK 支持的板子:

image

nRF52832

总共 48 个引脚,除去 16 个特殊功能(如电源、调试、天线等)的引脚,余下的 32 个引脚都可作 GPIO 使用,编号为:P0.00 ~ P0.31。

image

各种封装型号:

image

内存布局:

image

meishaoming commented 5 years ago

软件开发准备工作

  1. 下载 nRF5 SDK 最新版本,我这里下载的是 v15.2。 下载地址
  2. 下载 GCC ARM Embedded 6.3 2017-q2-update 编译器,解压到 /usr/local/ 下。下载地址
  3. 安装 nordic-nrf5x-command-line-tools。

nordic-nrf5x-command-line-tools

MacOS 下安装 nordic-nrf5x-command-line-tools

brew cask install nordic-nrf5x-command-line-tools

nordic-nrf5x-command-line-tools 里面有几个工具:

使用手册 nRF5x Command Line Tools v9.4.0 User Guide v1.3

烧写 blink hex

跑 blink 例子,我手上有一块开发板正好与 PCA10040 兼容。插好 JLink 之后,使用 nrfjprog 烧写:

cd nRF5_SDK_15.2.0_9412b96/examples/peripheral/blinky/hex

nrfjprog -f nrf52 --program blinky_pca10040.hex --sectorerase

nrfjprog -f nrf52 --reset

烧写 softdevice

nrfjprog -f nrf52 --program s132_nrf52_6.1.0_softdevice.hex --sectorerase

后边带的参数:

UICR - user information configuration registers

运行例子 ble_app_blinky

编译

cd /opt/nRF5_SDK/nRF5_SDK_15.2.0_9412b96/examples/ble_peripheral/ble_app_blinky/pca10040/s132/armgcc

make -j8

# 烧写协议栈,只需要烧写一次
make flash_softdevice

# 烧写 blinky 应用
make flash
  1. 手机端下载 nRF Connect
  2. 打开 nRF Connect,搜索到 Nordic_Blinky 设备,点击 Connect
  3. 点击 LED Button Service, 使能 Nordic Blinky Button 的 Nofitication。板子上按键会看到 Value 改变
  4. Nordic Blinky LED 写入 0x00 板子灯灭,写入 0x01 板子灯亮

JLink log 调试

修改代码使能 RTT 打印输出。编辑头文件:

/opt/nRF5_SDK/nRF5_SDK_15.2.0_9412b96/examples/ble_peripheral/ble_app_blinky/pca10040/s132/config/sdk_config.h

找到 NRF_LOG_BACKEND_RTT_ENABLED 的一行,改成:

#define NRF_LOG_BACKEND_RTT_ENABLED 1

重新编译,烧写应用(只需要 make flash)。

开两个终端,一个终端运行 JLinkExe:

JLinkExe -SelectEmuBySN 30000299 -If SWD -Device nRF52 -AutoConnect 1 -RTTTelnetPort 19021 -Speed 10000

另一个终端运行 JLinkRTTClient 接收 log:

JLinkRTTClient -RTTTelnetPort 19021