CH582 蓝牙连接断开 Reason:28

请问 #define  BLE_HCI_INSTANT_PASSED   0x28 断开如何解决?


1.大循环里没有任何延时操作

__attribute__((noinline)) void Main_Circulation()
{
    while (1)
    {
        TMOS_SystemProcess();
    }
}

2.所有循环任务都是通过tmos_start_task来创建的

3.蓝牙任务1s定时,每次发送16字节数据

4.还有一个任务1s定时,里面执行了一些时序操作,整个过程需要耗时170ms左右


调试发现,如果执行耗时170ms的时序操作,蓝牙偶尔就会断开Disconnected.. Reason:28


为了满足时序要求,里面有使用到DelayUs(i);延时


感觉时序函数没办法修改了,它就要耗时170ms.


能不能通过修改蓝牙的一些配置参数,解决这个问题?




要注意蓝牙功能开发中避免直接使用延时函数,如果时序要求延时可以通过TMOS任务将需要延时的任务放在一段时间后处理(170ms)。

连接断开原因参考:

蓝牙BLE断开原因对照表 - SweetTea_lllpc - 博客园 (cnblogs.com)

TMOS任务讲解参考:

WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)


我需要实现的时序功能延时是TWI_Delay_us(422);完整执行一个时序就要耗费140-170ms左右,而TMOS 系统时钟单位为 625us

根本没办法把时序任务拆分到各个小段任务中.

根据 WCH TMOS用法详解 


2、建议不要在单个任务中执行超过连接间隔一半时长的任务,否则将影响蓝牙通讯


那么我的任务耗时170ms,我就把连接间隔设置成340ms


// 最小连接间隔 (units of 1.25ms, 6=7.5ms)

#defineDEFAULT_DESIRED_MIN_CONN_INTERVAL6


// 最大连接间隔 (units of 1.25ms, 272=340ms)

#defineDEFAULT_DESIRED_MAX_CONN_INTERVAL272


蓝牙还是会断开,断开原因并不是0x28了,而是Disconnected.. Reason:8(连接超时)


最大连接间隔增大,会导致连接超时???


有效连接间隔可以查看打印信息观察。举例:最小最大连接间隔配置为270-272。这样连接间隔协商可能在272左右。

可以先参考该博客:

BLE广播间隔和连接间隔(CH582) - SweetTea_lllpc - 博客园 (cnblogs.com)

针对你的功能,不建议直接使用延时函数,对蓝牙连接会有影响,并且其延时准确度也不高。

建议通过定时器处理,在函数中确定好进入中断的时间,进入中断后,直接在定时器中断拉波形。下一次再重新计算中断触发时间。进而实现时许要求。



感谢,使用定时器中断的来做时序,蓝牙就不会断开了


只有登录才能回复,可以选择微信账号登录