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

今天要跟大家分享的是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是连接参数问题。
首先是我们测试主从经常掉线,两从连一主,其中,数最后一个连接上的主机最容易断开重连,打印日志如下图: 

断开的原因是Disconnected...Reason:3b,是0x3B,马赛克的原因是我找不到那张bug图了
查阅蓝牙5.3规范中的错误码如下图: 

断开的原因是Disconnected...Reason:3b,是0x3B,马赛克的原因是我找不到那张bug图了


查阅蓝牙5.3规范中的错误码如下图

这里说是不可接受的参数,那这样应该是主从连接参数配置的问题。
下面我们来检查一下参数,首先是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文档

 



0.625us是什么鬼?有这么夸张吗,BLE达不到吧。后来跟FAE确认,


1.25ms才是真。

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

三、个人总结
因为公司是小微企业,所以需要掌握很多技能,项目的迭代非常快,基本上每个人手头都是至少3个项目并行进行的。导致了很难深入学习。
但是我们不用担心学不到东西,我们需要做的是,做好笔记,利用闲暇时间总结一下,比如多发帖子!
另外就是遇到bug不要慌,找原厂FAE,这里真的非常感谢WCH的FAE,技术支持力度真的很到位。

 还有就是多去找找资料,比如Disconnected...Reason:3b这个错误码,其实在《Core_v5.3》,蓝牙的核心规范文档上面就有介绍,如下

 !!
---------------------
作者:lilijin1995
链接:https://bbs.21ic.com/icview-3277970-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值