当前位置:网站首页>【Bluetooth蓝牙开发】八、BLE协议之传输层
【Bluetooth蓝牙开发】八、BLE协议之传输层
2022-07-28 19:41:00 【卐一十二画卐】


8.1 前言

Link Layer传输层再往上,就是传输层了。传输层,位于Host和Controller层之间,提供一种无需知道详细数据内容便可传输数据的能力。其主要通过硬件传输介质(如:UART、USB、SDIO等),传输Bluetooth HCI的数据。
下面是UART传输层的框图:

看完上面的图,我们大概就对传输层有了大概的了解了,下面详细分析一下。
HCI详细介绍,可查
Core5.0 P670

8.2 HCI(Host Controller Interface)介绍

上图,展示了两个设备之间的数据传输路径。Host通过HCI Driver驱动程序与Controller硬件上的HCI Firmware交换数据和命令,传输层就是提供了这样的能力。
传输层主要的作用:
- 蓝牙协议栈向芯片发送连接的
command - 蓝牙芯片上报给蓝牙协议栈
command status with create connection opcode - 蓝牙芯片上报蓝牙协议栈
connect complete
HCI提供了一种统一接口用来访问,控制Controller,传输层是透明的,独立于底层传输技术,并且无需关系Host传输给Controller的数据是什么内容.
在HOST与Controller之间,以Command与Event命令方式进行传输。Host发送Command信息到Controller,Controller将Command Status和Params以Event的形式返回给Host,最后返回Command Complete Event表示连接完成。
更加直观一点,如下:

HCI有四种类型的包格式,分别是:

- HCI Command Packet:由蓝牙协议栈发送给芯片的命令,即
Host->Controller - HCI Event Packet:由蓝牙芯片上报给蓝牙协议栈的事件,即
Controller->Host - HCI ACL Data Packet:蓝牙协议栈跟蓝牙芯片双向交互的普通数据。
- HCI Synchronous Data Packet:蓝牙协议栈跟蓝牙芯片双向交互的普通数据。
详细见
Core5.0.pdf P670
在Host和Controller之间,HCI的命令和事件类型如下:
详细见
Core5.0.pdf P647

交互的数据格式为:

8.3 HCI 数据包格式
HCI提供了统一的命令格式来访问Controller,不同的命令也需要花费不同的时间。传输层以命令Command和事件Event的方式进行通信,下面我们主要看一下通信的数据包的格式。
8.3.1 Handles
Handle:逻辑链路的通道的标识,这里分为三类:Connection_Handles, Logical Link Handles, 和Physical Link Handles
8.3.1.1 Primary Controller Handles
Connection_Handles:被Primary Controller Handles分配,标识主机和主控制器之间的逻辑通道,当一个新的逻辑链路被建立的时候,Connection_Handles会被分配。
该Handle主要被用在:Connection Complete, Synchronous Connection Complete, LE Connection Complete, or LEEnhanced Connection Complete的Event事件中。
8.3.1.1.1 Broadcast Connection_Handles
Host在第一次上电或者重启的时候,第一次发送HCI数据包,此时分配一个Connection_Handle。此后,使用该Handle去广播。
8.3.1.2 AMP Controller Handles
AMP Controllers包括两种:Logical Link Handles, 和Physical Link Handles。
对于Host与AMP Controller之间的 Data,Command和Event操作,如果Physical Link Handles被指定,则使用该Handle,如果未被指定,则在指定Connection_Handle的地方使用Logical Link Handles
在这里不对AMP作详细说明。
8.3.2 HCI Command Packet
HCI Command Packet用于Host发送命令给Controller控制器。
包格式如下:

- OpCode字段
OpCode:占里两个字节,用于命令标识,分为两个域:OCF:OpCode Group Field和OGF OpCode Command Field。
OGF:占据高6bitOCF:占据低10bit,其中0X3F为制造商的调试命令.

- Paramter_Total_Length字段
Paramter_Total_Length:包中所有参数的长度。

- Paramter字段

8.3.3 HCI Event Packet
每个Command命令发出之后,都会带一个Event返回命令执行后的状态。
包格式如下:

- Event_Code字段
Event_Code:标识不同的事件类型。

- Parameter_Total_Length字段
Parameter_Total_Length:参数总长度

- Event_Parameter字段
Event_ParameteN:相关参数

8.3.4 HCI ACL Data Packets
HCI ACL Data Packets规定了数据包的格式,用于Host与Controller之间的数据交换。
数据包有两种类型:
- Automatically-Flushable:自动刷新
自动刷新包,其自动刷新的时间取决于设定的时间。
- Non-Automatically-Flushable:非自动刷新
非自动刷新,则不会自动刷新数据包。
包格式如下:

- Handle字段
Handle:正如上面所述,该字段有几种类型:
Connection_Handle:用于在主控制器上发送数据包或者段Logical_Link_Handle:用于AMP控制器发送数据包Physical Link Handles:用于AMP控制器发送数据包Flag 字段
Flag包括:PB Flag 和BC Flag,即Packet_Boundary_Flag与Broadcast_Flag,取值如下:


8.3.5 HCI Synchronous Data Packets
该数据包,被用于在Host和Controller之间交换同步数据。
包格式如下:

- Packet_Status_Flag字段
该字段与Erroneous_Data_Reporting参数有关:
- 如果
Erroneous_Data_Reporting参数设置为disable,则Packet_Status_Flag字段设置为00 - 如果
Erroneous_Data_Reporting参数设置为enable,则Packet_Status_Flag字段依据下面表格设置

- Data_Total_Length字段

8.4 HCI连接包示例
HCI连接命令流程:
1)蓝牙协议栈向芯片发送连接命令:HCI Connect command
2)蓝牙芯片上报命令状态到蓝牙协议栈:HCI Command Complete
3)连接成功后,蓝牙芯片上报蓝牙协议栈连接成功事件:HCI LE Connect complete
8.4.1 HCI Connect command
Core5.0 P774
该命令用于让Link Manager链路管理器去连接远程设备。
连接command封包格式如下:

OCF:这里可以看到OCF的值,那么OGF值为多少呢?
打开
Core5.0 P774,我们可以看到HCI_Create_Connection命令属于LINK CONTROL COMMANDS链路控制命令组,该组OGF为0x01。详见Core5.0 P766For the Link Control commands, the OGF is defined as 0x01.
BD_ADDR:要连接的remote设备的蓝牙地址,6个字节。
Packet_Type:支持的数据封包类型,2个字节。

Page_Scan_Repetition_Mode:是否重复扫描

Clock_Offset:主从设备之间的时钟偏移。

Allow_Role_Switch:是否支持主从角色转换

8.4.2 Command Complete Event
当Controller接收到Create_Connection命令,会发送一个Command Complete 事件给Host。
事件格式如下:

该事件被用于大多数命令发送后的状态返回。
Event Code:事件代码
Num_HCI_Command_Packets:设置Host可以发送给Controller的命令包的个数,如果不允许,则设置为0

Command_Opcode:表示相应的命令代码

Return_Parameters:返回命令指定的参数

8.4.3 Connection Complete Event
该事件表明了Host与Controller之间建立连接通道成功。

Event Code:事件代码
Status:连接状态

Connection_Handle:连接成功后,生成的Handle值

BD_ADDR:连接成功后的MAC地址

Link_Type:连接类型

Encryption_Enabled:是否加密

这些参数也不是一定需要的,下面是抓到的HCI包,希望有所帮助。


好啦,上面就是蓝牙协议HCI接口的详细介绍,详细了解之后,我们就具备了分析HCI数据包的基础能力了!

边栏推荐
- Ctfshow network lost track record (2)
- Top level "redis notes", cache avalanche + breakdown + penetration + cluster + distributed lock, Nb
- Study - 几何计算总结
- 4.1 various calling methods of member
- [tidb] importing TXT documents into the database is really efficient
- Deit: attention can also be distilled
- Moco V2: further upgrade of Moco series
- 多线程顺序运行的 4 种方法,面试随便问
- 程序员最大的浪漫~
- 关键路径的分析
猜你喜欢

Eureka相互注册,只显示对方或只在一个中显示问题

How NPM switches Taobao source images

【input 身份证号】星号 代替,input 切割成 多个 小格格(类似)
![[input ID number] is replaced by an asterisk, and input is cut into multiple small squares (similar)](/img/f0/7e3ea94e02a42b6055c40b58d1e39c.png)
[input ID number] is replaced by an asterisk, and input is cut into multiple small squares (similar)

Bus, protocol, specification, interface, data acquisition and control system in industrial communication field

Ctfshow network lost track record (2)

Buuctf questions upload labs record pass-01~pass-10

Another installation artifact

quii cordova-plugin-telerik-imagepicker插件多图上传乱序

SSM-使用@Async和创建ThreadPoolTaskExecutor线程池
随机推荐
DLL decompile (decompile encrypted DLL)
4.1 Member的各种调用方式
九鑫智能正式加入openGauss社区
Redis cache avalanche, cache penetration, cache breakdown
Jiuxin intelligence officially joined opengauss community
How to modify the ID of NetApp expansion enclosure disk shelf
如何度量软件架构
ctfshow 做题 web模块 web11~web14
Buuctf questions upload labs record pass-01~pass-10
Study and use of cobalt strike
Another installation artifact
Bus, protocol, specification, interface, data acquisition and control system in industrial communication field
Study - Summary of geometric calculations
Guanghetong & Qualcomm Internet of things technology open day successfully held
Ctfshow question making web module web11~web14
What functions does MySQL have? Don't look everywhere. Just look at this.
After Europe, it entered Japan and South Korea again, and the globalization of Pico consumer VR accelerated
Mobilevit: challenge the end-to-side overlord of mobilenet
The greatest romance of programmers~
Timing analysis and constraints based on Xilinx