【Bluetooth蓝牙开发】六、BLE协议之传输层
这篇文章由董哥分享了他的嵌入式领域新知,并详细介绍了蓝牙协议中的HCInterconnect接口及其作用。文章从HCInterconnect的定义开始,解释了其作为连接层技术的核心地位,并通过传输层的作用说明了其如何实现设备间的数据交换与控制。此外,文章深入探讨了HCInterconnect的数据包类型(包括命令包、事件包、ACL数据包和同步数据包),并分别分析了每种数据包的格式及应用场景。最后文章还简要提到了HCInterconnect在网络协议栈中的位置及其重要性。

个人主页:董哥聊技术 我是董哥,在嵌入式领域深耕多年,并专注于分享高质量的技术文章与实践经验。我的创作理念是:致力于提供深度且实用的技术见解与应用方案,帮助读者在技术探索中获得启发与成长空间。

1.1 研究背景
研究背景
深入探讨研究背景
1、前言
2、HCInterface(人机交互界面)介绍
3、HCData包类型
4、HCData包格式
*
4-1 HCCommand报文
*
4-2 HCEvent报文
*
4-3 HCACL授权控制数据报文
*
4-4 HCSYNC同步数据报文
- 5、HCI连接包的具体示例
- 5.1 HCI Initiate Connection 操作指令
- 5.2 操作完成事件
- 5.3 连接完成事件
- 5.1 HCI Initiate Connection 操作指令
1、引言

在之前的章节中,我们深入学习了Link Layer这一层次的知识。随后,在继续探讨时发现,在链路层之上就是传输层的概念。
在Host与Controller之间的传输层也被广泛称为中间层(Intermediate Layer),它具备一种使得能够方便地传递数据而不必深入了解具体的数据细节的能力。
其主要利用硬件通信接口(包括以下几种典型的硬件通信接口:UART、USB和SDIO等),实现蓝牙协议的上层数据传输。
本节将展示UTB serial interface的传输架构设计框图

通读这张图后,通过大致浏览后,我们对传输层有一个基本的认识.接下来会对传输层进行深入分析.
HC的详细介绍,请参考《Core5.0》第670页

该系统通过硬件和软件协同作用实现对多设备的数据采集与管理。系统架构设计采用模块化方案, 采用统一协议进行通信, 从而保证数据传输的连续性和实时性。

上图呈现了两个设备之间的数据传输路径。借助HCI Driver驱动程序与Controller硬件连接后端接口上的HCI Firmware模块(标注为硬件端),Host能够主动发起通信请求并接收相应的响应信息。传输层则负责实现这一功能。
传输层起着负责实现网络数据传输的重要作用
HCI提供了供访问和控制Controller的一种统一的接口;其传输层设计为透明化处理,并不受底层传输技术的影响;同时该系统无需让Host将要发送给Controller的数据是什么内容进行特殊处理。
在host与controller之间采用command与event通信方式实现数据传输。host接收command指令至controller controller接收并反馈command status及params数据至host最终返回command complete event确认连接完成
更直观性更高:

3、人机交互(Human-Computer Interface)数据格式类型:基于不同应用场景的划分
HCI分为四种类型的包格式,请问您指的是哪一种?包括但不限于数据接口控制接口(DCI)、用户界面事件处理接口(UIEI)、应用程序通信接口(API)以及资源管理接口(RMI)。

- 蓝牙指令包(HCI Command Packet) :该数据包是由蓝牙协议栈向芯片发出的指令信息。
- 蓝牙事件报文(HCI Event Packet) :该报文是由蓝牙设备向协议栈报告的状态变化信息。
- 蓝牙互惠数据报(HCIA CL DataPacket) :此数据包体现了双方通讯时传递的信息内容。
- 蓝牙同步数据报(HCISynchronousDataPacket) :该报文是基于双方同步通信机制使用的常规信息块。
参考文献Core5.0.pdf中的第670页内容
通过Host和Controller之间的接口实现Human-Computer Interaction(HCI)中所涉及的指令和事件类别如下:
详细内容请参考文献Core5.0.pdf第647页

在前面的讨论中,在HCI通信包中分为四类的内容已经得到介绍。接下来我们将逐一探讨每种类型的特征。
HCI指令数据包
HCI Command Packet由Host负责传输指令给Controller控制器。
资源包整合了多组功能模块,并根据实际需求进行优化配置。每个功能模块均具备独立性及可扩展性特点,在不影响其他组件运行的前提下支持灵活配置与扩展。此软件不仅能在Windows系统上运行,在macOS及Linux等多平台环境同样适用,并能保证在不同环境下稳定运行。该软件采用先进的算法设计与成熟的编程技术结合,在性能上有明显提升的同时也显著降低了能耗水平。此外, 该软件还特别注重用户体验, 在界面设计上力求简洁直观, 同时通过人性化的操作流程设置, 有效提升了使用效率

操作码字段
OpCode占用两个字节作为指令标识符,并被划分为两组字段:一个是操作码群字段OCF: OpCode Group Field,另一个是操作码指令字段OGF: OpCode Command Field。
- OGF占用了高6bit位,并分别代表不同的蓝牙命令类别。
- OCF占用了低10bit位,并仅用于特定类别的唯一蓝牙指令。其中以十进制表示为0X3F的代码专门用于设备制造商进行调试操作。
试着想象一下:OGF指的是你在班级中的座位组别;而OCF则是你在这个组中的具体位置。

参数总长度字段
Paramter_Total_Length:该包内各参数的总长度

该字段用于接收或显示参数信息

对于该Parameter来说,在每条指令中所需参数各不相同;因此需要依据具体情况做出选择。
4.2 HC Event Message
每一个Command指令执行后会对返回的不同参数类型提出具体要求,并依据其返回的不同数据类型设定相应的处理流程。
资源简介:该平台提供了一个全面的解决方案集合。通过灵活的管理策略以确保任务高效完成。支持多种数据输入形式,并且系统运行稳定。技术先进且功能齐全的技术平台适用于各个行业的企业业务需求分析。帮助用户优化运营流程,并能显著提升工作效率和决策质量。

该字段用于记录事件代码信息
Event_Code: 表示不同的事件类型

参量总计长度字段
Parameter_Total_Length:参数总长度值

事件相关参数字段
Event_Parameter:相关参数设置与之前相同,在每次命令中都会有其独特的参数设置返回结果。

Human-Computer Interaction Access Control List Data Packages
根据HCIA CL数据包规范定义为用于主机与控制器之间数据传输的数据格式。
数据包有两种类型 :
The data packets comprise two distinct categories.
该资源支持自动地刷新功能
自动更新包通常由系统设置的频率决定
无法在自动化流程中实现刷新操作的资源类型被称为不可自动刷新类型
非自动刷新,则不会主动发起请求以获取最新的数据内容。
该软件包提供丰富且专业的功能组合,在数据处理领域具有显著优势
支持多种数据格式导入导出,并具备高效的分析功能
能够处理和转换主流文件类型,并提供直观的数据可视化解决方案
不仅满足基本的数据处理需求,在复杂场景下也能发挥出色表现
支持在线协作模式,并具备团队协作能力
通过灵活的参数配置设置满足个性化需求
通过优化算法性能提升计算效率
该软件系统广泛应用于多个行业领域

该系统中的处理字段设计采用了先进的技术方案
解析
Handle:标识符用于表示逻辑链路中的通信通道。可分为三类不同的类型:
- Connection_Handles
- Logical Link Handles
- Physical Link Handles
Connection_Handles:由Primary Controller Handles负责分配,并标识主机与主控制器之间的逻辑通道。当一个新的逻辑连接建立时,Connection_Handles将被相应分配。
该Handle主要用于处理以下几种Event:Connection Complete、Synchronous Connection Complete、LE Connection Complete以及LE Enhanced Connection Complete。
当Host首次开机或重启时,在完成初始配置后会向网络发送首份HCIP分组,并分配初始连接控制编号(ID)。随后持续使用该连接控制编号进行广播操作。
AMP控制器分为两类:逻辑连接处理节点和物理连接处理节点。
在Host与AMP Controller之间的Data, Command及Event操作中,在Physical Link Handles被指定时,则使用该Handle;若未指定Physical Link Handles,则应在Connection_Handle处采用Logical Link_handles
为了避免深入讨论AMP的技术细节
标识字段用于区分不同的数据记录
该标识符包含:其中 PB Flag = Packet_Boundary_Flag, BC Flag = Broadcast_Flag: 取值如下


4.4 Human-Computer Interaction Protocol and Synchronized Data Transmission Mechanisms
此数据块被用来在Host和Controller之间传输同步的数据块
通过科学的方法...实现目标;该资源为深度学习模型训练提供全面支持;支持多维度的数据分析功能;采用先进的算法优化计算效率;具备强大的扩展性以适应不同规模的数据集;提供详细的文档支持以确保使用过程中的顺利操作
该资源提供了一种高效的学习算法框架;支持大规模的数据处理能力;能够自动优化模型结构以提高预测精度;适合各种复杂的数据分析场景;具备良好的可扩展性以适应业务需求的变化

数据包状态标志字段
此数据字段相关联于Erroneous_Data_Reporting参数:
- 当
Erroneous_Data_Reporting参数被指定为disable值时,则令Packet_Status_Flag字段赋值于00。- 当该参数被指定为enable值时,则令该字段的赋值基于下述表格进行确定。

该字段用于计算数据总长度

在这一部分中,仅需了解HC包的主要类型即可.通过分析这些HC包的数据就能达到目标.
5、HCI 连接包示例
HCIAutoConfigType 是 HCI 连接包中的一个配置参数类型。 HCIAutoConfigType = [ ... ]
该系统支持HCIs(人机交互系统)的快速连接命令流程
蓝牙协议栈向芯片发出连接请求:HCI Connect command
蓝牙芯片向蓝牙协议栈发送蓝牙设备操作完成确认信息:HCInterfaceCommandComplete()
在完成蓝牙设备连接后,在蓝牙芯片中生成并发送表示蓝牙协议栈已建立成功的事件报告:HC LE Connect complete$
The HC Interactive Interface's connection function allows devices to communicate.
该系统版本号为Core 5.0(P774)
该命令将Link Manager链路管理器指定为连接远程设备。
该命令遵循以下格式进行封装:

OCF:通过此处即可获取其数值。即OGF的具体数值是多少?
在《Core5.0》第774页中可以看到,《HCI_Create_Connection》命令归类于《LINK CONTROL COMMANDS》链路控制命令组,并其OGF值定为十六进制的一号位。
参考《Core5.0》第766页内容可获得更多信息。
对于链路控制命令而言,《HCICreateConnection》这一指令在其定义域内具备明确的执行流程。
BD_ADDR :用于连接远程设备的蓝牙地址(共6个字节)。
Packet_Type:可支持的数据包类型为2字节

- Page_Scan_Repetition_Mode :此功能用于判断是否存在重复扫描操作

Clock_Offset :主机与从机之间的时钟偏移量。

该模块是否具备主从角色切换的能力?

5.2 Command Complete Event
当Controller响应Create_Connection命令时,该事件会被Host接收.
遵循以下格式:

该事件作为大多数命令发送后的反馈状态。
Event Code:事件编号
Num_HCI_Command_Packets表示Host能够发送到Controller的命令包数量,则当不允许时数量则为0

Command_Opcode 代表相应的指令编码

Return.Parameters:根据返回命令赋予权限参数

The connection completion event has been successfully terminated.
该事件证实了Host与Controller之间通过某种机制完成了连接通道的建立工作

该字段被称为"eventCodeLabel",主要用于表示与组织相关的具体事务。
系统状态为:已建立

当建立连接时所使用的Identifier

- BD_ADDR :表示连接完成后对应的MAC地址。

Link_Type:链接类型

Encryption_Enabled:是否启用加密功能

这些参数也无需必修,在此次捕获的HCI包实例中,请作参考。

最后一步,请您了解其在协议栈中的位置。


下面这部分内容是对蓝牙协议HCI接口的详细介绍,在深入学习之后,我们将掌握分析HCI数据包的能力。


