Nordic nRF51/nRF52开发环境搭建
本文将详述Nordic nRF51系列(包括nRF51822/nRF51802/nRF51422等)和nRF52系列(包括nRF52832/nRF52810/nRF52840)开发环境搭建。如果你英文比较好的话,建议直接阅读Nordic官方的getting started教程,其中Segger embedded studio开发环境搭建请参考:
https://infocenter.nordicsemi.com/index.jsp?topic=%2Fug_gsg_ses%2FUG%2Fgsg%2Fintro.html&cp=1_1_0
Keil MDK开发环境搭建请参考:
https://infocenter.nordicsemi.com/index.jsp?topic=%2Fug_gsg_keil%2FUG%2Fgsg%2Fintro.html&cp=1_1_1
我下面的文章也是对上述两篇文章的总结和归纳。
1. 强制安装项
如下工具必须安装,否则无法开发Nordic nRF51/52产品
1.1 安装IDE
Nordic nRF51/52支持Keil,GCC,IAR和SES(Segger Embedded Studio)四种IDE,大家随便选择其中一种安装即可。
-
- Keil (仅支持Windows平台) 。大家自行下载安装,这里不再赘述。
- IAR (仅支持Windows平台)。大家自行下载安装,这里不再赘述。
- SES(强烈推荐,同时支持Windows,Mac和Linux)。SES跟Keil非常像,是Segger公司为Nordic芯片量身打造的,对Nordic用户来说,永久免费。另外Nordic后续的nRF91以及nRF53系列产品都会强力支持SES,所以强烈推荐使用SES来开发和调试Nordic产品。SES支持Windows/MacOS/Linux三种平台,下载链接为:https://www.segger.com/downloads/embedded-studio。下载成功后,你将得到“Setup_EmbeddedStudio_ARM_v410a_win_x64.exe”之类的安装包(ARM Windows 64bit 版本,版本号4.10),成功安装后,SES软件启动界面如下所示:
- GCC (同时支持Windows,Mac和Linux)。GCC下载链接:https://gcc.gnu.org/。GCC和Eclipse开发环境搭建请参考:https://devzone.nordicsemi.com/tutorials/b/getting-started/posts/development-with-gcc-and-eclipse。
如果你是硬件工程师,IDE不是必须安装的,因为Nordic SDK所有例子都有已经编译好的hex文件供你使用。
1.2 安装nRF Command Line Tools (同时支持Win/Mac/Linux)
nRF5x command line tools包括Jlink驱动以及Nordic自己开发的一些命令行工具,具体包括Jlink驱动,nrfjprog,nrfutil以及mergehex等。下载链接为:https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Command-Line-Tools/Download#infotabs,选择自己的平台以及需要的版本:
以Windows系统为例,下载上图中的红圈中的win32版本,得到“nRF5x-Command-Line-Tools_9_8_1_Installer.exe”之类的可执行文件,双击安装,界面如下所示:
安装过程中,不要去更改默认选项,直接按照默认选项去安装即可。不过如下界面,一定要选择“select all”
1.3 安装nRF5 SDK
nRF5 SDK就是一个压缩包,所以在Windows,MacOS以及Linux系统上都可以运行。SDK包含所有外设的驱动代码,大量的HAL库,丰富的应用例子,以及与本版本SDK配套的各种协议栈hex等。SDK下载链接为:https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK/Download#infotabs,nRF52系列产品开发请选择最新版SDK,目前为SDK16.0.0。由于最新版SDK不支持nRF51系列产品,所以开发nRF51系列产品推荐使用SDK12.3.0. 下完之后,你将得到 “nRF5_SDK_15.2.0_9412b96.zip”之类的压缩包,解压缩该压缩包,SDK即安装完成。SDK16.0.0解压缩后界面如下所示:
欲了解更多SDK知识,请参考:Nordic nRF5 SDK和softdevice介绍
1.4 SDK插件安装
下面按照SES,Keil5,Keil4,IAR和GCC等情形分别讲述SDK插件的安装。
1.4.1 SES平台
SES平台无需安装任何插件。如果要把老的Keil工程(SDK14.0之前的Keil项目)导入到SES中,需要安装一个package,如下:
另外nRF5 SDK有一个非常重要的配置文件:sdk_config.h,这个文件的格式是按照CMSIS规范来写的,所以Keil可以原生态的支持这个文件格式,也就是说,Keil用户可以通过图形界面去更改sdk_config.h里面的内容,如下所示:
SES用户可以添加如下脚本,以通过外部工具(CMSIS Configuration Wizard)来图形化解析sdk_config.h文件:
打开SES,选择 File -> Open Studio Folder... -> External Tools Configuration,然后tools.xml文件将会打开,在 </tools>行之前插入如下文本 :
<item name="Tool.CMSIS_Config_Wizard" wait="no">
<menu>&CMSIS Configuration Wizard</menu>
<text>CMSIS Configuration Wizard</text>
<tip>Open a configuration file in CMSIS Configuration Wizard</tip>
<key>Ctrl+Y</key>
<match>*config*.h</match>
<message>CMSIS Config</message>
<commands>
java -jar "$(CMSIS_CONFIG_TOOL)" "$(InputPath)"
</commands>
</item>
注意:由于CMSIS Configuration Wizard是一个Java应用程序,所以你必须先安装Java运行时环境(JRE)才能运行该工具。
然后你可以通过如下界面编辑sdk_config.h文件:
1.4.2 Keil5/Windows平台
ARM CMSIS安装,CMSIS安装包下载地址:https://github.com/ARM-software/CMSIS/releases。从如下界面选择你需要的CMSIS版本。那具体选择哪个CMSIS版本呢?你可以随便打开SDK中的一个例子,然后Keil5会告诉你缺少哪个版本的CMSIS(一般来说,缺少的都是CMSIS4.5.0),你再把它下下来即可。
ARM CMSIS4.5.0 Windows/Keil5安装界面如下所示:
Device family pack(又称nRF MDK)安装,nRF MDK下载链接为:https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-MDK/Download#infotabs,选择你的IDE和平台(Keil5选择pack哦,BSD license和Nordic license二选其一即可,SDK17推荐使用BSD license,SDK16推荐使用Nordic license)以及相应的版本(版本选择说明请见后文),如下:
nRF MDK安装界面如下所示(安装过程中有可能会报错,不要管它!)
这里要特别强调一下Device family pack版本的选择,不是说选择最新版本就好,而是要遵循你SDK例子里面Keil工程的提示,Keil提示你选择哪个版本,你就用那个版本(而不是选择最新的版本)。比如SDK16.0.0,提示你下载8.27.0版本,那你就下载8.27.0(8.27.1也是可以的,因为两者是兼容的,但是8.28及以后就不行)。注:你也可以直接打开如下界面去查看本版本SDK例子依赖的device family pack版本,如下所示:
重要提示:请不要让Keil自动下载Device family pack,请按照上面的方法,手动去官网下载和安装,否则极有可能出现编译失败的情况。
Nordic SDK原生态的例子都是开箱即用,直接就可以编译和运行的。如果你原生态的SDK例子都会编译报错的话,那么很有可能就是device family pack搞错了,或者可能是你安装了多个版本的device family pack,但安装的时候没有按照“低版本先装高版本后装”的顺序去装。此时建议你把所有已经安装好的device family pack都卸载了(卸载界面见下图),然后按照低版本先装高版本后装的顺序,把有关的device family pack都重装一遍,然后重新把Nordic原始SDK压缩包解压,此时再去编译,应该就不会有问题了。
1.4.3 Keil4/Windows平台
Keil4只需安装SDK自带的如下插件即可:
1.4.4 IAR/Windows平台
IAR只需安装SDK自带的如下插件即可:
SDK IAR例子默认都使用IAR7进行测试和开发的,由于IAR8和IAR7有一点点不兼容,使用IAR8直接编译某些带库的例子会报错,请参考SDK目录:nRF5_SDK_15.x\documentation里面的release_notes.txt中提供的解决方案来解决IAR8编译报错问题。
1.4.5 GCC平台
GCC无需安装任何插件,需要注意的是编译器的版本以及一些环境变量的设置。另外GCC平台下也可以使用CMSIS Configuration Wizard工具来图形化配置sdk_config.h文件,命令为:make sdk_config。 注意:由于CMSIS Configuration Wizard是一个Java应用程序,所以你必须先安装Java运行时环境(JRE)才能运行该命令。
2. 推荐安装项
- 安卓版nRF connect或者iOS版nRF connect。nRF connect是Nordic开发的一个通用性BLE app,支持BLE扫描,BLE连接,BLE广播,BLE交互,BLE监视,BLE服务发现等多种功能。iOS版nRF connect请到苹果app store下载,搜索“nRF”即可以找到。安卓版nRF connect是放在Google play里面的,如果你无法访问Google play,那么可以到Nordic Github官网上下载,下载链接为:https://github.com/NordicSemiconductor/Android-nRF-Connect/releases,安装成功后,你将看到如下所示的nRF connect。注:nRF connect源代码是不向用户开放的。
- 桌面版nRF connect (同时支持Windows/MacOS/Linux平台)。下载链接为:https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-desktop/Download#infotabs,选择你的平台和版本。
桌面版nRF connect安装成功后,将如下所示:
确切地说,桌面版nRF connect更像一个容器,它可以装载各种不同的应用,前面提到的手机版nRF connect只是桌面版nRF connect的一个“Bluetooth Low Energy”应用。点击“Add/remove apps”,可以安装或者卸载Nordic其他的应用。另外,你也可以基于桌面版nRF connect(使用HTML5或者Javascript)来开发自己的应用,比如量产测试程序。
注:桌面版nRF connect前身是Master Control Panel(MCP),Nordic现已正式停止对MCP的支持,MCP所有功能都可以通过桌面版nRF connect来取代和实现。
3. 可选安装项
- 安卓版或者iOS版nRF toolbox。nRF toolbox是Nordic开发的一系列BLE应用集,包括心率应用,蓝牙透传应用,DFU等。iOS版nRF toolbox请到苹果app store下载,搜索“nRF”即可以找到。安卓版nRF toolbox是放在Google play里面的,如果你无法访问Google play,那么可以到Nordic Github官网上下载,下载链接为:https://github.com/NordicSemiconductor/Android-nRF-Toolbox/releases。nRF Toolbox代码(包括iOS版和安卓版)是开源的,可以直接到上述Nordic Github上下载。安装成功后,你将看到如下所示的nRF toolbox:
- nrfjprog(强制安装,同时支持Windows/MacOS/Linux平台)。nrfjprog是一个命令行工具,通过命令行的方式进行代码擦除烧写读取,芯片复位,存储器/寄存器访问等,其使用界面(Windows命令行或者Linux命令行或者MacOS命令行)如下所示:
由于在安装nRFx command line tools的时候,系统就会自动安装nrfjprog,因此你不需要再额外安装nrfjprog。对于Windows系统,nrfjprog将位于如下目录“C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin” ,你只需在Windows path变量(环境变量)中包含此目录,就可以直接在Windows CMD中执行nrfjprog命令了。
nrfjprog详细说明请直接参考help,命令nrfjprog –help,或者参考网上文档:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fug_nrf5x_cltools%2FUG%2Fcltools%2Fnrf5x_nrfjprogexe.html&cp=6_1_3
- nrfutil(强制安装,同时支持Windows/MacOS/Linux平台)。nrfutil有两个不兼容的版本:传统版(版本号0.5.2)和现代版(版本号大于1.5.0)。nrfutil版本是跟SDK版本紧密配合的,不同的SDK版本要求使用不同版本的nrfutil。最新版本的nrfutil支持SDK12.0之后的所有SDK。
- SDK12.0及以后版本SDK,请使用现代版nrfutil。现代版nrfutil支持的功能比较多,包括生成DFU用的zip包,生成settings page,生成密钥,执行DFU操作等,SDK12.0之后都必须使用现代版nrfutil。现代版nrfutil又包括很多版本,有些老版本的现代版nrfutil跟最新的SDK也是不兼容的,所以务必参考SDK中BootLoader例程的说明文档,选择正确版本的nrfutil。现代版nrfutil是通过Python来安装和使用的,安装命令:pip install nrfutil(MacOS安装命令为:pip install --ignore-installed six nrfutil)。另外Windows系统安装过程中有可能会缺少MSVC,请下载 Visual Studio 2013 或者Visual Studio 2015
- SDK11.0及更早版本SDK,请使用传统版nrfutil,即0.5.2版,主要用于明文OTA/DFU时生成手机端新固件zip包。安装nRFgo studio的时候,会自动安装传统版nrfutil,传统版nrfutil所在目录为“C:\Program Files (x86)\Nordic Semiconductor\nRFgo Studio”。 你只需在Windows path变量(环境变量)中包含此目录,就可以直接在Windows CMD中执行nrfutil命令了
-
- 记住,传统版nrfutil和现代版nrfutil是两个完全不兼容的软件,使用的时候一定要二选其一。一般来说只有在早期的SDK9/10/11进行明文DFU的时候,才会用到传统版nrfutil,除此之外,都要使用现代版nrfutil的。可通过“nrfutil version”来得知当前nrfutil的版本号,如果发现nrfutil版本弄错了,请通过修改Windows path变量(环境变量)来指向正确的nrfutil版本。
nrfutil详细使用说明请参考:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fug_nrfutil%2FUG%2Fnrfutil%2Fnrfutil_intro.html&cp=6_5
- nRFgo studio(仅支持Windows)。图形化的Flash烧写工具,以及nRF24系列开发工具,而且还集成有DTM,DFU升级等功能,不过随着桌面版nRF connect功能越来越多,nRFgo studio越来越被边缘化,因为nRFgo studio所有功能都可以被桌面版nRF connec所取代,比如Flash烧写,DFU,DTM等。nRFgo studio下载链接为:https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRFgo-Studio/Download#infotabs。安装nRFgo studio的时候,请按照默认选项来安装(不要去更改默认的安装目录!),安装成功后,界面如下所示:
注:nRFgo studio安装包也自带Jlink驱动安装包,如果你前面通过nRF5x command line tools已经把jlink驱动装好了,那么安装nRFgo studio的时候就不要再安装Jlink驱动了。
- nRF Sniffer。nRF Sniffer用于抓取空中蓝牙包以debug通信问题,nRF sniffer包括硬件和软件两部分,硬件可以选择PCA10040开发板,PCA10056开发板,PCA10059 dongle,PCA10028开发板等,硬件连接图如下所示:
软件就是Wireshark,界面如下所示:
nRF Sniffer详细使用说明请参考:https://infocenter.nordicsemi.com/pdf/nRF_Sniffer_UG_v2.1.pdf?cp=6_4_0