[下载最新版的SDK,里面有现成的SES的工程,无需再手动搭建,本文仅做参考。文末的参考链接,值得一看。]

1. 简介

SEGGER Embedded Studio(SES)是推出过J-Link的公司SEGGER推出的嵌入式开发IDE。虽然SES 比较小众,但是它有一些特别突出的优势:

(1)对非商业使用免费。

注意,是全功能、不限时免费。Keil和IAR的试用版都对二进制文件的大小有限制。

(2)编辑器很友好。

Keil与IAR的编辑器对于用户体验的忽视,简直达到了令人发指的程度。这里吐槽一下Keil,关闭标签操作连快捷键都没有,每次打开新标签都得用鼠标关闭,极其影响效率。

SES在编辑器方面做的非常用心,比如超快的智能提示,代码格式化,Ctrl+点击跳转到函数实现,等等功能。

(3)配置灵活。

举个例子,做nRF52 BLE开发,需要先下载Softdevice的Hex文件,再下载Application的Hex文件。一般都是依次下载,或者用批处理脚本。SES在设置界面预留了3个Bootloader位置,在用户程序下载前自动下载Bootloader。

(4)跨平台。

Linux跟Mac也可以快速进行嵌入式开发了。

本文利用SES搭建Nordic nRF52832的开发环境,在SES上开发调试Nordic BLE程序。

2. 下载安装

SES下载地址:https://www.segger.com/downloads/embedded-studio

我的电脑上已经安装好了Nordic SDK13和Keil 5,这也是必需的软件。

安装完毕,软件的样子如下:

SES_Dev_GUI

点开菜单项:Tools > Package Manager,下载两个项目:

  • CMSIS-CORE Support Package (不是CMSIS 5 CMSIS-CORE Support Package)
  • nRF CPU Support Package

此时软件已经装完,但是我们还需要额外下载以下几个文件:

文件 含义
ses_nrf52_startup.s 启动文件,包含了中断向量表
flash_placement_nrf52832.xml Flash布局描述文件,描述Flash和RAM的分配
thumb_crt0_nrf52832.s ARM基础文件

在SDK\component\toolchain新建一个ses文件夹,将这几个文件放这里备用。在我的电脑上路径是C:\Nordic\SDK\13.1.0\components\toolchain\ses。

3. 导入Keil工程

以ble_app_template工程为例,先用Keil运行该工程,确保能够正常编译和运行。

启动SES,打开File > Import IAR/Keil Project…,选择该Keil工程文件*.uvprojx,选择“Internal Toolchain”一项,如下:

SES_Dev_Import_Keil

打开该工程后,按F7构建工程,会报错。

第一个错误说nrf.h不存在。这是因为Keil有PACK系统,包含了该文件,SES这里需要手动添加Include目录。

执行下述步骤:

1. 选中工程Project 'ble_app_template_pca10040_s132',而非选中某个文件。

2. 点击Edit Options按钮,或菜单Project > Edit Options...。

SES的文件管理系统比较复杂,每个文件或文件夹都可以设置自己的Option,最终再进行逻辑合并形成最终的Option。所以这里要选择工程项目,然后再打开Edit Options对话框。如下图所示:

SES_Dev_Edit_Options

默认情况下,Build Configuration处显示的是SoftDevice的配置项,这里要先选中应用程序的配置项,然后找到Code > Preprocessor > User Include Directories,在里面加入../../../../../../components/device,如下图:

SES_Dev_Preprocessor

SoftDevice是Keil工程上用来方便下载SDK协议栈的编译配置项,在SES中没有用,可以直接删掉。打开菜单:Project > Build Configurations…,删除SoftDevice项,如下:

SES_Dev_Remove_Build_Config

这时再按F7编译,提示section .fs_data相关错误,说明内存布局有问题,需要配置Flash_Placement.xml和thumb_crt0.s文件。

这里不讨论这些文件的内容含义,简单讲就是告诉SES,该工程的Flash内容和RAM内容分别放在哪里。更多的信息可以参考帮助文件,讲的很清楚。

在SES的文件目录中展开Internal Files,删除Cortex_M_Startup.s和thumb_crt0.s。在该文件夹上点右键,选择Add Existing File…,添加前面下载的thumb_crt0_nrf52832.s和ses_nrf52_startup.s,同时添加C:\Nordic\SDK\13.1.0\components\toolchain\system_nrf52.c。如下图:

SES_Dev_Add_Internal_Files

选择工程文件,打开Edit Options对话框,利用搜索框功能,找到Linker > Section Placement File,输入前面下载的flash_placement_nrf52832.xml路径:

C:/Nordic/SDK/13.1.0/components/toolchain/ses/flash_placement_nrf52832.xml

这时编译一下,就可以编译成功了,会看到非常醒目的进度条:

SES_Dev_Build_Complete

如果是一个纯Peripheral工程,不包含SoftDevice,则配置到此结束。

但是本文介绍BLE工程,需要用到SoftDevice,到这里还没有完,因为Nordic nRF52832的Flash结构是下面是SoftDevice,上面是Application,所以需要设置Application存在Flash的位置,给SoftDevice留下位置。

选择工程文件,打开Edit Options对话框,找到Section Placement Macros,输入

FLASH_START=0x1F000
SRAM_START=0x20002000

然后再按F7编译一下,会看到进度条发生了变化。

SES_Dev_Flash_Placement_Config

既然给SoftDevice留下了位置,下面配置如何烧写SoftDevice。

1. 打开工程的Edit Options
2. 找到Preprocessor > Preprocessor Definitions,增加 NO_VTOR_CONFIG
3. 找到Loader > Additional Load File[0],输入
C:/Nordic/SDK/13.1.0/components/softdevice/s132/hex/s132_nrf52_4.0.2_softdevice.hex

到此,所有的配置完全结束,编译一下,连上开发板就可以下载运行了。

4. 小技巧

(1)利用工程宏变量(Project Macro),简化路径的输入

在工程的Edit Options窗口中找到Project Macros,输入:nRF52_SDK13_Dir=C:/Nordic/SDK/13.1.0

然后所有对SDK文件的引用,都可以用$(nRF52_SDK13_Dir)来代替。

比如User Include Directories里面的内容就可以变成:

$(PackagesDir)/CMSIS_4/CMSIS/Include
$(nRF52_SDK13_Dir)/components
$(nRF52_SDK13_Dir)/components/device
...

看起来更加清爽,而且不容易出错。

(2)手动编辑emProject工程文件

从Keil导入的工程,默认的Build Configuration名字为nrf52832_xxaa,以芯片型号来命名很容易引起误解。下面通过编辑emProject文件来更改这个命名。

退出SES,用记事本打开emProject文件。

找到

<configuration  Name="nrf52832_xxaa" ...

项,显然这个Name属性就是编译配置的名称,在文件内搜索该字符串,发现有两个地方用到了,直接替换成Debug,即可。

此外,从Keil导入的工程,会多一个Internal的编译配置,我不知道这个配置项是什么作用,颇为干扰,也可以通过编辑emProject文件来删除Internal配置。

(3)更改目录结构

Nordic SDK13设计的目录结构非常繁复,目录结构很深,这么做的目的是为了保持不同编译器(Keil/IAR/GCC),不同版本SDK(11/12/13)之间的形式统一,方便用户选择。

但是对于开发者,通常在一段时间内只会使用一个SDK版本和编译器版本,深目录比较麻烦。

因为编辑emProject很容易,所以我们可以把整个工程目录结构改成如下形式:

SES_Dev_Change_Project_Stucture

图中,工程目录名字是ble_template,工程文件放在工程目录中,源文件都放在source文件夹中,output是SES的输出文件。

(4)CMSIS Configuration Wizard

Nordic nRF52的SDK中,每个工程都配备一个sdk_config.h文件,配合Keil可以可视化开关某些模块,如下图:

SES_Dev_Keil_Wizard

这个可视化配置工具比较方便,而且可以避免出错。

在SES中,可以借助第三方免费工具 CMSIS Configuration Wizard实现类似的功能,在该软件中打开sdk_config.h效果如下:

SES_Dev_CMSIS_Config_Wizard

该工具下载地址:https://sourceforge.net/projects/cmsisconfig/?source=directory

参考

https://devzone.nordicsemi.com/blogs/1032/segger-embedded-studio-a-cross-platform-ide-w-no-c/

(完)

1. 开发板(DK)

目前,共有三个BLE开发板,如下:

开发板型号 主芯片 适用SDK
PCA10028 nRF51系列 SDK12
PCA10040 nRF52832 SDK12、SDK13
PCA10056 nRF52840 SDK12、SDK13

可以在infocenter网站上下载各开发板对应的用户手册:

PCA10028:http://www.nordicsemi.com/eng/nordic/download_resource/38677/1/44148122/64339

PCA10040:http://infocenter.nordicsemi.com/pdf/nRF52_DK_User_Guide_v1.2.pdf

PCA10056:http://infocenter.nordicsemi.com/pdf/nRF52840_PDK_User_Guide_v1.1.pdf

2. 软件开发工具包(SDK)

SDK是一个压缩包,它包含了:软件库文件、示例程序、API文档和IDE插件。

Nordic的SDK会持续更新,以增加新功能和修正旧错误,对应的版本号逐渐增加,目前最新的稳定版版本号为SDK 13.1.0。

SDK在更新时候会尽量考虑向下兼容,并且持续维护老版本。因此,既可以为了实现新功能而使用最新版甚至测试版,也可以在已有的产品中追求稳定而持续使用老版本。

SDK的下载地址:http://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF5-SDK

Nordic_Dev_SDK_Download_Page

下载后解压后,查看SDK的目录结构。

Nordic_Dev_SDK_structure

各项目含义如下:

文件夹 含义
components 软件库和HAL驱动的源文件和头文件
config 仅包含一个c文件,用以配置工程参数
documentation API文档链接,并可以由此下载离线文档
examples 官方示例工程
external 第三方库和驱动,比如文件系统、RTOS、NFC等
svd 芯片的SVD文件
license.txt 版权声明
IAR_NordicLicense.msi IAR开发环境的插件
Keil4_NordicLicense.msi Keil开发环境的插件

SoftDevice

SDK是Nordic芯片的软件开发工具包,其中软件库部分包含了外设驱动、HAL驱动、协议栈和所有相关的文件。

Nordic的协议栈叫做SoftDevice,它包含BLE协议栈和ANT协议栈,未来还可能包含其他协议栈。

为了区分,对支持不同协议栈的SoftDevice进行命名,具体如下:

SoftDevice名称 支持BLE 支持ANT 支持nRF51 支持nRF52
S130
S132
S212
S332
S140 √ (only for 52840)

对于BLE开发而言,目前最常用的由S130和S132,分别对应nRF51和nRF52两个系列的芯片。

3. 开发工具(IDE)

Nordic支持Keil、IAR和基于GCC的IDE开发工具。

3.1 Keil

(1)

Keil环境安装好以后,需要安装Nordic的设备支持包:NordicSemiconductor.nRF_DeviceFamilyPack.pack

Nordic_Dev_Keil_Pack_Install

这个包的版本,要与SDK的版本对应。

回顾刚才提到的SDK目录,查看最后一个文件的文件名:nRF5x_MDK_8_12_0_Keil4_NordicLicense.msi,文件命中的字符串8_12_0表示对应的DeviceFamilyPack的版本为8.12.0。更高版本的DeviceFamilyPack应该也可以使用。

(2)

此外,还需要安装必要的ARM::CMSIS包:

Nordic_Dev_SDK_Pack_Install_2

如果没有安装合适的DeviceFamilyPack或CMSIS包,在打开官方示例工程时候,Keil会弹出安装提示。

(3)

安装SDK目录下的nRF5x_MDK_8_12_0_Keil4_NordicLicense.msi。

至此,Keil环境就安装完毕。

打开SDK下的示例目录,比如:C:\Nordic\SDK\13.1.0\examples\ble_peripheral\experimental_ble_app_blinky\pca10040\s132

该目录下有两个Keil相关的文件夹:arm4和arm5_no_pack,如果是Keil4就使用arm4目录,如果是Keil5就使用arm5_no_pack。

3.2 IAR

IAR工具安装好以后,只需要安装SDK目录下的nRF5x_MDK_8_12_0_IAR_NordicLicense.msi。

同样打开SDK下的示例目录,比如:C:\Nordic\SDK\13.1.0\examples\ble_peripheral\experimental_ble_app_blinky

运行.eww项目文件即可。

由于IAR与Keil两个工具的项目结构差异,项目文件存放位置不同。

3.3 GCC

请参考官方文档:https://devzone.nordicsemi.com/tutorials/7/

4. 烧录

烧录Nordic BLE芯片,至少需要烧录2个文件:SoftDevice和用户程序。

以下情况值得注意:

(1)对于裸片,需要先烧录SoftDevice,再烧录用户程序。

(2)如果芯片已有SoftDevice,无需重复烧SoftDevice,只烧用户程序即可。

(3)SoftDevice的版本要与用户程序需求的版本一致。

Keil工具烧录SoftDevice比较方便,在选择目标文件处选择softdevice即可,如下:

Nordic_Dev_Keil_Prog_SoftDevice

IAR工具烧录SoftDevice,暂未发现方便的方法,只能先手动烧录SoftDevice的hex文件(C:\Nordic\SDK\13.1.0\components\softdevice\s132\hex),再烧录工程文件。

nRFgo_Studio

该工具具有测试和烧录功能,它可以:

  • 擦除芯片
  • 烧录SoftDevice
  • 烧录用户hex文件

Nordic_Dev_Prog_nRFgo_studio

nRF5x-Command-Line-Tools

该工具是命令行烧录工具。

按照该工具需要在Keil/IAR装好之后进行。

(完)