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单片机】欢迎添加关注!文章转载请注明出处。


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

    关注

    6078

    文章

    45580

    浏览量

    673707
  • STM32
    +关注

    关注

    2313

    文章

    11195

    浏览量

    374660

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用JL杰理AC696N开发板实现PC模式下读取外挂SPI Flash虚拟为U盘的具体案例操作说明_V1.0

    使用JL杰理AC696N开发板实现PC模式下读取外挂SPI Flash虚拟为U盘的具体案例操作说明 引言 做杰理蓝牙音频系列芯片开发时,经常遇到产品需要外挂
    发表于 04-18 00:04

    C8051F330/1/2/3/4/5系列MCU:混合信号ISP Flash MCU的卓越之选

    C8051F330/1/2/3/4/5系列MCU:混合信号ISP Flash MCU的卓越之选 在电子设计领域,选择一款合适的微控制器(MCU)对于项目的成功至关重要。C8051F33
    的头像 发表于 04-15 11:30 173次阅读

    【ESP32-C2系列】WT018684-S1/S1U模组规格书

    概述1特性01MCU内置ESP8684系列芯片,32位RISC-V单核处理器,支持高达120MHz的时钟频率576KBROM272KBSRAM(其中16KB专用于cache)SIPfl
    的头像 发表于 02-04 18:20 318次阅读
    【ESP32-C<b class='flag-5'>2</b><b class='flag-5'>系列</b>】WT018684-S<b class='flag-5'>1</b>/S<b class='flag-5'>1</b>U模组规格书

    【ESP32-C2系列】WT018684-S1/S1U模组产品介绍

    概述1特性01MCU内置ESP8684系列芯片,32位RISC-V单核处理器,支持高达120MHz的时钟频率576KBROM272KBSRAM(其中16KB专用于cache)SIPfl
    的头像 发表于 01-28 18:19 971次阅读
    【ESP32-C<b class='flag-5'>2</b><b class='flag-5'>系列</b>】WT018684-S<b class='flag-5'>1</b>/S<b class='flag-5'>1</b>U模组产品介绍

    LAT1198+通过 KEIL 制作 QSPI 接口的外部 Flash 下载算法应用笔记

    时,需要将代码或数据烧录到外部 Flash。如果调试工具不能够一键烧录,势必会给调试带来诸多的麻烦。本文以 STM32H750 芯片为例,介绍通过 KEIL制作 QSPI 接口的外部 Flash 下载算法的方法。
    发表于 01-11 17:25 0次下载

    LAT1216 Blue NRG-1/2 系列芯片 Flash 操作BLE 事件的互斥处理

    在许多基于 BlueNRG-1/2 系列芯片的低功耗蓝牙的设计项目时,客户通常会在 Flash的特定区域存储定制的数据。然而需要特别注意的是
    发表于 01-09 10:54 0次下载

    广州唯创电子WT588F02系列Flash语音芯片:可重复擦写与高效能音频解决方案

    让智能设备拥有“可定制的声音”,Flash存储技术实现语音内容自由更换在智能设备功能日益丰富的今天,语音交互已成为提升用户体验的关键要素。广州唯创电子推出的WT588F02系列Flash语音
    的头像 发表于 09-28 08:05 640次阅读
    广州唯创电子WT588F02<b class='flag-5'>系列</b><b class='flag-5'>Flash</b>语音<b class='flag-5'>芯片</b>:可重复擦写与高效能音频解决方案

    一个硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash?

    一个硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash,有一个norflash被模拟成U盘,会在中断中操作spi。
    发表于 09-26 06:18

    STM32C011开发(3)----Flash操作

    STM32C011 系列微控制器内置 Flash 存储器,支持程序存储与数据保存,具备页面擦除、双字写入、读写保护等功能。本文将简要介绍 STM32C011 的 Flash 结构与特性,并通过实际代码示例,讲解
    的头像 发表于 09-18 16:48 5278次阅读
    STM32C011开发(3)----<b class='flag-5'>Flash</b><b class='flag-5'>操作</b>

    蓝牙打印机电路怎么设计?芯片如何选型?APP和小程序的BLE通讯协议如何制定?

    与蓝牙芯片通讯的BLE协议怎么制定?蓝牙BLE芯片如何选型?一文给你讲解清楚
    的头像 发表于 09-08 10:02 1398次阅读
    蓝牙打印机电路怎么设计?<b class='flag-5'>芯片</b>如何选型?APP和小程序的<b class='flag-5'>BLE</b>通讯协议如何制定?

    FLASH模拟EEPROM入门指南

    充足空闲空间。 错误处理:在读写函数中增加边界检查(如地址有效性验证)和操作失败重试机制。 中断与电源管理:在写入过程中禁用低功耗模式,防止电压波动导致写入失败。 总的来说,FLASH模拟EEPROM
    发表于 08-14 06:13

    AS32X601芯片Flash擦写调试技术解析

    Flash 擦写操作流程,探讨擦写过程中可能遭遇的挑战及应对策略,旨在为芯片应用开发者、硬件工程师等专业人士提供系统且详实的参考资料,助力其精准操控 AS32X601 芯片
    的头像 发表于 07-22 13:47 914次阅读
    AS32X601<b class='flag-5'>芯片</b><b class='flag-5'>Flash</b>擦写调试技术解析

    BlueNRG-1 OTA卡在PROGRAMMING,进度一直为0是怎么回事?

    采用的是手机 ST BLUE DFU APP + bluenrg-1小系统板,使用的是OTA service manager framework 模式,DK包使用的是DBlueNRG-1_2 DK
    发表于 07-18 08:20

    使用不同的Bluetooth®适配器时,BLE速率较慢怎么解决?

    我已经在CYW20829中编写了一个BLE服务器程序。 当我使用 Python 脚本将其连接到我的计算机时,它可以达到 800 Kbps,该脚本生成使用 Bleak 的 BLE 客户端,并使用笔记
    发表于 06-27 06:28

    GPDV6624C应用笔记1.0版

    电子发烧友网站提供《GPDV6624C应用笔记1.0版.pdf》资料免费下载
    发表于 06-06 17:20 0次下载