1. nRF-51822_xxAA 记录笔记
- 1. nRF-51822_xxAA 记录笔记
1.1. Date:2021-03-12
1.2. SDK 说明
Nordic 有两套独立的SDK,分别为开发SDK和**协议栈SDK(softdevice)**。
这两个SDK必须配套使用,每一个版本的SDK都包含了该版本支持的所有softdevice,请到SDK根目录\components\softdevice目录查看具体支持的softdevice类别和版本;
1.2.1. Device family pack(nRF MDK)
nRF MDK,必须和SDK配套使用,不同的SDK 对应不同的nRFMDK,从下载回来的SDK版本为:nRF5_SDK_12.3.0_d7731ad中的release_notes.txt 可以看到知道的nRF MDK,如下
1.2.1.1. 工程依赖版本查看
1.2.2. 堆栈资源使用
1.2.2.1. Memory资源映射表
1.2.2.2. S130协议栈资使用
1.2.2.3. 调用栈和堆
- S130的调用栈最大会使用
1536 bytes
,所以我们在编程的时候要留意应用层的栈使用; - S130协议栈不使用堆空间
1.2.2.4. Keil 堆栈设置
通过分析S130的堆栈使用情况,由于查看NRF51822的堆栈大小分别为256kB of Flash and 16kB of RAM
于是设置堆栈如下图:Flash/RAM 起始地址 size Flash 0x1B000 0x25000 RAM 0x200013C8 0x2C38 RAM 0x20001FE8 0x2018
1.3. 相关下载地址
- SDK 官网下载地址: https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK/Download#infotabs
- 调试工具桌面版nRF connect (同时支持Windows/MacOS/Linux平台): https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-desktop/Download#infotabs
1.4. SDK命名规范
1.4.1. Softdevice命名规则一
Softdevice包括两种底层协议栈:BLE和ANT,BLE包括两种角色:central(又称master)和peripheral(又称slave),为此需要给这些不同类型的协议栈进行命名区分。协议栈命名格式为Sxyz,其中 - x – 表示协议栈的类型,1表示BLE协议栈,2表示ANT协议栈,3表示同时支持BLE和ANT
- y – 表示BLE角色,1表示从设备,2表示主设备,3表示同时支持主设备和从设备
- z – 表示芯片类型,0表示nRF51系列,2表示nRF52系列
比如S110,表示只支持从设备模式的nRF51 BLE协议栈
比如S130,表示既支持从设备模式又支持主设备模式的nRF51 BLE协议栈
比如S132,表示既支持从设备模式又支持主设备模式的nRF52 BLE协议栈
比如S212,表示nRF52 ANT协议栈
比如S332,表示nRF52既支持BLE协议栈又支持ANT协议栈,而且BLE协议栈既支持从设备模式又支持主设备模式1.4.2. Softdevice命名规则二
大体上跟命名规则1相同,但是协议栈编号最后2位跟芯片型号一样,比如S140,代表这个协议栈专门用于nRF52840。由于52840 Flash空间很大,没有必要做各种细分的协议栈,S140协议栈是一个大而全的协议栈,包含蓝牙所有功能。 - Softdevice版本编号,从1.0.0开始编号,然后2.0.0,3.0.0,…S110最新版本是8.0.0,S130最新版本是2.0.1,S132/S140/S112最新版本是7.0.0。
- SDK和softdevice兼容性问题。不要查看兼容性表格,直接打开SDK,直接使用SDK里面的softdevice,肯定没有问题。比如S132 在SDK如下文件夹中:
1.5. 官方板子
板子 芯片 区别 PCA10001 nRF51822-QFAA 硬件和PCA10028一样 PCA10028 nRF51422-QFAC
1.6. 官方文档
- 在线帮助文档: https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fexamples.html&cp=5_1_4
- BLE在线功耗计算工具 :
- Nordic Github : https://github.com/NordicSemiconductor
1.7. Date:2021-03-13
1.8. nRF51822 日志配置
1.8.1. 使用串口或j-link输出日志
可以设置串口或j-link 输出,同时还能配置日志颜色等参数。
- J-Link RTT Viewer 配置
- SDK Config 配置 配置
- 下载固件查看日志,如图J-Link RTT Viewer显示 嘿嘿~
1.8.2. 使用Printf函数从串口输出日志
第一步、
需要把retarget.c 从SDK中拷贝出来(xx\nRF5_SDK\nRF5_SDK_12.3.0_d7731ad\components\libraries\uart\retarget.c),放到工程下,因为默认重定义的fputc,函数不会打印,需要改为以下:
改前:
int fputc(int ch, FILE * p_file)
{
UNUSED_PARAMETER(p_file);
UNUSED_VARIABLE(app_uart_put((uint8_t)ch));
return ch;
}
改后:
int fputc(int ch, FILE * p_file)
{
UNUSED_PARAMETER(p_file);
app_uart_put((uint8_t)ch);
return ch;
}
第二步、
添加配置,在sdk_config.h
中添加以下配置
#ifndef UART_ENABLED
#define UART_ENABLED 1
#endif
// <q> APP_FIFO_ENABLED - app_fifo - Software FIFO implementation
#ifndef APP_FIFO_ENABLED
#define APP_FIFO_ENABLED 1
#endif
// <e> APP_UART_ENABLED - app_uart - UART driver
//==========================================================
#ifndef APP_UART_ENABLED
#define APP_UART_ENABLED 1
#endif
// <q> RETARGET_ENABLED - retarget - Retargeting stdio functions
#ifndef RETARGET_ENABLED
#define RETARGET_ENABLED 1
#endif
第三步、
添加如下文件: nRF5_SDK\nRF5_SDK_12.3.0_d7731ad\components\libraries\uart\app_uart_fifo.c
,nRF5_SDK_12.3.0_d7731ad\components\libraries\fifo\app_fifo.c
,nRF5_SDK_12.3.0_d7731ad\examples\ble_peripheral\experimental_ble_app_blinky\retarget.c
.
第四步、初始串口
代码如下
void uart_error_handle(app_uart_evt_t * p_event)
{
if (p_event->evt_type == APP_UART_COMMUNICATION_ERROR)
{
APP_ERROR_HANDLER(p_event->data.error_communication);
}
else if (p_event->evt_type == APP_UART_FIFO_ERROR)
{
APP_ERROR_HANDLER(p_event->data.error_code);
}
}
void openPrintf( void )
{
ret_code_t err_code;
#define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
#define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */
const app_uart_comm_params_t comm_params =
{
RX_PIN_NUMBER,
TX_PIN_NUMBER,
RTS_PIN_NUMBER,
CTS_PIN_NUMBER,
APP_UART_FLOW_CONTROL_ENABLED,
false,
UART_BAUDRATE_BAUDRATE_Baud115200
};
APP_UART_FIFO_INIT(&comm_params,
UART_RX_BUF_SIZE,
UART_TX_BUF_SIZE,
uart_error_handle,
APP_IRQ_PRIORITY_LOWEST,
err_code);
APP_ERROR_CHECK(err_code);
}
1.9. VsCode插件-Keil Assistant
忍受不了Keil这个IDE的界面和风格,寻思一款在VsCode的解决方法,终于得知有一物,名曰: Keil Assistant,可以完美解决我的痛点。[^RUNOOB]
1.9.1. Keil Assistant 配置
第一步、安装插件
第二部、配置插件
注意: 这个步骤只是配置Keil这个IDE
能被插件识别到,工程具体的配置参数(如:芯片选型、IROM IRAM…)还需先用keil配置;
第三步、编译下载
例程分析-experimental_ble_app_blinky
2012-03-14
SDK介紹(nRF5_SDK_12.3.0_d7731ad)
nRF5_SDK_12.3.0_d7731ad
├── components # Nordic SDK 源码
│ ├── ant # ANT相关代码
│ ├── ble # BLE相关代码
│ ├── boards # 开发板代码
│ ├── device # SoC寄存器定义相关代码
│ ├── drivers_ext # Nordic开发,但是使用的第三方设备
│ ├── drivers_nrf # SoC开发的一些外设
│ ├── libraries # 库以及一些源码
│ ├── nfc # NFC相关
│ ├── proprietary_rf # Nordic私有2.4G代码
│ ├── serialization # 串行接口相关代码
│ ├── softdevice # 本SDK支持的协议栈(hex文件),以及API和说明文档
│ └── toolchain # 相关编译器对应的启动文件
├── documentation # SDK 发布说明和各种说明,包含API SDK 等说明
├── examples # 例程
│ ├── ant #
│ ├── ble_central #
│ ├── ble_central_and_peripheral #
│ ├── ble_peripheral # BLE从模式代码例程,包含两类,以ble_app_xxx:SDK稳定的例程;experimental_ble_app_xxx:一些新特性或者新例程,里面可能有bug或者步稳定,需要自己做稳定性测试;
│ ├── crypto # 加密算法应用例程
│ ├── dfu # boot loader 示例代码
│ ├── dtm # DTM(Direct Test Mode)测试设备相关代码
│ ├── multiprotocol # BLE,ANT,2.4G 同时工作例程
│ ├── nfc # NFC例程
│ ├── peripheral # 外设驱动例程
│ └── proprietary_rf # 私有2.4G例程
├── external # 第三方库或者源码
│ ├── cifra_AES128-EAX #
│ ├── fatfs #
│ ├── freertos #
│ ├── micro-ecc #
│ ├── nano-pb #
│ ├── nfc_adafruit_library #
│ ├── nrf_cc310 #
│ ├── protothreads #
│ ├── rtx #
│ ├── segger_rtt #
│ └── tiny-AES128 #
└── svd #
[^RUNOOB]: 菜鸟教程 – 学的不仅是技术,更是梦想!!!