蓝牙HCI协议

2023-05-16

这里写图片描述
这里写图片描述
HCI 层位于蓝牙高层协议和低层协议之间,提供了对基带控制器和链路管理器的命令以及访问蓝牙硬件的统一接口,它是我们实现自己的蓝牙设备要接触的第一个蓝牙协议,起着承上启下的作用。
HCI通过包的方式来传送数据、命令和事件的,所有在主机和主机控制器之间的通信都以包的形式进行。包括每个命令的返回参数都通过特定的事件包来传输。HCI有数据、命令和事件三种包,其中数据包是双向的,命令包只能从主机发往主机控制器,而事件包始终是主机控制器发向主机的。主机发出的大多数命令包都会触发主机控制器产生相应的事件包作为响应。

HCI 传输层

《core4.0》V4-2017 传输层协议
目前,HCI 的传输层主要有三种:USB,UART,三线串口、SD接口。
不同传输层对HCI 事件处理没有影响。

(1)USB 传输层在蓝牙硬件上使用USB 硬件接口(该硬件接口有两种嵌入方式:一种是作为USB 加/ 解密芯片,另一种是集成到PC 机主板上)[6]。这一种类编码要求不管使用哪一厂商生产的设备,都能加载 合适的驱动程序栈;同时它还保证了通过控制终端的HCI 指令和USB 指令有所区别。其缺点是软件协议复 杂,软件开销巨大。
不同的事件分组通过不同的接口和端点进行区分。

(2)UART 传输层跟RS-232 传输层类似,也是采用一个UART 的串行通信方式在主控制器与主机之间 进行数据传输。应用环境主要是针对主控制器和主机位于同一个电路板上,传输层假定UART 通信无线性错误。UART传输层方式比较灵活,其应用环境决定其连接错误相对较少,可以采用简单的复位恢复机制实现失步时的复步。由于主机和主控制器都处于同一块电路板上,因而传输层不需要规定电气信号,可以直接采用TTL、LV-CMOS 等IC端电压,应用较多。UART 传输层避开了RS-232 传输层要求的较繁琐的协商和同步机制。UART性能和数据吞吐率水平与USB接口相当,而传输协议却较为简单, 减少了软件开销,是一种更为经济高效的全硬件解决方案。
同RS232一样,HCI不提供区分四种HCI包类型的能力。因此,如果经由公共物理接口(HCI)发送HCI分组必须根据下面的表添加分组指示符。

HCI packet typeHCI packet indicator
HCI Command Packet0x01
HCI ACL Data Packet0x02
HCI Synchronous Data Packet0x03
HCI Event Packet0x04

所有四种HCI分组具有长度字段,其用于确定对于HCI分组预期多少字节。当已经接收到整个HCI分组时,期望下一个HCI分组指示符用于下一个HCI分组。
这里写图片描述
RTS / CTS流控制用于防止临时UART缓冲区溢出。
它不应该用于HCI的流量控制,因为HCI有自己的HCI命令、事件和数据的流量控制机制。
如果CTS为1,则允许主机/主机控制器发送。
如果CTS为0,则不允许主机/主机控制器发送

如果主机或主机控制器在通信中失去同步则需要复位。丢失同步标志是已检测到不正确的HCI包指示符,或者检测到的长度字段超出HCI数据包超出范围。
在主机到主机控制器方向同步丢失后,主机控制器将发送一个硬件错误事件(HardwareErrorEvent)来告诉主机。然后主机控制器将等待主机发送(HCI_Reset_Command)以便执行复位。
如果在主机控制器到主机方向发生同步丢失,则主机必须发送HCI_Reset 命令才能复位主机控制器。主机通过检查HCI复位命令的命令完成事件来重新同步。

HCI分组格式

  • 指令分组(Command Packer)
    Host -> Slave,
  • 事件分组(Event Packet)
    Slave -> Host,响应主机命令的事件
  • 数据分组(Data Packet)
    Host <–> Slave,异步无连接(ACL),同步面向连接(SCO)数据分组

分组参数原则

《core4.0》V2-E5.2-671
- 除非另有说明,否则所有值均为二进制和十六进制小端格式
- 负值为2进制的补码
- 数组参数使用以下符号指定:ParameterA [i]。如果指定了多于一组的数组参数(例如ParameterA[i],ParameterB [i]),则参数的顺序如下:ParameterA [0],ParameterB [0],ParameterA [1],ParameterB [ 1],ParameterA [2],ParameterB [2],…ParameterA [n],ParameterB [n]
- 除非另有说明,否则以Little Endian格式发送和接收所有参数值(即,对于多个八位字节参数,首先发送最右侧)
- 在指定字符串下,低位是右边,例如。 0是’10’中的低位。
- 标记为未来使用保留的值或参数应设置为0,除非在传输时另有明确说明,并在接收时被忽略。实现不知道如何解释的参数值或操作码将被忽略,并且正在尝试的操作将使用正确的信令完成。由于接收到保留值,主机或控制器不应停止工作

指令分组格式

《core4.0》V2PE5-674
这里写图片描述

  • 最大包长255,不含头部
  • OCF(6 bits):命令字段, 0x00-0x3F (0x3F reserved for vendor-specific debug commands)
  • OGF(10 bits): 组字段,0x0000-0x03FF。
  • Parameter Total Length:后续参数的长度

事件分组格式

《core4.0》V2PE5-680
这里写图片描述

  • Event Code(8bit): 0x00-0xFF,0xFF为事件代码保留
    用于供应商特定的调试事件。

数据分组格式

ACL分组

《core4.0》V2PE5-675
这里写图片描述

  • Handle:范围:0x000-0xEFF(0xF00 - 0xFFF留作将来使用)
    Packet_Boundary_Flag(PB):
    这里写图片描述
    Broadcast_Flag(BC):
    这里写图片描述

SCO分组

这里写图片描述

  • Connection_Handle:用于传输同步数据分组或段。范围:0x0000-0x0EFF(0x0F00-0x0FFF保留供将来使用)

这里写图片描述

HCI 命令和事件

具体命令参数含义和返回事件请查看,《core4.0》V2PE7-700

HCI命令分类

HCI命令分为几大类

指令类型OGF
链路控制指令(Link Control commands)0x01
链路策略指令(Link Policy Commands)0x02
主机控制器与基带指令(HCI Control and Baseband Commands)0x03
信息参数指令(INFORMATIONAL PARAMETERS)0x04
状态指令参数(STATUS PARAMETERS)0x05
测试指令(TESTING COMMANDS)0x06
LE CONTROLLER COMMANDS0x08

HCI事件分类

具体返回事件参数含义和请查看,《core4.0》V2PE7.7-961

错误代码

具体错误代码请查看,《core4.0》V2PD-589
在返回事件中如果带有staus代码,这时候就可以返回错误代码,表面命令执行失败的原因。

HCI流控制

参考网站:
http://blog.sina.com.cn/s/blog_4c02ba150101r23p.html
http://blog.csdn.net/android_huber/article/details/7727512

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝牙HCI协议 的相关文章

随机推荐

  • STL-set (集合)之删除元素

    set概述 和vector list不同 xff0c set map都是关联式容器 set内部是基于红黑树实现的 插入和删除操作效率较高 xff0c 因为只需要修改相关指针而不用进行数据的移动 在进行数据删除操作后 xff0c 迭代器会不会
  • 经典算法之一:快速排序

    快速排序由于排序效率在同为O N logN 的几种排序方法中效率较高 xff0c 因此经常被采用 xff0c 再加上快速排序思想 分治法也确实实用 xff0c 因此很多软件公司的笔试面试 xff0c 包括像腾讯 xff0c 微软等知名IT公
  • 矩阵乘法测试

    对于时间的函数 gettimeofday 函数使用方法 xff1a http blog csdn net hurmishine article details 60326345 矩阵乘法测试 xff1a 代码 xff1a 1 为了试验简单
  • Python爬虫自动获取CSDN博客收藏文章

    CSDN的Python创意编程活动开始第一天就看到了 xff0c 但是认为自己是菜鸟 xff0c 就向当 吃瓜群众 xff0c 后来看到有好多人的代码是关于爬虫的 xff0c 当初我就是由于对爬虫 感兴趣才自学的Python 现在也打算参加
  • 全网最!详!细!Tarjan算法讲解。

    Tarjan算法讲解的博客网上找到三篇比较好的 现在都转载了 个人只研究了第一篇 正如博主所说 讲的标比较详细 清晰 剩下两篇也可以看一下 卿学姐视频讲解 https www bilibili com video av7330663 以下内
  • MFC计算机图形学(1)

    这学期上了计算机图形学 xff0c 用MFC来绘制简单的图形 下面就简单介绍一下用cv 43 43 来绘制图形 VC 43 43 安装 VC 43 43 我基本不用的 xff0c 平时写C C 43 43 的代码都用Code Blocks
  • MFC计算机图形学(2)

    这里呢 xff0c 先把上一讲的联系讲一下 一般人都用是一个一个的去画 xff0c 但是那样好麻烦 xff0c 计算机的有点就是容易处理重复的事情 xff0c 那就定义成一个画正方形函数吧 xff0c 每次调用就可以了 怎么自定义函数呢 x
  • MFC计算机图形学(3)

    之前我们已经可以画出直线和曲线了 但是算法虽容易理解 xff0c 但是复杂度高 xff0c 今天就介绍比较流行的DDA画线法 xff0c 还有 xff0c 对鼠标进行事件有所响应 xff0c 即 xff0c 在画板上 xff0c 鼠标左键单
  • Ubuntu18.04安装realsense viewer

    一 下载realsense安装包 mkdir p librealsense install cd librealsense install git clone b v2 31 0 https github com IntelRealSens
  • 用D435i录制自己的数据集运行ORBslam2并构建稠密点云

    一 录制rosbag 二 播放rosbag并用rviz查看topic xff0c 记下rgb和depth流话题名 三 用如下脚本 xff08 python2而不是3 xff09 保存rgb和depth图片同时生成rgb txt depth
  • Unrecoverable error: corrupted cluster config file.

    from https www cnblogs com topicjie p 7603227 html 缘起 正在欢乐的逗着孩子玩耍 xff0c 突然间来了一通电话 xff0c 值班人员告诉我误重启了一台服务器 xff0c 是我负责的服务 x
  • 树莓派3B+无屏幕和键盘配置树莓派WiFi和SSH

    前言 树莓派3B 43 安装系统Raspbian xff0c 默认的SSH是关闭的 xff0c 如何在无屏幕和键盘的情况下 xff0c 让笔记本通过WIFI访问树莓派 树莓派3B 43 发布后不久 xff0c 树莓派官方 Raspbian
  • ubuntu分区设置

    ubuntu分区设置 swap区 xff1a 逻辑分区 xff0c 虚拟内存类似 xff0c 大小和电脑内存一样大 xff1b boot区 xff1a 主分区 xff0c 引导系统的 xff0c 分配200M 500M xff0c 条件好些
  • 图像系统概述和名词解析

    图像系统组成 光源 xff08 包含人造光 自然光 闪光灯 xff09 照到物体上 xff0c 光线反射进入成像系统 xff0c 经过镜头 xff08 对于变焦镜头有驱动马达调整镜片位置 xff0c 实现变焦 xff09 光圈 滤光片 快门
  • 海思IQ图像清晰度调试策略

    总策略 影响清晰度的关键指标 xff1a 锐度 噪点和gamma Gamma调试步骤 YUVsharpen锐度调试 LDCI局部对比度调节 Dehaze调节 去雾算法主要用在有场景中做处理 xff0c 调整图像的对比度使更加清 去雾算法主要
  • 海思ISP曝光调整策略

    AE曝光调整 Exposure Attr 影响参数 xff1a ExpTimeRange Min Max 曝光时间Gain 各种增益控制Speed 曝光速度 xff08 影响到曝光收敛 xff0c AE闪烁 xff09 Compensati
  • ADS(ARM Developer Suite)安装与卸载中的问题(转)

    ADS用来对ARM的裸机代码进行编辑和调试 我在安装ADS1 2的过程中 xff0c 遇到了一个小问题 xff0c 写下来和大家分享一下解决方法 1 在安装程序 xff0c 进度条到100 时 xff0c 会一直停在那 xff0c 十几分钟
  • ucosIII 学习资料汇总

    网站 书籍 1 嵌入式实时操作系统uc OS III 邵贝贝译 这本书其实就是一本工具书 xff0c 我参考了官方的说明文档 xff0c 发现雷同很高 感觉就是官方说明文档翻译的 xff0c 用来应用查查接口还有点用 xff0c 不是十分推
  • USB协议传输结构

    USB作为数据通信标准 xff0c 固件可分为枚举配置和类协议部分 xff0c 枚举配置实现USB主机对设备的枚举和配置 xff0c 类协议实现设备各自的数据传输 usb2 0协议chapter8 protocol layer 1 USB协
  • 蓝牙HCI协议

    HCI 层位于蓝牙高层协议和低层协议之间 xff0c 提供了对基带控制器和链路管理器的命令以及访问蓝牙硬件的统一接口 它是我们实现自己的蓝牙设备要接触的第一个蓝牙协议 起着承上启下的作用 HCI通过包的方式来传送数据 命令和事件的 xff0