【Nordic】使用nRF52810常见问题

news/2024/10/22 10:40:18/

文章目录

  • 问题1:Nordic调用蓝牙协议栈Crash问题
  • 问题2:如何使用MDK下载Application和SoftDevice的HEX文件
  • 问题3:如何使用JFlash下载Application和SoftDevice的HEX文件
  • 问题4:nRF52810如何选择SoftDevice版本
  • 问题5:如何使用Nordic NRF Log

问题1:Nordic调用蓝牙协议栈Crash问题

问题描述:在初始化ble_stack_init()后,程序会被卡死无法正常运行。经过多次验证,定位Crash位置如下:

ret_code_t nrf_sdh_enable_request(void)
{......nrf_clock_lf_cfg_t const clock_lf_cfg ={.source       = NRF_SDH_CLOCK_LF_SRC,.rc_ctiv      = NRF_SDH_CLOCK_LF_RC_CTIV,.rc_temp_ctiv = NRF_SDH_CLOCK_LF_RC_TEMP_CTIV,.accuracy     = NRF_SDH_CLOCK_LF_ACCURACY};CRITICAL_REGION_ENTER();
#ifdef ANT_LICENSE_KEYret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler, ANT_LICENSE_KEY);
#elseret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler); // 程序每次运行到这里被卡死
#endif......
}

解决办法:
需要配置LFCLK时钟源为内部时钟NRF_SDH_CLOCK_LF_SRC = NRF_CLOCK_LF_SRC_RC,定时时钟校准间隔NRF_SDH_CLOCK_LF_RC_CTIV设置为16

备注:为什么需要这么设置,参考后面的的问题分析。

  • 方法1:
    在这里插入图片描述
  • 方法2:
    在这里插入图片描述
    问题分析:
    出现调用蓝牙协议后,就会卡死主要是因为Clock配置错误导致,软件配置与实际硬件未匹配。Clock control的相关配置,我们可以参考官方文档《nRF52810_PS_v1.3.pdf》。nRF52系列的Clock control图如下:

在这里插入图片描述
由上图我们可以知道,Clock control主要是分为2个部分:HFCLK(high frequency clock) 和 LFCLK(low frequency clock)。一般出现问题都是LFCLK的32.768kHz出现问题,为了降低成本32.768kHz外部晶振都会被省掉,使用内部晶振。LFCLK有3种源可以选择:

  • 32.768 kHz RC oscillator (LFRC) //使用内部晶体LFRC产生32.768kHz LFCLK时钟
  • 32.768 kHz crystal oscillator (LFXO) //使用外部晶体LFXO产生32.768kHz LFCLK时钟
  • 32.768 kHz synthesized from HFCLK (LFSYNT ) //使用内部HFCLK 分频产生32.768kHz LFCLK时钟
时钟源优缺点备注
LFRC 优点:低成本
缺点:精度低,易受温度影响
由于容易受到外部环境影响,并且精度低,所以需要定时校准。
校准是通过定时打开HCLK来校准LFRC。
LFXO 优点:精度高,不容易收到干扰。
缺点:增加硬件成本
使用这种方式,时钟精度比较高,但是会增加硬件成本。
LFSYNT 优点:低成本,精度相对高。
缺点:增加功耗
使用这种方式,会导致HFCLK长时间被打开,导致功耗上升。

备注:根据实际硬件方案和需求来设置NRF_SDH_CLOCK_LF_SRC,就可以解决上面遇到的卡死问题。

问题2:如何使用MDK下载Application和SoftDevice的HEX文件

Nordic的nRF52系列平台一般分为2个部分:

  • Application:主要是我们编程所生成的应用程序Hex文件;
  • SoftDevice:这个Nordic官网提供的蓝牙协议栈Hex文件,编程时可以直接调用它的API;

内存分区大致如下:
在这里插入图片描述

  1. Application程序下载
    使用Nordic官方SDK的测试样例测试,路径如下:nRF5_SDK_17.0.2_d674dde\examples\ble_peripheral\ble_app_uart\pca10040e\s112\arm5_no_packs
    • 通过MDK打开ble_app_uart项目。
    • 打开MDK中的魔法棒,如下图:
      -
    • 在弹出的窗口中切换到“Utilities”选项卡,然后点击“Setting”,打开编程算法窗口。(备注:使用默认配置无需修改)
      -
    • 编译工程,编译成功后点击下载应用程序到开发板。
      在这里插入图片描述
  2. SoftDevice蓝牙协议栈程序下载
    使用Nordic官方SDK的测试样例测试,路径如下:nRF5_SDK_17.0.2_d674dde\examples\ble_peripheral\ble_app_uart\pca10040e\s112\arm5_no_packs
    • 通过MDK打开ble_app_uart项目。
    • 切换到下载协议栈的工程
      在这里插入图片描述
    • 打开MDK中的魔法棒,如下图:
      在这里插入图片描述
    • 在弹出的窗口中切换到“Utilities”选项卡,然后点击“Setting”,打开编程算法窗口。(备注:将nRF52xx修改为nRF52xx SoftDevice Erase)
      在这里插入图片描述
    • 点击下载按钮,即可下载协议栈。
      在这里插入图片描述

备注:一般烧录顺序为:

  • 擦除Flash分区 // MDK工具栏“Flash” --> “Erase”
  • 烧录SoftDevice蓝牙协议栈Hex文件
  • 烧录Application程序Hex文件

问题3:如何使用JFlash下载Application和SoftDevice的HEX文件

J-Flash是SEGGER(J-Link仿真器厂商)发布的一款单独的Flash烧录软件,支持HEX和BIN格式文件烧写到Flash。J-Flash烧写速度极快,远远快于Nordic提供的下载软件nRFgo Studio。我这里展示的是SEGGER J-Flash Lite,因为它比较小巧,操作简单和J-Flash相比。

1.打开J-Flash Lite软件工具
在这里插入图片描述
2.选择我们需要下载的Device,在Manufacturer下的输入框中输入nordic Semi,然后会展示所有的Nordic的相关的IC,并选择nRF52810。
在这里插入图片描述
3.选择Interface为SWD,并点击OK。
在这里插入图片描述
4.点击Erase Chip按钮,擦除整块芯片。
在这里插入图片描述
4.选择需要下载的Application和SoftDevice的HEX文件,然后点击Program Device按钮下载固件。
在这里插入图片描述

备注:因为下载的是Hex文件,里面包含下载的Flash地址信息,所以不用担心烧录2个Hex文件会把另外一个Hex文件数据冲掉。除非是编译Application生成的HEX地址和SoftDevice的HEX文件地址有重复。

问题4:nRF52810如何选择SoftDevice版本

《nRF52810 product brief.pdf》里面有介绍nRF52810兼容的SoftDevice版本,BT协议栈相关的是S112S132ANT协议栈相关的是S212S312。具体如下:
在这里插入图片描述
S112S132都支持Bluetooth 5 protocol stack,它们之间的差异如下:

VersionDescription
S112支持Bluetooth 5.1单模式BLE协议栈:
• Peripheral x 4
• Broadcaster x 1
S132支持Bluetooth 5.1单模式BLE协议栈:
• Central
• Observer
• Peripheral
• Broadcaster

备注:只是需要Peripheral模式,一般选择S112。如果需要支持Central模式或者Central & Peripheral模式,一般选择S132

问题5:如何使用Nordic NRF Log

  1. 默认打印方式有2种:

    • 串口打印的方式,即printf()的方式
    • JLink的RTT Log打印方式
  2. 如果选择JLink的RTT Log打印方式,需要在工程添加SEGGER相关的文件
    在这里插入图片描述

  3. sdk_config.h文件中配置:

    • NRF_LOG_BACKEND_RTT_ENABLED 设置为1
    • NRF_LOG_BACKEND_UART_ENABLED 设置为0(没有就无需设置)
  4. 打开JLinkRTTViewer.exe
    在这里插入图片描述
    在这里插入图片描述


http://www.ppmy.cn/news/893799.html

相关文章

nrf52840蓝牙协议栈样例分析

蓝牙SDK的example 文件夹提供了开发BLE的模板工程,它具有通用性,可以为自己开发工程提供参考。打开examples\ble_peripheral\ble_app_template文件夹下的main.c文件,主函数main的内容为: /**brief Function for application main…

NRF52833学习笔记(1)——搭建环境、编译烧写

一、搭建环境 1.1 安装Keil 5 官网下载:http://www2.keil.com/mdk5/ 百度网盘:https://pan.baidu.com/s/1T_eF5NDYeq38bR0cqjiZkw 提取码:562z 1.2 下载SDK 官网下载:https://www.nordicsemi.com/Software-and-tools/Software…

S32K AUTOSAR S32DS工程集成-文件结构

S32K AUTOSAR S32DS工程集成-文件结构 从我的角度来看文件夹的目录,一个作用是能够熟悉autosar文件所在的目录,另一方面大部分的autosar的项目都是采用make的形式,可能也是为了方便编译吧。所以在看到的一些专业的autosar的项目工程里面都是大体相似的。我这里也算是模仿了…

NORDIC nrf52833使用笔记

文章目录 一、SoftDevice命名规则(一)、通用规则(二)、特定规则 二、nRF52833关键特性三、SoftDevice目录框架四、代码目录框架五、应用代码结构六、内存分配表(一)、不带bootloader时的内存分配&#xff0…

Spark(24):Spark内核概述

目录 0. 相关文章链接 1. Spark核心组件 1.1. Driver 1.2. Executor 2. Spark通用运行流程概述 0. 相关文章链接 Spark文章汇总 1. Spark核心组件 1.1. Driver Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。Dr…

创建一门简单的解释性编程语言并实现它的解释器

背景 最近刷到大佬的教程,跟着学一下 效果 开始时 输入姓名和年龄后 代码 自创编程语言SimpleScript: 自创一门简易脚本支持中文编程 (gitee.com) 解析 1.词法分析 将程序的每个字符串精准划分出来,形成多个单词Token 2.语法分析 将各段Token再…

注册表:HKCR, HKCU, HKLM, HKU, HKCC,注册表中常用的5种数据类型

注册表是Microsoft Windows中的一个重要数据库、用于存储系统和应用程序的系统信息。 Windows 3.0注册表已经出现Windows NT广泛使用注册表的操作系统Microsoft Windows 95成为windows用户经常接触的内容 HKEY:根键 句柄项:附加的文件夹和一个或多个值 子项&#…

wordpress仿站常用功能代码

wordpress调用代码 调用内容循环标签 目标&#xff1a;循环调用某个文章类型&#xff1b;可以设置调用的分类&#xff0c;数量&#xff0c;排序&#xff1b;显示的内容列表包括调用图片、链接、标题。 <?php // 设置查询参数 $args array(post_type > your_post_typ…