• 资料介绍
    • 简介
    • 快速实践
    • 小结
  • 资料预览
  • 相关推荐
申请入驻 产业图谱

LAT1321 基于BlueNRG SDK 修改ATT_MTU

03/22 14:12
265
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

LAT1321 基于BlueNRG SDK 修改ATT_MTU

960.23 KB

简介

使用 BLE GATT 进行数据发送、接收时,ATT_MTU 这个参数值决定了用户一次可以发送、接收的数据包的长度。通讯的双方在连接成功后会发起 ATT_MTU 协商流程。流程结束后,ATT_MTU 的大小由双方的较小值决定。

当 ATT_MTU 是一个较大的值、无法使用一个链路层数据包承载时,协议栈便会对其进行拆包发送处理。在实际应用中,由于通讯设备内存资源、时间资源的限制,ATT_MTU 的值会受到一定的限制,无法任意修改。

对于 BlueNRG-LP 来说,协议栈需要为较大的 ATT_MTU 预留足够的 RAM 空间以缓存应用层的数据包,因此,ATT_MTU 的最大值被限定为 1024 字节左右(BLE_STACK_MAX_ATT_MTU)。而对于手机来说,较大的 ATT_MTU 可能会造成线程阻塞时间过长,因此也会对其最大值做一定的限制(未找到具体的规范文件)。

本文指导用户如何在 BlueNRG SDK 上修改 ATT_MTU,以及如何考虑、评估修改ATT_MTU 后可能带来的影响。

快速实践

本章节快速进行一次修改 ATT_MTU 的实验,并对实验过程中遇到的问题做初步的讲解。

小结

BlueNRG SDK 需要在编译阶段确定其需要的 RAM 空间。用户改动 ATT_MTU 后,协议栈占用的 RAM 空间也将随之改变。因此,在 RAM 空间足够的情况下,我们可以给定ATT_MTU 一个较大值,这个值由以下宏确定:

#define MAX_ATT_MTU_CONF在和手机连接的大多数情况下,用户只需要改变以上宏,即可成功修改 BLE 外设端的ATT_MTU。若不成功,则可从以下几个方面进行逐一排查:

  1. 定义并实现以下接口,以便查看最终的 ATT_MTU 值:void aci_att_exchange_mtu_resp_event
  1. 若无以上接口的回调,则在连接成功后使用以下接口发起 ATT_MTU 交换流程:aci_gatt_clt_exchange_config
  1. 若 ATT_MTU 无法达到预期的、一个较大的值,比如 200,则使能 DLE 特性以扩展单个 LL 包的承载能力。可通过配置以下宏使能 DLE 特性:# define CONTROLLER_DATA_LENGTH_EXTENSION_ENABLED

资料预览

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

方案定制

去合作
方案开发定制化,2000+方案商即时响应!