发新帖本帖赏金 20.00元(功能说明)我要提问
返回列表
[蓝牙芯片]

CH582作为Central连接其他厂芯片Disconnected...Reason:3b解决方案

[复制链接]
353|2
手机看帖
扫描二维码
随时随地手机跟帖
lilijin1995|  楼主 | 2023-1-11 16:46 | 显示全部楼层 |阅读模式
本帖最后由 lilijin1995 于 2023-1-11 17:54 编辑

今天要跟大家分享的是WCH的CH582作为Central连接其他厂芯片peripheral遇到的坑。踩完这个坑,感觉越来越喜欢CH582了。良心的蓝牙芯片,特别是对于我们这些搞电脑游戏外设的开发者来说,真乃国产良“芯”!!!


一、硬件环境:
1.Central:
用的是CH582作为central接收两个peripheral的报文,同时使用了它的USB host接收我们的usb hid设备报文,然后整合成一个usb dongle(实际上是一个(usb Gamepad)。582有蓝牙,又有两个usb(支持主从),竟是是强大如斯,赞赞赞


2.peripheral
这里我们有两个从机,都是用的FR8012HAQ ,这颗片子是我第一次接触的国产蓝牙,遇到了许多巨坑,其中的酸楚不便与人说。选择这颗片子的原因是它内置了PMU,电源管理模块,对于电池电量的检测是非常方便的,只需要把ADC参考源改一下,重新配置一下就可以,但是ADC只有一个,而且是10位的,这就不友好了。
二、软件设计
本人软硬件都会一点,但都不精。所以软硬件开发时候都很容易遇到bug。
这次遇到的bug是连接参数问题。
首先是我们测试主从经常掉线,两从连一主,其中,数最后一个连接上的主机最容易断开重连,打印日志如下图: 2786263be8086ee80d.png

断开的原因是Disconnected...Reason:3b,是0x3B,马赛克的原因是我找不到那张bug图了
查阅蓝牙5.3规范中的错误码如下图
6631963be814d463fe.png
这里说是不可接受的参数,那这样应该是主从连接参数配置的问题。
下面我们来检查一下参数,首先是582做的central:
// Connection min interval in 1.25ms
#define DEFAULT_MIN_CONNECTION_INTERVAL     6

// Connection max interval in 1.25ms
#define DEFAULT_MAX_CONNECTION_INTERVAL     100

// Connection supervision timeout in 10ms
#define DEFAULT_CONNECTION_TIMEOUT          100
void Central_Init()
{
    centralTaskId = TMOS_ProcessEventRegister(Central_ProcessEvent);

    // Setup GAP
    GAP_SetParamValue(TGAP_DISC_SCAN, DEFAULT_SCAN_DURATION);
    GAP_SetParamValue(TGAP_CONN_EST_INT_MIN, DEFAULT_MIN_CONNECTION_INTERVAL);
    GAP_SetParamValue(TGAP_CONN_EST_INT_MAX, DEFAULT_MAX_CONNECTION_INTERVAL);
    GAP_SetParamValue(TGAP_CONN_EST_SUPERV_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT);
}
计算参数,最小连接间隔6x1.25ms=7.5ms,最大连接间隔100x1.25ms=125ms, 连接超时时间100x10ms=1S.
接着我们再来看看从机的,
void param_timer_func(void *arg)
{
    co_printf("param_timer_func\r\n");
    gap_conn_param_update(0, 12, 12, 0, 500);
}
然后再看API文档
9370563be845599f91.png

0.625us是什么鬼?有这么夸张吗,BLE达不到吧。后来跟FAE确认,
6591763be84ba7a1e4.png
1.25ms才是真。

然后我把两从机的参数改成与Central的一致。最小连接间隔6x1.25ms=7.5ms,最大连接间隔100x1.25ms=125ms, 连接超时时间100x10ms=1S.
完美解决!!!

三、个人总结
因为公司是小微企业,所以需要掌握很多技能,项目的迭代非常快,基本上每个人手头都是至少3个项目并行进行的。导致了很难深入学习。
但是我们不用担心学不到东西,我们需要做的是,做好笔记,利用闲暇时间总结一下,比如多发帖子!
另外就是遇到bug不要慌,找原厂FAE,这里真的非常感谢WCH的FAE,技术支持力度真的很到位。
还有就是多去找找资料,比如Disconnected...Reason:3b这个错误码,其实在《Core_v5.3》,蓝牙的核心规范文档上面就有介绍,如下 3285463be873ac3e63.png




使用特权

评论回复

打赏榜单

21ic小管家 打赏了 20.00 元 2023-02-08
理由:签约作者奖励

chenjun89| | 2023-1-11 19:40 | 显示全部楼层
不得不说,沁恒微的芯片真的是YYDS啊。

使用特权

评论回复
OKAKAKO| | 2023-2-9 08:58 | 显示全部楼层
CH582挺好用的芯片,极高的性价比,拥有两个USB(HD)和BLE5

使用特权

评论回复
发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则