CH573F 回连兼容问题

我拿 CH573 的 BLE HID Keyboard 例程烧录,分别连接/绑定了一台win11笔记本, 一个android 13手机:

  1. 第一次连接笔记本, 正常都收到CH573发来的字母, 关闭笔记本蓝牙.

  2. CH573连接手机, 手机也可收到CH573发来的字母, 然后关闭手机蓝牙.

  3. 再次打开笔记本蓝牙,可以看到自动连接上,但收不到CH573发来的字母.

  4. 笔记本/手机与CH573连接顺序反一下,也是最后一次连接/绑定的设备能收到数据, 回连上一个设备就收不数据.

  5. 换成一个 sony android 10手机, 则CH573回连之前的笔记本/手机也能收到数据.

可以帮看看是什么原因吗,

您好,BLE的HID键盘例程中,只支持保存一个配对绑定的主机。推测当前的情况是第二个配对的设备B,顶掉了第一个设备A在MCU中的配对绑定信息,但是这个过程中A设备无法获悉配对绑定信息已丢失;那么B设备断开后,再打开A设备,A设备仍会尝试发起回连。

可以参考peripheral例程,添加RSSI打印的逻辑,观察在“再次打开笔记本蓝牙,可以看到自动连接上,但收不到CH573发来的字母”的情况下是否有RSSI的打印,以此确定连接状态;如果第一次配对的A设备回连后没有打印RSSI,基本可以确定是该问题。

解决方法是再添加一个配对绑定名额,参考下篇博客。BLE配对与绑定三(杂谈) - SweetTea_lllpc - 博客园 (cnblogs.com)

image.png


我把我的程序发给您,可以帮忙加下 RSSI 和 MAC绑定数量吗,参考添加这两个功能都没成功


您留个邮箱,给您发添加RSSI的代码。配对绑定的修改请参考博客,博客有讲解不清晰的您可以指出,我们帮您解答。


那先解决RSSI来确定是否绑定数量的原因, 昨天我在另外一个贴子(/bbs/thread-109932-1.html)留了个邮件, 有收到CH582的HID_Keyboard_RSSI_LINK例程, 但我手上只有CH573F的板子,没有实测到;

我看例程上没注册 peripheralRssiCB 这个回调函数, 有点奇怪;

我添加了回调函数, 但是参考 peripheral 注册后就进不了广播状态

//GAP?Role?Callbacks
static?gapRolesCBs_t?Peripheral_PeripheralCBs?=?{
????NULL,
????peripheralRssiCB,??????????//When?a?valid?RSSI?is?read?from?controller?(not?used?by?application)
??NULL
};


//Bond?Manager?Callbacks
static?gapBondCBs_t?hidDevBondCB?=?{
????NULL,
????hidDevPairStateCB,???????//绑定后即可进入该函数
};

static?void?peripheralRssiCB(uint16_t?connHandle,?int8_t?rssi)
{
????PRINT("RSSI?-%d?dB?Conn??%x?\n",?-rssi,?connHandle);
}

if(events?&?START_DEVICE_EVT)
{
????GAPRole_PeripheralStartDevice(hidEmuTaskId,?&hidDevBondCB,?&Peripheral_PeripheralCBs);
????return?(events?^?START_DEVICE_EVT);
}

if(events?&?SBP_READ_RSSI_EVT)
{
????bStatus_t?res?=?GAPRole_ReadRssiCmd(hidEmuConnHandle);
????PRINT("RSSI?read?res:?%d,\n",?res);
????tmos_start_task(hidEmuTaskId,?SBP_READ_RSSI_EVT,?3200);
????return?(events?^?SBP_READ_RSSI_EVT);
}



image.png

image.png

添加回调函数的地方。

可以查看一下代码,或者移植到573上,或者用比对工具比对新提供的工程与EVT工程的区别。


谢谢,之前没看hiddev.c文件,现在可以打印出 RSSI 了.

BLE MAC 绑定数量我改了一下,好像回连也可以收发数据了,我再多测下看;

只是增加配对绑定名额应该只要做博客里面的第五步就可以了吧, 我现在就只是做了第五步及修改了 MCU.c 的这个函数:

uint32_t Lib_Write_Flash(uint32_t addr, uint32_t num, uint32_t *pBuf)

{

? ? EEPROM_ERASE(addr, EEPROM_PAGE_SIZE * BLE_SNV_NUM);

? ? EEPROM_WRITE(addr, pBuf, num * 4);

? ? return 0;

}

另外,这个 7FFFF应该是 77FFF吧?

1710223320388.png



是77FFF-77E00,多谢指正,博客已修改。

修改绑定数量,只需要修改config.h中的配置即可,即博客第五点。

单个绑定占用256B,绑定数量需要跟占用的大小对应。


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