ch582 蓝牙开发问题

我目前在用ch582开发蓝牙hid,我发现如果在低速广播的情况下(广播间隔为100ms),用windows电脑去连接蓝牙设备,很容易出现连接失败的问题,当我将广播间隔调到20ms的时候,情况会好,但是我总不能一直20ms间隔广播,有什么办法能在低速广播的情况下,当主机发起连接的时候,设备端能切换到高速广播嘛?

你好,可以查看一下是否直接系统蓝牙连接的582hid从机官方例程,并提供一下对应的电脑系统。我们这里实测win10\win11是可以连接无问题的。

如果是使用切换广播的间隔,是可以实现的,但是要注意有外部的触发信号,比如在按下某个按键进行调整广播间隔。

可以参考该博客的动态广播间隔:

蓝牙BLE从机Peripheral讲解六(动态广播与连接) - SweetTea_lllpc - 博客园 (cnblogs.com)


你好,谢谢你的回复,就是没法在连接回调(GAPROLE_CONNECTED)里面切换广播间隔对嘛?还有一个问题就是,如果我调用HidDev_Report函数有发送完成回调吗?


需要处于在广播的状态下进行调整广播间隔,如果在连接的状态,此时的状态机是连接态。

在广播态下进行广播间隔调整,需要查看进入waitingforadvertising状态再进行开启广播。

状态查看是否发送成功:

image.png


这个GATT_Notification返回的状态是成功的时候,是数据已经被蓝牙主机接收到了吗?还是说只是塞进蓝牙协议栈的fifo了?如果是塞进蓝牙协议栈的fifo,那如何知道什么时候数据被蓝牙主机接收到了呢?


返回状态成功代表已经将数据存放到底层,接下来只要蓝牙没有断开连接则一定会发送出去的。

如果需要确保主机已经接收到数据并从应用层面的角度来观察,则可以做一个校验,如主机收到数据再发送一个数据给从机用来通知从机。

或者可以使用indication:

蓝牙BLE从机Peripheral讲解二(句柄指示\确认(Handle Value Indication\Confirmation)) - SweetTea_lllpc - 博客园 (cnblogs.com)


好的,谢谢你,还有一个问题就是我自己的板子上面用的32Mhz晶振负载电容是8pf,但是我看芯片手册里面最低只能配置10pf负载电容,我需要怎么外加辅助电容调节呢?


晶体标称的规格是指在该规格时,晶振的振荡频率为最吻合的。

可以通过公式计算,芯片内置负载电容选择最低为10pf,再加上板子的寄生电容约2pf,则负载电容值最低为7pf左右。

因此如使用8pf的规格,则不需要外挂电容。

但是需要注意一点,使用蓝牙功能的2.4G信号是通过32M倍频上去的,因此32M如果有偏差则2.4G也会产生对应的频偏。一般建议的是如果2.4G频偏最准的情况下,则频偏可以调整为18或者20pf。这与上面选择10pf的内置负载电容是有偏差的,但是实际使用理论上不受到影响(针对蓝牙频偏则是建议在最准的情况下使用,偏差范围在±60K使用也是没问题的)。

官方建议使用12pf的电容,是因为在不同的板子上即使寄生电容偏差较大也可以有较好的调整空间。

针对你的需求,当前使用的8pf规格晶振时,可以适当调整芯片的内置匹配电容参数,如10\12\14pf进行实际测试,注意查看晶振起振和蓝牙连接。

但是最终还是建议使用12pf规格参数的晶振。

针对校准蓝牙2.4G的频偏,可以通过频谱仪测试或者查看该博客的第二点进行简单的频偏测试:

CH58x嘀嗒定时器(SysTick) - SweetTea_lllpc - 博客园 (cnblogs.com)



感谢你的回复,能给我一份image.png这个代码吗?我的邮箱是个人信息保护,已隐藏


已发送至邮箱,或者可以参考9160的方案,单9160+592完成2K方案。



好的谢谢你,有ble hid 多设备绑定和切换的例子嘛?


还有个问题就是为什么gpio唤醒有概率会导致死机


配对与绑定的操作与讲解参考:

BLE配对与绑定 - 随笔分类 - SweetTea_lllpc - 博客园 (cnblogs.com)

GPIO唤醒可以直接参考PM的例程,注意使用最新的例程:

CH583EVT.ZIP - 南京沁恒微电子股份有限公司 (wch.cn)


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