你好,我有个疑问,比如连接间隔DEFAULT_DESIRED_MIN_CONN_INTERVAL=6(7.5ms),DEFAULT_DESIRED_MAX_CONN_INTERVAL=100(125ms),DEFAULT_DESIRED_CONN_TIMEOUT=100(1S),是不是意味着只要某个函数连续执行的时间超过了125ms蓝牙就会断开?如果是这样的话,DEFAULT_DESIRED_CONN_TIMEOUT又是设置了什么东西?
“连接间隔”是BLE主从机之间协商,每隔一段时间双方都要唤醒一次,产生一次“连接事件”通信,一来维护连接,二来传递数据包。实际的“连接间隔”需要主从机之间得出一个协商结果,双方在“..._MIN_CONN_INTERVAL”到“..._MAX_CONN_INTERVAL”之间取一个值。可以在MCU的串口打印日志中检查实际协商结果“Int xx”。
“超时时间”是BLE主/从机发现对端设备累计有一段时间没有通信上,则判断对端异常而断连,不再继续维护连接。一般配置超时时间不小于6倍的连接间隔,也就是说即使连续丢失5次连接事件应有的通信交互,只要主从机之间在第6次通信上了,就不会被判断为对端设备已掉线而断连。
注意,尽可能不要发生连接事件丢包。发生“连续丢失5次连接事件应有的通信交互”,第6次很可能也会丢失,因为连接事件中包含时钟校准的功能,未及时校准通常认为会越来越难通信上。
在我司BLE协议栈使用过程中,建议是应用层TMOS事件的时间开销,累计不要超过实际连接间隔的一半。如果有可控的长时间的阻塞操作,建议先在主从机之间协商,加大连接间隔与超时时间。
感谢详细耐心专业的解答,五星好评。