Closed genokolar closed 5 years ago
这个实在是不清楚了,我觉得可能和连接管理的功能有关系?
这个方案有同样问题,我系统是win10,我再测试下win7系统啥的 https://github.com/sandeepmistry/arduino-BLEPeripheral/issues/160
另外lot60-ble还存在什么已知问题吗?
Linux下的表现是:不停连接然后断开
已经解决。
1、为什么出问题:
本身源码没有问题,只是因为我是最小系统,所以按照JIM提示修改此处:
https://github.com/Lotlab/nrf51822-keyboard/blob/9ccda83f3b5e3f801f2263920ba39658091f481b/main/ble/ble_services.c#L77
将蓝牙连接声明为不要输入PIN码的无输入方式的设备 :
#define SEC_PARAM_IO_CAPABILITIES BLE_GAP_IO_CAPS_NONE
实现连接设备不需要输入pin码
2、问题出现了:HID设备无法正确启动 上述源码修改后,对应的此处: https://github.com/Lotlab/nrf51822-keyboard/blob/9ccda83f3b5e3f801f2263920ba39658091f481b/main/ble/ble_hid_service.c#L182 没有更改为不需要MITM,就会导致HID设备无法正确初始化启动。
3、怎么解决的: 从我上面反映的情况看,andriod手机和linux系统都没法查为什么出错,但是windows给出了具体的问题:显示驱动故障(蓝牙低功耗HID设备未启动)。那么猜测大致应该是HID初始化出错。那么回找到HID初始化代码: https://github.com/Lotlab/nrf51822-keyboard/blob/9ccda83f3b5e3f801f2263920ba39658091f481b/main/ble/ble_hid_service.c#L162
通过比对SDK例程,分析和查看JIM的源码修改提交记录,发现原本是没有启用MITM中间人攻击(man-in-the-middle)的,我怀疑因为没有采用PIN码进行连接,所以无法启用MITM,故而导致HID初始化出错。
所以我恢复源码到不启用MITM:修改这个函数下所有
BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM
为
BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM
这些属性定义可以参考这个头文件 https://github.com/Lotlab/nrf51822-keyboard/blob/9ccda83f3b5e3f801f2263920ba39658091f481b/sdk/ble_gap.h#L349
最终测试通过,问题解决
感谢填坑~
蓝牙这部分我也不是很熟悉,所以有可能误导了你,不好意思了
至于lot60-ble存在的问题嘛,应该是只有一个已知的问题:CH554的时钟速率导致其串口速率并不是标准的115200,使其在和蓝牙部分通信的时候会有偶发性的丢包。这个问题可能需要在通信协议上继续下功夫改进,或者是将串口通信更换为其他通信方式。
至于lot60-ble存在的问题嘛,应该是只有一个已知的问题:CH554的时钟速率导致其串口速率并不是标准的115200,使其在和蓝牙部分通信的时候会有偶发性的丢包。这个问题可能需要在通信协议上继续下功夫改进,或者是将串口通信更换为其他通信方式。
意思是NRF51822和CH554通过串口通讯有丢包现象,那么就是说用USB连接电脑的是否反而会出现偶发按键后无响应是吧?
然后CH554可以采用外接晶振啊,内部好像是24MHZ?看你源码,采用了12Mhz
CH554能改成仅缺一个USB HOST功能的CH552吗?(从你源码看,并未启用host功能)
本人完全萌新,JIM大神多批评指正。
CH554能改成仅缺一个USB HOST功能的CH552吗?
可以,我就是用的CH552代替的。
可以采用外接晶振啊
USB部分好像是要有一个固定频率的样子,用其他频率的晶振可能会有问题?这点并不是很清楚。
CH554的时钟速率导致其串口速率并不是标准的115200,使其在和蓝牙部分通信的时候会有偶发性的丢包
可不可以通过修改此处设置的时钟频率Fsys、定时计时器参数,获得标准的115200的波特率呢?看了CH544T的技术手册,对这部分懵懵懂懂的。当前CH554的串口波特率是多少呢? https://github.com/Lotlab/nrf51822-keyboard/blob/9ccda83f3b5e3f801f2263920ba39658091f481b/usb/system.c#L25
还有这两个地方感觉设定不一致: https://github.com/Lotlab/nrf51822-keyboard/blob/9ccda83f3b5e3f801f2263920ba39658091f481b/usb/uart.c#L56
UART0的波特率是38400,UART1的是57600
最小系统按照源码编译完成后,蓝牙连接电脑成功,但是最终显示驱动故障(蓝牙低功耗HID设备未启动);连接手机的话可以配对,但是无法正常连接成功。
main.c中 https://github.com/Lotlab/nrf51822-keyboard/blob/9ccda83f3b5e3f801f2263920ba39658091f481b/main/ble/main.c#L363 改回xtal,故障依旧。
Keil中设置xtal频率为12,16也均不行。
求解。