0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

应用笔记|Blue NRG-1/2系列芯片Flash操作与BLE事件的互斥处理

STM32单片机 来源:未知 2023-04-06 03:10 次阅读

在许多基于 BlueNRG-1/2 系列芯片的低功耗蓝牙的设计项目时,客户通常会在 Flash的特定区域存储定制的数据。然而需要特别注意的是,在 BlueNRG-1/2 方案中,用户对Flash 的读写操作必须在射频空闲的情况下进行,两者是互斥的关系。本文档描述Blue NRG-1/2系列芯片Flash操作与BLE事件的互斥处理的流程和步骤。

目录预览

1 引言

2 问题描述

3 解决办法

4 将上述方案加入客户工程的步骤示例

5 小结

1. 引言

在许多基于 BlueNRG-1/2 系列芯片的低功耗蓝牙的设计项目时,客户通常会在 Flash 的特定区域存储定制的数据。然而需要特别注意的是,在 BlueNRG-1/2 方案中,用户对 Flash 的读写操作必须在射频空闲的情况下进行,两者是互斥的关系。

2. 问题描述

客户经常反馈类似问题,诸如:当用户程序尝试将用户定制数据写入 Flash 中特定区域时,发现 BLE 射频部分停止工作,或芯片直接死机了。

2.1. 原因分析

  • 2.1.1. BlueNRG-1/2 的 Flash 存储应用数据时可能遇到这个问题。因为在擦除一页的过程中,中断会被关掉大概 20 多 ms, 在此期间,radio 中断是被关掉了的,会导致整个radio 的状态被延时或者整个 radio 部分的状态被破坏。

  • 2.1.2. ST 的 SDK 虽然提供了访问 Flash 的示例代码,但是当 Flash 操作比较多时,与蓝牙事件的互斥就比较难处理了;特别是对于一些多连接应用或者同时用了主从、多种蓝牙事件的场景,互斥就显得更麻烦了。

3.解决办法

使用一个双向链表来管理 Flash 操作(Flash 擦除或者是 Flash 写,Flash 读无需和 BLE 相关事件互斥),并使用一个双向链表来管理空余时间状态。在空余的时间执行 Flash 操作。从芯片手册可以知道,操作 Flash,特别是擦除时,会占用比较多的时间。为 了避免操作 Flash 占用过多的时间片,把每次写或者擦除 Flash,用一个列表来管理,每 次写或者擦除操作,插入 Flash 操作链表的最后。在主循环中检测是否有足够的时间写, 如果当前空闲的时间足够,取出 Flash 操作链表中最前的一个节点,执行 Flash 操作,然 后将节点移除。对于如何检测空闲时刻,也用一个链表来管理空闲时刻。具体思路如下:

第一步:初始化时需要设置 radio active 事件抛到应用。aci_hal_set_radio_activity_mask(0x0001|0x0002|0x0004|0x0008|0x0010|0x0020)

6249bf3c-d3e5-11ed-bfe3-dac502259ad0.png

第二步:设置之后,重写函数aci_hal_end_of_radio_activity_event,当有事件触发时, 就会进入这个函数。

6286e920-d3e5-11ed-bfe3-dac502259ad0.png

第三步:构造一个 Flash 操作调度函数,每次进入这个函数,生成一个空闲时刻的节点插 入到链表中。主循环中有个 Flash 操作的调度函数,不停的调度是否有数据需要写入。在 Flash 操作的调度函数中,主要做两件事情,一个是把空闲时间计算出来给到底层的 Flash 操作链表调 度中。另一个是移除过期的节点。

62a69932-d3e5-11ed-bfe3-dac502259ad0.png

第四步:构造 flash_list_tick 函数,flash_list_tick 函数主要是从 Flash 任务列表中去取节 点,当空余时间满足时,则执行相应的 Flash 操作,然后将节点从任务列表中移除,回收到空闲列表中。

62b7dbac-d3e5-11ed-bfe3-dac502259ad0.png

4.将上述方案加入客户工程的步骤示例

1. 初始化相关链表和初始化 radio 事件回调屏蔽。

62d9a552-d3e5-11ed-bfe3-dac502259ad0.png

2. 在 aci_hal_end_of_radio_activity_event 中添加空闲链表的更新函数。

63122012-d3e5-11ed-bfe3-dac502259ad0.png

3. 在主循环中调度。

6337c2b8-d3e5-11ed-bfe3-dac502259ad0.png

4. 应用操作 Flash 调用接口

63518dce-d3e5-11ed-bfe3-dac502259ad0.png

5. 小结

如果使用此方法中的 Flash 擦除,没有任何 BLE 事件时,直接调用此方法不会执行任何 Flash 的操作。所以当没有蓝牙事件时,可以使用 SDK 默认的 Flash 访问接口或者是手工调度函数,类似这样:flash_list_tick(~0u)

工程测试源码参考附件压缩包:

BlueNRG Flash vs BLE event handle source code.7z

工程路径为:

BlueNRG_Demo/BlueNRG-1_2DK 3.1.0/Project/Supply/BLE_Chat_Master_Slave_WithFlashAccess/

本文档描述Blue NRG-1/2系列芯片Flash操作与BLE事件的互斥处理的流程和步骤。由于文章篇幅有限仅展示部分信息,完整内容请点击“阅读原文”下载原文档。

636f2c58-d3e5-11ed-bfe3-dac502259ad0.png

长按扫码关注公众号

更多资讯,尽在STM32

点击“阅读原文”,可下载原文档


原文标题:应用笔记|Blue NRG-1/2系列芯片Flash操作与BLE事件的互斥处理

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634635
  • STM32
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355731

原文标题:应用笔记|Blue NRG-1/2系列芯片Flash操作与BLE事件的互斥处理

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TLC3702 TLC3704系列用笔记

    电子发烧友网站提供《TLC3702 TLC3704系列用笔记.pdf》资料免费下载
    发表于 09-20 09:14 0次下载
    TLC3702 TLC3704<b class='flag-5'>系列</b>应<b class='flag-5'>用笔记</b>

    互斥锁和自旋锁的实现原理

    保护共享资源不被多个线程同时访问。它的实现原理主要包括以下几个方面: 1. 锁的初始化 互斥锁在创建时需要进行初始化,通常包括设置锁的状态为“未锁定”。在某些实现中,还需要初始化锁的等待队列,用于存储等待锁的线程。 2. 锁的
    的头像 发表于 07-10 10:07 484次阅读

    芯海CS32F0XXTIMER外设模块应用笔记

    本应用笔记旨在展示使用CS32FOxx微控器,针对定时器外设的应用。帮助用户了解CS32FOxx定时器的基本特性、操作模式及相关应用的示例代码。提供的一些高级应用以便缩短用户开发周期。对所介绍的特定
    发表于 05-16 15:02

    芯海应用笔记:通用 MCU 基于 IAR 芯片包 IAR9 开发指南

    MCU 芯片。芯海科技基于 IAR 环境开发芯片包,给用户更多的编译选择,提高用户开发灵活性。本应用笔记芯片包结构、DEMO 例程下载使用、工程建立等角度出发,详细介绍 IAR
    发表于 05-16 11:52

    芯海应用笔记:通用 MCU IAR 开发指南

    集成的 IDE 工具,用户可根据对应芯片型号的规格进行修改,仅供参考。*附件:应用笔记:芯海通用MCUMDK开发指南.pdf
    发表于 05-16 11:50

    芯海应用笔记:通用 MCU 基于 GCC 编译开发应用

    客户需要 GCC 开发,需要增加相关的开发文件。本文档中的代码部分为 GCC 开发所需文件的模版,用户可根据对应芯片型号的规格进行修改,仅供参考。*附件:应用笔记:芯海通用MCUGCC编译支持开发指南.pdf
    发表于 05-16 11:47

    芯海应用笔记:通用 MCU Flash 读写保护和 SWD 复用指导手册.

    本应用笔记旨在帮助用户了解芯海科技通用 MCU Flash 读写保护的相关注意事项,同时针对 SWD引脚锁复用提供解决方案。本文档所涉及到的解决方案可适用于芯海通用 MCU 产品的常见相关需求。*附件:应用笔记:芯海通用MCUf
    发表于 05-16 11:44

    芯海通用 MCU 应用笔记 :CS32F103 系列 MCU IAP 升级指南

    本应用笔记旨在帮助指导用户针对芯海 CORTEX-M3 MCU CS32F103 系列单片机 IAP 应用的快速开发。本应用笔记实现了 CAN 和 USART 两种接口方式来开发 IAP 应用,协议
    发表于 05-16 11:40

    芯海通用 MCU 应用笔记: C32F103xB 快速应用指南

    本应用笔记旨在指导用户搭建 CS32F103xB 系列 MCU 开发环境并进行开发和调试,包括:软硬件注意事项、开发板说明、如何 Keil/IAR/GCC 下安装 SDK 并新建项目、量产烧录器
    发表于 05-16 11:37

    芯海科技通用 MCU 应用笔记: CS32F103 FOC 电机评估板使用指南

    本文档描述了基于芯海 CS32F103 系列芯片的矢量控制电机开发板 V1.00 的设计理念、结构和使用说明,以帮助用户快速使用此开发板,评估 CS32F103 芯片在电机控制应用上的性能表现。*附件:应
    发表于 05-16 11:35

    芯海通用 MCU 应用笔记: CS32F03x 系列硬件设计指南

    本技术说明文档提供关于 CS32F03x 系列 MCU 的电源,启动引导配置,应用注意事项的说明,旨在帮助用户更好地使用 CS32F03x 系列 MCU,进行芯海科技 CS32F03x 系列 MCU 应用产品的设计、开发和调试。
    发表于 05-16 11:32

    芯海通用 MCU 应用笔记: C32F03x 系列快速应用指南

    本应用笔记旨在指导用户搭建 CS32F03x/F03x-RA 系列 MCU 开发环境并进行开发和调试,包括:软件开发与移植、软硬件注意事项、开发板说明、如何 Keil/IAR/GCC 下安装 SDK
    发表于 05-16 11:29

    芯海科技应用笔记:CS32F0XX TIMER外设模块指导

    本应用笔记旨在展示使用 CS32F0xx 微控器,针对定时器外设的应用。帮助用户了解 CS32F0xx 定时器的基本特性、操作模式及相关应用的示例代码。提供的一些高级应用以便缩短用户开发周期。对所介
    发表于 05-16 10:52

    CSU18MX86应用笔记

    本应用笔记旨在为用户提供关于CSU18MX86的详细信息和使用指南,帮助用户快速开发基于CSU18MX86的应用。*附件:CSU18MX86应用笔记_V1.0.pdf
    发表于 05-16 10:21

    BLUE-NRG-MS下载固件库显示失败后连不上了怎么解决?

    最近使用ST的BLUE-nrg,下载固件库下载失败了,然后再使用GUI就一直链接不上了,使用和手机链接的程序也一直卡在更新 网上搜需要直接换芯片,有没有遇到过的怎么解决
    发表于 05-10 07:49