蓝牙开发那些事之聊一聊hcilog

对于蓝牙开发者和硬件工程师而言,掌握HCI日志分析技术就如同医生学会看X光片一样关键。HCI(Host Controller Interface)日志是蓝牙协议栈的"黑匣子",记录了从应用层到射频底层的所有通信细节。

无论是解决偶发断连还是优化功耗,掌握这项技能都能让你从"凭经验猜"升级到"靠数据说话"的专家段位。

例如当BLE连接频繁断开时,通过HCI_Disconnection_Complete事件能直接看到错误码是0x3E(超时)还是0x08(加密失败)。

若日志出现"HCI_LE_Enhanced_Connection_Complete + Error 0x0D":
表示对方设备拒绝连接,常见于蓝牙5.0设备尝试连接4.2设备时PHY不匹配

若发现HCI_Number_Of_Completed_Packets事件间隔忽大忽小,说明蓝牙射频被Wi-Fi或其他2.4G设备干扰,需调整AFH信道映射

若持续出现HCI_LE_Advertising_Report事件但无实际广播数据:
提示应用层未正确关闭扫描,导致射频持续耗电

HCI层的快递帝国——每个数据包都是加急件

如果把蓝牙协议栈比作一家跨国物流公司,那‌HCI层就是中转站的智能分拣机器人‌。当你按下手机上的"连接"按钮,这场史诗级物流大戏就开场了:

‌经典场景重现‌:

手机端Host协议栈(总调度中心)掏出小本本写下:"给耳机发个心跳包"。

快递小哥HCI抄起ACL数据包(蓝牙界的顺丰快递袋)就往Controller(基层网点)狂奔

Controller的射频小哥(最后一公里配送员)对着2.4GHz频段疯狂喊麦:"AirPods Pro你在吗?!"

某次调试现场实录:Host说发10个包,Controller只收到9个,双方在HCI层上演《消失的快递》悬疑剧。

想要偷看蓝牙设备“私聊”? 在快递站偷偷拆开快递袋就行了哦。

整整3000多页的core spec,关于HCI的,一共就有1000来页:

图4-29 core-spec关于hci的章节

大量的数据格式、标准,如果没玩过蓝牙的人,会看得云里雾里。

所以我希望换一个视角,我们从数据的角度出发,从代码的角度出发,去看一次经典蓝牙连接的全过程,可能结合实例去理解,对于初学者来说更容易一点。

这里的数据是指的HCILOG,一般来说研究通信,空中包很重要,但是抓包设备贵啊,而且hcilog一般情况下也就够用了,为什么呢?看一下架构图就明白了:

图4-30 双芯片架构

这个架构图是一个双芯片的架构,其中的HCI在嵌入式的场景下大概率是UART,在PC上就可能是个USB,比如说你的电脑不支持蓝牙,那么,在你的电脑的USB接口上插上一个usb的蓝牙dongle,再配合一个类似IVT的Bluesoleil或者其他的软件,你的电脑就支持蓝牙了。这个Bluesoleil就相当于host协议栈。

现在,这种架构慢慢变少了,把HOST和CONTROLLER放到一起,做成一颗芯片的场景越来越多,这个时候,HCI变成了一个虚拟层,一个纯粹软件意义的东西。

在btstack中其实也可以看到这样的单芯片架构,其传输层就是虚拟的:

图4-31 btstack传输层结构体

比如这个sx1280的芯片,就不是一个传统意义上的蓝牙controller芯片,而是这样的一个东西:

‌SX1280芯片可以支持蓝牙协议‌。SX1280是Semtech公司推出的一款高性能无线收发器,主要应用于2.4GHz频段的通信。该芯片不仅支持多种调制方式,包括LoRa、FLRC和FSK调制技术,还具备兼容蓝牙协议的能力‌12。这使得SX1280在物联网应用中表现出色,适用于各种需要长距离通信和高可靠性的场景,如智能家居、安全系统、定位追踪、穿戴设备、智能手环与健康管理等‌

sx1280的controller层收到btstack的host层的数据后,就是通过以下流程最后给到RF发送出去的。

图4-32 sx1280的数据下发路径

蓝牙协议栈被hci分成了Host和Controller两部分,狭义上的协议栈是指的Host, 其实Controller也是有协议栈的,包括LC、LMP等等。

Controller就是蓝牙模块,最终会操作到射频的硬件寄存器等部分,还包括LMP、LC层等偏底层的协议,这个一般芯片原厂提供的模块都封装好了的。

所以Host中上层profile所需要发送或者接收的包都是通过HCI接口和controller交互,你可以把hci理解为快递的自提点,Host需要发送的包放到自提点,剩下的controller什么时候发,controller会根据一个链路策略在合适的时机发送给peer端,同样的,controller收到peer端的包裹后也会通过hci接口发给Host。(HCI ACL data包)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值