• 正文
  • 相关推荐
申请入驻 产业图谱

手把手教你:BLE安全连接-修改MTU的大小

07/27 08:05
149
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、前言

本篇会结合代码讲解修改MTU的大小并进行验证。

二、阅读说明

1、泰凌微芯片使用者。2、蓝牙 spec学习者

三、正文

1、更改MTU为65字节

#ifndef MTU_SIZE_SETTING#define MTU_SIZE_SETTING                    65  //user set value, user can change it in app_config.h#endif

更改的文件路径为“tc_ble_single_sdkvendorcommonapp_buffer.h”将MTU_SIZE_SETTING的大小更改为65字节。

2、增加发送MTU的功能函数

void slave_send_mtu_req_function(void){    if(connect_event_occurTick && clock_time_exceed(connect_event_occurTick, 1500000)){  //1.5 S after connection established        connect_event_occurTick = 0;        blc_att_requestMtuSizeExchange(BLS_CONN_HANDLE, MTU_SIZE_SETTING);        tlkapi_printf(APP_LOG_EN, "Slave send  MTU size req, MTU = %dn", MTU_SIZE_SETTING);    }}

如上所示增加slave_send_mtu_req_function函数,该函数的作用为在连接成功之后,1.5S后发送MTU请求交换命令给到主机。

3、定义计时变量并在连接任务回调中赋值3.1、定义计时变量

_attribute_data_retention_  u32 connect_event_occurTick = 0;

3.2、在连接任务回调函数中赋值

connect_event_occurTick = clock_time() | 1;

4、将MTU请求交换的功能函数放入主循环中

slave_send_mtu_req_function();

5、使用nRF Connect软件连接后的打印结果

[APP][MTU] mtu exchange: 40 00 41 00 41 00

如上图所示,关键的地方在这里,下图是打印此log具体的地方

在app_host_event_callback的回调函数中,该函数打印出来的是一个结构体数组,如下:

/** * @brief      data structure of GAP_EVT_ATT_EXCHANGE_MTU event parameters */typedef struct {    u16 connHandle;    u16 peer_MTU;    u16 effective_MTU;} gap_gatt_mtuSizeExchangeEvt_t;

结合打印出来的数据整理如下:

connHandle:00 40peer_MTU:00 41effective_MTU:41 00

从上面可以看到,有效的MTU为0x41,也就是65个字节。

四、结尾

本篇结合代码讲解了如何修改MTU的大小,已经如何进行验证,下一篇将增加相关代码,让从机能使用安全连接的方式进行配对。

相关推荐