蓝牙协议栈之HCI层(chapter 1)

2023-10-10 17:40
文章标签 协议 蓝牙 chapter hci

本文主要是介绍蓝牙协议栈之HCI层(chapter 1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HCI简介

HCI(host communication interface)主机通讯端口,它主要为上层提供了一个统一的通讯端口,其主要用于传输命令和时间。大概关系图如下、
在这里插入图片描述
host(用户app)对蓝牙的控制都是发送通讯协议中定义的命令来控制蓝牙进入到响应的工作模式,蓝牙处理之后会以事件的方式返回通知主机。

一、协议数据格式

HCI传输的数据格式有4种类型,分别为命令,acl,sco和事件,在协议数据中对应的type分别为、
command(0x01)
acl(0x02)
sco(0x03)
event(0x04)

1.1、command pocket

command pocket的数据格式如下,大家也可以阅读蓝牙的协议栈文档去了解。
在这里插入图片描述
opcode为命令操作吗,由ocf与ogf组成。

1.2、ACL Data pocket

acl主要用于主从设备之间数据的异步交换,比如音乐播放,我们的l2cap就是使用的是该模式。数据包的协议数据格式如下、
在这里插入图片描述
handle表示当前通信通道的句柄,PB Flag(packet boundary flag)表示包的可接收到的层。
在这里插入图片描述

1.3、SCO Data Packet

SCO主要用于ble与host之间同步数据的传输,数据包格式如下、
在这里插入图片描述
handle如上描述、PSF如下、
在这里插入图片描述

1.4、Event Packet

event主要是be设备在有事件发生时通知主机,格式如下。
在这里插入图片描述

二、命令与时间介绍

在蓝牙的协议栈中,命令和事件太多,这里我们只列举一下几个常用的command与事件

2.1、复位命令

2.1.1、host发送部分:

00000010 00000010 00100000 00000110 00000000 00000010 00000000 01000001 00000001 00000000 00000001 00000001 00000011 00001100 00000000

Command:00000001(0x01)

Opcode: 00000011 00001100(ogf:000011(0x03),ocf:0000000011(0x03))根据ogf和ocf查表可知为复位指令

2.1.2、设备接收回应如下、

00000100 00001110 00000100 00000001 00000011 00001100 00000000

Event:00000100(0x04)

Event code:00001110(0x0e,命令完成指令)

Paramter total length:00000100 (参数长度为4)

Num hci command packet:00000001(表明controller还可以接收1个host的指令)

Opcode: 00000011 00001100(ogf:000011(0x03),ocf:0000000011(0x03))指明是对reset指令的回复,这个值必须与发送部分相同

Status:00000000(零为成功,其他为失败,具体参考失败码)

这篇关于蓝牙协议栈之HCI层(chapter 1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/182036

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台