蓝牙 BLE连接参数 连接间隔讲解 connection interval Slave latency timeout CH573 CH582 CH579 peripheral通用外设讲解

本文详细介绍了蓝牙低功耗(BLE)的连接参数,包括最小和最大连接间隔、从设备延迟和超时时间。连接间隔影响数据传输速度和功耗,从设备延迟允许在无数据时节省电力,超时时间则设定通信无响应时的断开阈值。通过调整这些参数,可以在响应速度和功耗之间找到平衡,适用于不同应用场景,如大数据传输、远程操作或防丢设备等。
// Minimum connection interval (units of 1.25ms, 6=7.5ms)
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL    6

// Maximum connection interval (units of 1.25ms, 100=125ms)
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL    100

// Slave latency to use parameter update
#define DEFAULT_DESIRED_SLAVE_LATENCY        0

// Supervision timeout value (units of 10ms, 100=1s)
#define DEFAULT_DESIRED_CONN_TIMEOUT         100

1、连接间隔

DEFAULT_DESIRED_MIN_CONN_INTERVAL(最小连接间隔)和

DEFAULT_DESIRED_MAX_CONN_INTERVAL(最大连接间隔)

这个间隔 是指成功连接后 的周期性通讯时间,主机会根据使用情况 在 这个取值范围内 选择合适的 间隔时间,这个具体值是不可控的,所以需要划定一个范围使得通讯响应在自己的可控范围之内。这个具体值会影响到下一次通讯数据包的响应时间,需要根据自己的情况来调整这个范围达到 既省电又匹配程序响应速度 的目的。

比如:
大数据传递时:通讯数据包是连续传递的,主机会选择min值来进行通讯。
无数据传递时:通讯是空闲状态,主机会选择max值来定期询问从机状态,以保持连接不中断。(在空闲时,由于使用max的值作为通讯周期,会影响到程序的下一个命令的发送时间)

( 连接间隔以1.25ms为单位;连接间隔的范围是6~3200,即7.5ms~4s之间)

2.Slave Latency(从设备延迟或者从设备时延)

 允许Slave(从设备)在没有数据要发的情况下,跳过一定数目的连接事件,在这些连接事件中不必回复Master(主设备)的包,这样就能更加省电(范围可以是0~499)。

上图,Slave Latency = OFF时,master发包,slave必须回复,如果不回复,Master就会认为slave那边接收不正常。若Slave Latency = ON时, master 发包,slave允许有3个包不回复

注意:这个参数更重要的应用 :比如在距离远或者干扰大的时候 无数据通信的时候。把这个值设大可以减少掉线概率。
比如防丢器:放在口袋里面假如这个参数设置为0 表示规定时间内必须响应从机,不然就以为是蓝牙断开了。假如设置为5。假如信号不好的时候,即使中间丢了4个,只接受了1个就表示连接了。因为他会跳过其中4个 ,保证了不掉线的概率

3.Supervision Timeout(超时时间或者监控超时)

这个参数设定了一个超时时间,如果BLE在这个时间内没有发生通信的话,就会自动断开(单位是10ms,范围是10~3200即100ms~32s)。

连接间隔、从机时延以及超时时间这三者必须满足如下公式:

Supervision Timeout >(1 +slaveLatency)*(connectionInterval)

注:slaveLatency不能算在 supervision Timeout的时间内,否则连接就会不正常断开

这三个连接参数在不同情况下对通信速率和功耗的影响

1.Connection Interval缩短,Master和Slave通信更加频繁,提高了数据吞吐速度,缩短了数据发送时间,但也提高了功耗。

2.Connection Interval加长,通信频率降低,数据吞吐速度降低,数据发送等待的时间更长,但这种设置降低了功耗。

3.Slave Latency减少或者设置为0,那么每次连接事件中都需要回复Master的包,当然功耗会上升,但数据发送速度也会提高。

4.Slave Latency加长,功耗下降,数据发送速度降低。

参数协商 启动协商任务

        // Set timer for param update event
        tmos_start_task(Peripheral_TaskID, SBP_PARAM_UPDATE_EVT, SBP_PARAM_UPDATE_DELAY);

执行参数协商任务

    if(events & SBP_PARAM_UPDATE_EVT)
    {
        // Send connect param update request
        GAPRole_PeripheralConnParamUpdateReq(peripheralConnList.connHandle,
                                             DEFAULT_DESIRED_MIN_CONN_INTERVAL,
                                             DEFAULT_DESIRED_MAX_CONN_INTERVAL,
                                             DEFAULT_DESIRED_SLAVE_LATENCY,
                                             DEFAULT_DESIRED_CONN_TIMEOUT,
                                             Peripheral_TaskID);

        return (events ^ SBP_PARAM_UPDATE_EVT);
    }

进回调函数,打印协调的参数结果

static void peripheralParamUpdateCB(uint16_t connHandle, uint16_t connInterval,
                                    uint16_t connSlaveLatency, uint16_t connTimeout)
{
    if(connHandle == peripheralConnList.connHandle)
    {
        peripheralConnList.connInterval = connInterval;
        peripheralConnList.connSlaveLatency = connSlaveLatency;
        peripheralConnList.connTimeout = connTimeout;

        PRINT("Update %x - Int %x \n", connHandle, connInterval);
    }
    else
    {
        PRINT("ERR..\n");
    }
}
蓝牙BLE(Bluetooth Low Energy)协议中,建立连接参数的协商主要涉及以下**协议层**的设置和交互: --- ### 1. **LL层(Link Layer,链路层)** - **作用**:负责物理连接的建立和管理,包括连接参数的协商。 - **关键参数协商**: - **连接间隔Connection Interval)** - **从机延迟(Slave Latency)** - **连接超时(Connection Timeout)** - **过程**: - 在Central(主机)发起连接请求时,会在LL层定义初始连接参数; - Peripheral(从机)可以随后发起**连接参数更新请求(LL_CONNECTION_UPDATE_REQ)**。 --- ### 2. **L2CAP层(Logical Link Control and Adaptation Protocol,逻辑链路控制适配协议)** - **作用**:在BLE中负责数据的分片与重组,支持协议复用; - **对连接参数的影响**: - 虽然L2CAP本身不直接参与参数协商,但它可以影响数据传输效率; - 在BLE 4.2及以上版本中,L2CAP信道支持**增强型信令(Enhanced Credit-Based Flow Control)**,可辅助连接参数的动态调整。 --- ### 3. **GAP层(Generic Access Profile,通用访问配置文件)** - **作用**:定义设备如何发现彼此、建立连接以及安全管理; - **相关设置**: - GAP定义了设备的**角色(Central/Peripheral)**; - 定义了**连接模式(Connectable/Non-connectable)**; - 定义了**连接参数的最小和最大范围**(如连接间隔范围); - **连接参数更新请求**通常由GAP层发起,但由LL层执行。 --- ### 4. **GATT层(Generic Attribute Profile,通用属性配置文件)** - **作用**:负责设备间的数据交互和服务发现; - **对连接参数的影响**: - GATT本身不参与参数协商; - 但GATT操作的效率会受到连接参数(如连接间隔)的影响; - 应用层可在GATT服务中触发**连接参数更新请求**以优化性能。 --- ### 协商流程示例(简要): 1. Central 发起连接请求,LL层设置初始连接参数; 2. Peripheral 接受连接后,可通过LL_CONNECTION_UPDATE_REQ 请求更新连接参数; 3. Central 回应确认; 4. 新连接参数生效,设备开始基于新参数通信; 5. 应用层(如GATT)可根据通信需求再次发起参数更新。 --- ### 示例代码(BLE连接参数更新请求,以Nordic nRF52 SDK为例): ```c // 发起连接参数更新请求 ble_gap_conn_params_t gap_conn_params; memset(&gap_conn_params, 0, sizeof(gap_conn_params)); gap_conn_params.min_conn_interval = MSEC_TO_UNITS(20, UNIT_1_25_MS); // 最小连接间隔 gap_conn_params.max_conn_interval = MSEC_TO_UNITS(60, UNIT_1_25_MS); // 最大连接间隔 gap_conn_params.slave_latency = 5; // 从机延迟 gap_conn_params.conn_sup_timeout = MSEC_TO_UNITS(4000, UNIT_10_MS); // 超时时间 err_code = sd_ble_gap_conn_param_update(p_conn_handle, &gap_conn_params); APP_ERROR_CHECK(err_code); ``` ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值