你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
STMCU小助手 发布时间:2023-3-17 16:09
1. 引言在许多基于 BlueNRG-1/2 系列芯片的低功耗蓝牙的设计项目时,客户通常会在 Flash的特定区域存储定制的数据。然而需要特别注意的是,在 BlueNRG-1/2 方案中,用户对Flash 的读写操作必须在射频空闲的情况下进行,两者是互斥的关系。) g5 ]8 i; k8 v7 n& ?! t2 S

# r& P( n, c% q6 f. R$ r! N' E" z2. 问题描述
- |: z6 v8 w! \客户经常反馈类似问题,诸如:当用户程序尝试将用户定制数据写入 Flash 中特定区域时,发现 BLE 射频部分停止工作,或芯片直接死机了。1 b. r6 o6 P* \- R2 O8 h$ F* I

( k% q4 l# P: L, y# Y) D

/ d0 K1 U# g( L, a$ ^( E2.1. 原因分析% Q! \: n8 @7 l2 W
2.1.1. BlueNRG-1/2 的 Flash 存储应用数据时可能遇到这个问题。因为在擦除一页的过程中,中断会被关掉大概 20 多 ms, 在此期间,radio 中断是被关掉了的,会导致整个radio 的状态被延时或者整个 radio 部分的状态被破坏。
1 R, L' d: _1 E. a! h) {6 `4 Y; p/ q; a: P5 w
: j5 J. S, \  G  f# `3 u, w. V
2.1.2. ST 的 SDK 虽然提供了访问 Flash 的示例代码,但是当 Flash 操作比较多时,与蓝牙事件的互斥就比较难处理了;特别是对于一些多连接应用或者同时用了主从、多种蓝牙事件的场景,互斥就显得更麻烦了。3 k/ u0 N) l% w( x
. j0 l5 `  I+ I2 f

/ [" l) f1 a& _% G6 z  l3. 解决办法* L, S0 X/ s- L  m& h5 b$ E, }& |$ n
使用一个双向链表来管理 Flash 操作(Flash 擦除或者是 Flash 写,Flash 读无需和BLE 相关事件互斥),并使用一个双向链表来管理空余时间状态。在空余的时间执行Flash 操作。从芯片手册可以知道,操作 Flash,特别是擦除时,会占用比较多的时间。为了避免操作 Flash 占用过多的时间片,把每次写或者擦除 Flash,用一个列表来管理,每次写或者擦除操作,插入 Flash 操作链表的最后。 在主循环中检测是否有足够的时间写,如果当前空闲的时间足够,取出 Flash 操作链表中最前的一个节点,执行 Flash 操作,然后将节点移除。对于如何检测空闲时刻,也用一个链表来管理空闲时刻。( n% e5 s; q6 k3 |( `8 K
具体思路如下:9 f! `7 C3 a& L& b: b  T, w
第一步:初始化时需要设置 radio active 事件抛到应用。. Y0 y. X' B4 Z7 j
aci_hal_set_radio_activity_mask(0x0001|0x0002|0x0004|0x0008|0x0010|0x0020);
* u% a: @) N; c3 i! e- c9 y5 O& P+ Y8 d: ^

4 B# j- m) M* B% z6 p 5PI1IUE_JO{OOT77UN1KDTC.png 1 d7 D0 i8 K$ ]0 |3 p

, J! }! c9 @  O- Z# h8 m8 M# e- H

6 M- d% O  {6 X0 S( H1 p/ x第二步:设置之后,重写函数 aci_hal_end_of_radio_activity_event,当有事件触发时,就会进入这个函数。图2.重写函数 aci_hal_end_of_radio_activity_event
% ?9 M$ H! _  v+ m' A- l2 I+ ~0 E% x( S4 B1 N  c. ]

8 Z, L) f* z1 B$ I, r6 c: j RW{QP$`TM[6~J05W8[2)4TU.png 4 E5 M2 `+ d' N* U

* {3 t: C: F$ q* W6 I+ ?
0 k% s/ e9 ?; T
第三步:构造一个 Flash 操作调度函数,每次进入这个函数,生成一个空闲时刻的节点插入到链表中。主循环中有个 Flash 操作的调度函数,不停的调度是否有数据需要写入。在 Flash操作的调度函数中,主要做两件事情,一个是把空闲时间计算出来给到底层的 Flash 操作链表调度中。另一个是移除过期的节点 + z0 k5 q4 J+ J/ n3 N  {- j0 J
5 S* R2 \/ E) P+ Z5 H2 r% x( n' H
完整版请查看:附件 BlueNRG系列芯片Flash操作与BLE事件的互斥处理_v1.0.pdf (910.91 KB, 下载次数: 0)
赞 收藏 评论0 发布时间:2023-3-17 16:09

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版