蓝牙 - HCI介绍

蓝牙里面的HCI是啥?

如上图,HCI就是HOST和Controller之间的通道。用来桥接Host和Controller Devices。

HCI是一个标准的蓝牙用的接口,用来Host发给Controller命令,HOST从controller接收events,和HOST发给Controller数据,和从HOST从Controller接收数据。

HOST就是指我们的主控芯片,Microcontroller/ MCU / μCON / MPU等,比如我正在使用的是iMX6ULL芯片。

Controller就是蓝牙芯片了,比如我比较熟悉的TI的CC2564芯片。

那这两个芯片之间用什么方式通信呢?

用的是串行通讯,主要有两种,一种是UART,另一种是USB。

这个是根据厂商实现的蓝牙芯片和所使用的协议栈共同决定的。

我们一般以UART为主要使用方式,更方便我们通过外部UART串口工具来抓取HCI通信数据或发送HCI命令给蓝牙芯片。

蓝牙5.0规范里HCI的介绍

我们网上搜索蓝牙5.0协议,下载bluetooth-Core_v5.0.pdf,以5.0为例,还有比5.0更高版本的蓝牙spec。

蓝牙协议内容很多,打开后发现里面分了8卷,从Volume 0 ~ Volume 7。

有关HCI的主要部分在Vol 2: Core System package [BR/EDR Controller volume],Part E: Host Controller Interface Functional Specificaton。

这里面介绍了HCI Flow Control,HCI Data Formats和HCI Commands and Events。

HCI上的信息交互:

Host Controller Transport Layer实现了透明的信息交换。

包含以下类型的信息:

Host -> BR/EDR Controller: HCI commands  / ACL data  /  synchronous data.

Host -> LE Controller: HCI commands  / ACL data 

Host -> AMP Controller: HCI commands  / ACL data 

BR/EDR Controller -> Host :  HCI events, ACL data and synchronous data

LE Controller -> Host :  HCI events, ACL data

AMP Controller -> Host : HCI events, ACL data

HCI规范上描述了Host和Controller之间传输的数据的格式,包括commands,events和其他数据。

所以HCI上的数据类型分为四种:

HCI Command Packet

HCI ACL Data Packets

HCI Synchronous Data Packets

HCI Event Packet

HCI数据传输控制

HCI提供了一个统一的命令方法来访问控制器的各种功能。

HCI命令的执行可能需要一些时间。因此命令的结果将以事件event的形式报告给主机。

例如,对于大多数HCI命令,控制器将在命令完成时产生命令完成事件。

这个事件包含完成HCI命令的返回参数。

Host Controller Interface driver层,是底层通讯功能的具体实现,在这一层上还有个transport layer,叫做HCI传输层,属于Host driver stack一部分。

这个层的主要作用是数据透传,这样传输层和底层的具体传输技术是UART还是USB就无关了。

为了使主机检测HCI-传输层上的错误,需要设定一个超时,在主机发送命令后和接收到控制器的回应之前,比如等待控制器发出的Command Complete和Command Status事件。

由于最大的响应超时在很大程度上取决于所使用的HCI传输层,建议使用该计时器的默认值为一秒钟。

这个时间量也取决于命令队列中未处理的命令数量。

其他说明:

除非另有说明,所有数值都是二进制和十六进制的小端格式。

除非另有说明,所有的参数值都以小端格式发送和接收,即对于多字节的参数,最右边的(低有效位字节)先被传送。

在指定的位串中,低阶位是右手边的位,例如,0是10b中的低阶位。

不知道如何解释的参数值或操作码应被忽略,尝试执行相应操作并返回正确信号。

主机或控制器收到一些保留值时不应停止操作。

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值