| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 蓝牙 - HCI介绍 -> 正文阅读 |
|
[嵌入式]蓝牙 - 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中的低阶位。 不知道如何解释的参数值或操作码应被忽略,尝试执行相应操作并返回正确信号。 主机或控制器收到一些保留值时不应停止操作。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:50:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |