小白学习-蓝牙-01-NRF51822环境搭建


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,如下
MDK

1.2.1.1. 工程依赖版本查看

依赖版本

1.2.2. 堆栈资源使用

通过官方在线文档查询: https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s130.sds%2Fdita%2Fsoftdevices%2Fs130%2Fmem_usage%2Fmem_resource_reqs.html&anchor=mem_resource_reqs__table_ayk_4lp_3r

1.2.2.1. Memory资源映射表

memory资源映射表

1.2.2.2. S130协议栈资使用

S130协议栈使用

1.2.2.3. 调用栈和堆

  • S130的调用栈最大会使用1536 bytes,所以我们在编程的时候要留意应用层的栈使用;
  • S130协议栈不使用堆空间
    调用栈和堆

    1.2.2.4. Keil 堆栈设置

    通过分析S130的堆栈使用情况,由于查看NRF51822的堆栈大小分别为 256kB of Flash and 16kB of RAM于是设置堆栈如下图:
    keil堆栈设置
    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. 官方文档

1.7. Date:2021-03-13

1.8. nRF51822 日志配置

1.8.1. 使用串口或j-link输出日志

可以设置串口或j-link 输出,同时还能配置日志颜色等参数。

  • J-Link RTT Viewer 配置
    jlink_rtt
  • SDK Config 配置 配置
    log_config
  • 下载固件查看日志,如图J-Link RTT Viewer显示 嘿嘿~
    log

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

printf_02

第三步、
添加如下文件: 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.
printf_01
第四步、初始串口
代码如下

void uart_error_handle(app_uart_evt_t * p_event)
&#123;
    if (p_event->evt_type == APP_UART_COMMUNICATION_ERROR)
    &#123;
        APP_ERROR_HANDLER(p_event->data.error_communication);
    &#125;
    else if (p_event->evt_type == APP_UART_FIFO_ERROR)
    &#123;
        APP_ERROR_HANDLER(p_event->data.error_code);
    &#125;
&#125;
void openPrintf( void )
&#123;
    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 =
      &#123;
          RX_PIN_NUMBER,
          TX_PIN_NUMBER,
          RTS_PIN_NUMBER,
          CTS_PIN_NUMBER,
          APP_UART_FLOW_CONTROL_ENABLED,
          false,
          UART_BAUDRATE_BAUDRATE_Baud115200
      &#125;;

    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);
&#125;

1.9. VsCode插件-Keil Assistant

忍受不了Keil这个IDE的界面和风格,寻思一款在VsCode的解决方法,终于得知有一物,名曰: Keil Assistant,可以完美解决我的痛点。[^RUNOOB]

1.9.1. Keil Assistant 配置

第一步、安装插件
Keil Assistant
第二部、配置插件
注意: 这个步骤只是配置Keil这个IDE能被插件识别到,工程具体的配置参数(如:芯片选型、IROM IRAM…)还需先用keil配置;
keill_config
keil_config1
第三步、编译下载
build

例程分析-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]: 菜鸟教程 – 学的不仅是技术,更是梦想!!!


文章作者: Alex.Lin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex.Lin !
 上一篇
日志打印 日志打印
这是你自定义的文章摘要内容,如果这个属性有值,文章卡片摘要就显示这段文字,否则程序会自动截取文章的部分内容作为摘要
2021-03-17 Alex.Lin
下一篇 
ESP32-Wemos开发板 ESP32-Wemos开发板
这是你自定义的文章摘要内容,如果这个属性有值,文章卡片摘要就显示这段文字,否则程序会自动截取文章的部分内容作为摘要
2021-02-22 Alex.Lin
  目录