【蓝牙专题】HCI协议解析

一、HCI介绍

        很多人接触蓝牙,是从HCI开始,因为HCI是主机控制接口协议(Host Controller Interface),蓝牙命令通过HCI来发送到Controller;

        如下图,HCI通过物理接口(USB、UART等)或虚拟接口,传递数据到Controller,Controller也通过同样的接口发送接收数据,这里注意到HCI层是在L2CAP层之下,LMP层之上;

HCI的主要作用就是透传,它不依赖于传输技术;

二、HCI协议格式

1、概述

HCI包含非常多的命令,它们完成时间是不确定的;所以大部分的HCI命令在命令完成后都会生成一个命令完成事件,命令发送端会开启一个定时器,若超时会上报错误;

所有HCI数据包均采用小端模式;

The Host Controller Transport Layer为HCI提供传输机制,使HCi可以传输HCI command,ACL data和同步数据,也可以接收事件,ACL data和同步数据;

2、句柄

HCI分为三种句柄,分别为Connection Handles, Logical Link Handles,and Physical Link Handles;

3、HCI数据包格式

这里只是以UART为例说明,其他类似

4、HCI packet type

5、HCI Command Packet

如下图所示

a、HCI command packet用于从host发送命令道contrlloer;

b、去掉包头可以包含255字节数据;

c、OpCode用来区别不同命令,它由两部分组成,OCF(10bits)和OGF(6bits),OpCode可以和下面的命令介绍联系起来;

6、HCI ACL Data Packets

如下图所示:

a、HCI ACL Data Packets用于host与contrller交换信息;

b、分为两种数据包,自动刷新包和非自动刷新包;

c、不同的数据包需要不同的handle类型,具体见下图说明;

d、关于PB Flag(the Packet_Boundary_Flag,bit4&bit5)和BC Flag(Broadcast_Flag,bit6&bit7),详细说明见下图;

7、HCI Synchronous Data Packets

数据格式如下图所示:

a、HCI同步数据包用来在host和contrller之间交换同步数据(SCO & eSCO);

8、HCI Event Packet

数据包格式如下图所示:

a、HCI事件包是Controller用来通知Host事件,出去包头最大可以为255字节;

三、HCI命令列表

下面只是命令列表(部分),具体请查看spec;

四、HCI FLOW CONTROL

我们来看下HCI的流控制;

HCI流控制是数据流,避免数据溢出;

有两种流控制类型:'packet-based' flow control 和'data-block-based' flow control;

五、实例

上面看了这么多协议,我们看一个实际的HCI包,这里以inquiry过程为例说明;

1、inquiry流程

参照http://blog.csdn.net/u010657219/article/details/42192481  

坤之前给我的设备可以显示HCI数据包;

在Linux系统上,当使用JMeter进行压力测试时出现OOM(Out of Memory)错误,可能有几个可能的原因。首先,类似于Mac系统上的情况,内存不足是一个常见的问题。如果服务器的可用内存不够,启动大量线程可能会导致系统内存不足,从而触发OOM错误。在这种情况下,可以尝试增加服务器的内存容量或减少压测时使用的线程数量来解决问题。 此外,JMeter本身也需要一定的内存资源来运行,尤其是在使用了一些计数器和其他插件时。如果服务器的内存资源不足以满足JMeter的运行需求,也可能会导致OOM错误。在这种情况下,可以尝试优化JMeter的配置,减少其对内存的消耗,或者考虑使用更高配置的服务器来运行JMeter。 另外一个可能的原因是测试过程中存在内存泄漏或资源不释放的问题。如果在测试过程中发现内存占用不断增长,最终导致OOM错误,那么可能需要对测试脚本或被测应用进行进一步的调试和优化,确保资源得到正确释放。 总的来说,解决Linux系统上JMeter压测过程中的OOM错误,可以考虑增加服务器的内存容量、减少压测时使用的线程数量、优化JMeter的配置、调试和优化测试脚本或被测应用的资源释放问题等措施。具体的解决方案需要根据具体情况进行调整和优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Jmeter压测问题](https://blog.csdn.net/weixin_44370919/article/details/108864324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [jmeter压测RocketMQ的插件](https://download.csdn.net/download/weixin_40126600/85011909)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值