hi对话框:
我使用DA的可编程加密狗与DA14580通信的时候,在数据通信过程中发现蓝牙会断开,这时候能发现蓝牙信号,但是无法再与da14580连接了,现象是一连马上就断开了。请问下 这是什么问题?
我使用第三方工具去连接也不行,如使用淡蓝色去连接,提示“”“询问外围设备超时”错误。
必须重启设备才能连接,我使用SDK版本是 3.0.6。
下面是我用柏树洞抓的连接日志也是异常情况下,无法连接的日志
[16:53:36:525]:“解析并设置对等设备BD地址”请求已发送
[16:53:36:525]:BD地址类型:公共地址
[16:53:36:525]:BD地址:02:0F:00:03:04:17:00:00
[16:53:36:552]:“命令状态”事件已收到
[16:53:36:552]:状态:BLE_状态_OK
[16:53:36:552]:“已收到“解析并设置对等设备BD地址响应”事件
[16:53:36:552]:状态:0x01
[16:53:36:552]:“命令完成”事件已收到
[16:53:36:552]:状态:BLE_状态_OK
[16:53:36:552]:“建立连接”请求已发送
[16:53:36:552]:BD地址类型:公共地址
[16:53:36:552]:BD地址:02:0F:00:03:04:17:00:00
[16:53:36:557]:“命令状态”事件已收到
[16:53:36:557]:状态:BLE_状态_OK
[16:53:36:844]:“建立连接响应”事件已收到
[16:53:37:148]:“当前连接参数”事件已收到
[16:53:37:148]:HCI状态:0x00
[16:53:37:148]:连接间隔:8.75毫秒
[16:53:37:148]:从属延迟:0
[16:53:37:148]:监控超时:100毫秒
[16:53:37:149]:“命令完成”事件已收到
[16:53:37:149]:状态:BLE_状态_OK
[16:53:37:149]:“已收到连接终止通知”事件
[16:53:37:149]:原因:无法建立连接
[16:53:37:149]:“获取本地设备安全密钥”请求已发送
[16:53:37:202]:“命令状态”事件已收到
[16:53:37:202]:状态:BLE_状态_OK
[16:53:37:202]:“获取本地设备安全密钥响应”事件已收到
[16:53:37:202]:密钥标志:发起方加密信息、发起方身份信息、发起方签名密钥、响应方加密信息、响应方身份信息、响应方签名密钥
[16:53:37:202]:长期密钥(LTK):[D6:93:E8:A4:23:55:48:99:1D:77:61:E6:63:2B:10:8E]
[16:53:37:202]:加密的分集器(EDIV)和随机数:[99:1F:26:1E:F6:09:97:2E:AD:7E]
[16:53:37:202]:身份解析密钥(IRK):[0A:2D:F4:65:E3:BD:7B:49:1E:B4:C0:95:95:13:46:73]
[16:53:37:202]:标识地址:[0x00A0500A0D27,公共地址]
[16:53:37:202]:连接签名解析密钥(CSRK):[90:D5:06:95:92:ED:91:D7:A8:9E:2C:DC:4A:93:5B:F9]
[16:53:37:203]:“命令完成”事件已收到
[16:53:37:203]:状态:BLE_状态_OK

SDK3.0.6版本过旧了,可编程堆栈存在一些已知的问题会导致你所见的情况发生, 我们这边建议您把工程建立在比较新的SDK上(5.0.2或以上)
这边提供一个基于3.0.6的小补丁,你可以尝试一下是否能改善情况。
请按以下内容修改至dk_apps/src/ip/ble/ll/src/rwble/rwble.c
@@-614,6+617,16@@void$Sub$$BLE\u事件处理程序(void)
lld_evt_end_isr();
+//执行软件重置
+//重置可恢复状态机
+ble_master_soft_rst_setf(1);
+而(ble_master_soft_rst_getf());
+//如果正在进行加密,请重新启动它
+如果(ble_aes_start_getf())
+ {
+ble_aescntl_集合(ble_AES_开始位);
+ }
+
rwble_last_事件=BLE_EVT_结束;
}
}
@@-986,6+999,16@@void$Sub$$BLE\u事件处理程序(void)
#endif//度量
lld_evt_end_isr();
+//执行软件重置
+//重置可恢复状态机
+ble_master_soft_rst_setf(1);
+而(ble_master_soft_rst_getf());
+//如果正在进行加密,请重新启动它
+如果(ble_aes_start_getf())
+ {
+ble_aescntl_集合(ble_AES_开始位);
+ }
+
rwble_last_事件=BLE_EVT_结束;
}
}
hi Qinjiny_对话框:
谢谢你的回答,我将尽快添加你给的补丁,测试下,并将结果返回给你。
还有在SDK 5.0.2里面有两个void$Sub$$BLE\u事件处理程序(void)函数,和你的这个补丁一样,但是3.0.6里面只有一个,是否只需要改这个?
这个只是针对已知常见问题的修理更新的SDK里还有其他改动,可以的话还是转换过去比较好
hi Qinjiny_对话框:
好的,非常感谢!目前添加了这个补丁,经过测试,应该是有解决了目前的问题。我将在后面移植到最新的SDK上面。