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

实战经验 | 关于STM32WB OTA 速率提升引发的讨论

[复制链接]
STMCU-管管 发布时间:2024-4-22 16:06
1. 引言
$ I6 \9 Z6 r# x/ S+ r) ^$ W  M客户的 STM32WB 产品考虑功耗和 OTA 传输速率的平衡,在正常工作和做 OTA 升级时会使用两套不同的 BLE 连接参数。这就涉及到 BLE 连接参数更新。客户的问题也正是由更新 BLE 连接参数引起。连接参数的更新除了会影响 BLE 的传输速率,还需要考虑 OTA 接收到数据后的擦写 Flash 操作。
  e. }: A  X0 @4 S  X1 N
" g! e. [/ R7 t2. BLE 连接参数及更新过程
( Q& G. @( r1 p9 c. F我们先简单回顾一下影响 OTA 传输速率,也就是 BLE 传输速率的因素: + o, K2 G9 s" G/ P$ f& U  j
PHY:BLE 的 PHY 是选用 1M,还是 2M
$ v% V* _( T4 TDLE: Data length extension 允许数据包大小容纳更大的负载最大为 251 字节, 禁用时为 27 字节 $ {) S3 U; S1 x
ATT MTU ,当开启 DLE 时建议最大值设 247 字节 * X1 F0 o- l! i, m6 r& e% `$ a
连接间隔(connection interval),范围是 7.5ms 至 4000ms $ W) g, {' a, ~0 k  w
连接事件(connection event),每个连接事件的最大数据包数,受限于 BLE 堆 栈,Android 和 IOS 设备会有差异。 : [9 W9 [' q" z$ x
从机端的间隔唤醒(Slave Latency): 定义从机可以忽略主机发起的连接事件 数。 * P* `4 A* G2 g, t, n$ f& \
发送数据后是否需要 RSP,不需要的时候选用 write without RSP/notify 的方式速度更快。   h/ s. |; H% Y, G
客户的应用中其 BLE 连接参数更新其实只涉及 connection interval 和 slave latency 两个参数。实际改变的只有 slave latency,其更新连接参数过程如下: 2 p$ V- d  R7 V$ _; I& |" a; l0 e
1. 在正常应用中,也即是 BLE OTA 升级前 connection interval 和 slave latency 的参数是[7.5ms, 6 latency] 。
% Y5 m8 k4 f7 A4 R$ b  w2. 准备 OTA 升级时,更新连接参数为[7.5ms, 0latency]以加快数据传输。0 ?0 `& C, b) v( g  v6 Z( D
3. OTA 升级接收主设备传过来的数据,每接到 4K 数据会擦除 Flash,并将数据写入 Flash。这时需要在擦除 Flash 前将连接参数更新回[7.5ms, 6 latency] 。这样做的目 的是为了满足在射频活动前至少 25ms 不进行 Flash 的擦除操作(具体见 AN5289)。
' }" f: g/ Y3 d; q4. 在写完 4K Flash 后,又将 BLE 参数更新为[7.5ms, 0latency]继续接收 OTA 的数据。6 m8 k( c  n5 s
3. 问题产生 1 E4 ]4 \, j" O$ p
从上面的描述可知,客户的程序设计是每接收到 4KB 数据,就要做 BLE 连接参数的更新。频繁的 BLE 连接参数更新会引发了一些问题。首先是连接参数更新是由从设备 STM32WB 发起把更新请求发给主机,主机收到更新请求后,正常会回一个 response 给从机,告诉从机后面可以按新的连接参数进行通信。但有些主设备有可能不支持参数更新或更新参数的时机有差异。导致更新失败。这就产生了兼容性的问题。如下图一,蓝牙规格书中有提醒,应该在建立 BLE 连接后的至少 5s 后更新连接参数 。, \; G! l' X2 l# t) w8 I& z

图一

图一
▲ 图一
另外 BLE 连接参数更新的持续时间: (9 + 6 x latency) x conn_interval (conn_interval 是当前的 conn_interval)。
7 ]; Y2 d  a- w. @而且对于两次 BLE 连接参数的间隔时间,蓝牙规格书中也有建议。建议更新参数的超时时间是 30s,如下图二:
& r! H. Z0 u; z! W/ {

图二

图二
▲ 图二
如果按照这个要求,每次需要间隔 30s 再更新 BLE 连接参数,那整个 OTA 的速率将会比不更新的速率更低,那更新 BLE 连接参数来提高 OTA 速率就失去了意义。
1 v' ^' @( {9 `6 u+ G3 [+ g( d" A
4. 问题解决 ) w; h" `9 j) P' A$ h; o
为了解决 BLE 连接参数更新带来的问题。有两个建议,一个是可以在 OTA 更新数据之前将 Flash 区域提前擦除,后面收到 OTA 数据后直接写 Flash。因为在 BLE 射频 IDLE 时 间内写 Flash 的操作不受限制,这样就可以不用频繁更新 BLE 连接参数,完成 OTA 升 级。另一个是建议对于 STM32WB BLE 协议栈,只要主机对从机更新连接参数请求有response,从机收到这个 response 后就可以再次发起连接参数更新请求,而无需等待 30s。这样也不会影响 OTA 的升级速率。 - U: ]( E/ Z& L- |! I4 i
其实上面是针对使用的是 STM32Cube_FW_WB_V1.8 的协议栈版本的解决方案,它必须使用ACI_L2CAP_CONNECTION_PARAMETER_UPDATE_REQ 命令发送更新请求。
: m0 K3 M4 g3 i对于最新的 STM32WB BLE 协议栈可以使用 ACI_HAL_SET_PERIPHERAL_LATENCY input parameters 命令,如下图三,这条命令可以直接在从机端使能或禁止 slave latency 而不需要等待主机的响应。这就可以满足客户的频繁更新连接参数而不需要考虑 主机的需求,巧妙地解决了兼容性问题。这里 latency 设置为 0 和 latency disable 效果是一样的。
, ^4 ]  z( U, q5 h

图三

图三
▲ 图三

4 \8 n& M8 l; G/ L" c3 L# n
5. 小结
4 {) a  c; o6 [7 k7 t. m: w本文分享了客户为提升 STM32WB OTA 速率引发的关于 BLE 连接参数更新的讨论。最后根据客户需要频繁更新连接参数,给出了相应的处理办法。以上供大家参考。" \; t, ?) m: n  ^$ [2 Q1 q9 N" I
$ a* U! y& `; c
1 H4 B# ]% H2 T6 |6 s/ G

3 M; f/ N; W5 v- t! m) d
赞 收藏 评论0 发布时间:2024-4-22 16:06

举报

0个回答

所属标签

相似技术帖

官网相关资源

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