【BLE蓝牙学习开发笔记】BLE-HCI-Error-Code

文章目录


1 前言

目前博主主要在开发IoT相关的项目,在室内IoT领域用到最多的通讯方式无非就是Wi-Fi和BLE蓝牙。而目前市面上有一些芯片,它既支持Wi-Fi也支持BLE,这种芯片也就是我们常说的Combo芯片,像平头哥的TG7100C,上海博通的BL2028N,都是这一类芯片。

2 什么是BLE?

蓝牙低能耗Bluetooth Low Energy,或称Bluetooth LEBLE,旧商标Bluetooth Smart)也称低功耗蓝牙,是蓝牙技术联盟设计和销售的一种个人局域网技术,旨在用于医疗保健、运动健身、信标安防、家庭娱乐等领域的新兴应用。相较经典蓝牙,低功耗蓝牙旨在保持同等通信范围的同时显著降低功耗和成本。(参见:百度百科

【BLE蓝牙学习开发笔记】BLE-HCI-Error-Code

3 BLE与HCI的关系?

3.1 BLE的分层设计

在 BLE 系统中不仅仅是物理层和硬件内容,根据整个 BLE 从上到下,大致分为了 Profile,Host,HCI,Controller 以及 硬件部分的 Baseband 和 RF。

【BLE蓝牙学习开发笔记】BLE-HCI-Error-Code

两个 BLE 通信,从逻辑上来看,是每个层的单独通信,从数据的流向来看,发送是自上而下,数据接收是自下而上。

Profile:主要是根据不同的应用场景,制定了最上层的协议交互。比如,心率的 Profile,电池电量检测的 Profile 等。

Host:为上层提供接口支持,自身维护了一些软件层次的协议和加密流程等等控制,纯软件行为。

HCI 的全称是:Host Interface Controller,是 Host 和 Controller 通信之间的接口。那么问题来了,Host 与 app 之间是直接的 Function call,那为啥 Host 与 Controller 之间要专门的定义两层软件之间的通信协议呢?这就要从 BLE 的产品形态说起了。稍后呈现。

Controller:向上负责向 Host 汇报状态,向下,接收 Host 的指令,与 Baseband 交互,协调、控制、管理硬件资源。

Modem:负责调制解调

RF:收发机负责接收/发送空中的数据包。

3.2 HCI层的作用

HCI 的全称是:Host Interface Controller,是 Host 和 Controller 通信之间的接口。

更为详细的介绍,可以参考:https://cxymm.net/article/zhoutaopower/96477626

4 BLE HCI Error Code

实战开发中,经常遇到BLE协议栈抛上来的ErrorCode,如果你不了解其中的含义,那么你将不能更进一步地去分析和解决问题。

这些ErrorCode其实是BLE协议中已经定义好的,具体如下所示:

#define 	BLE_HCI_STATUS_CODE_SUCCESS   0x00
#define 	BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND   0x01
#define 	BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER   0x02
#define 	BLE_HCI_AUTHENTICATION_FAILURE   0x05
#define 	BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING   0x06
#define 	BLE_HCI_MEMORY_CAPACITY_EXCEEDED   0x07
#define 	BLE_HCI_CONNECTION_TIMEOUT   0x08
#define 	BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED   0x0C
#define 	BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS   0x12
#define 	BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION   0x13
#define 	BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES   0x14
#define 	BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF   0x15
#define 	BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION   0x16
#define 	BLE_HCI_UNSUPPORTED_REMOTE_FEATURE   0x1A
#define 	BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS   0x1E
#define 	BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR   0x1F
#define 	BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT   0x22
#define 	BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION   0x23
#define 	BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED   0x24
#define 	BLE_HCI_INSTANT_PASSED   0x28
#define 	BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED   0x29
#define 	BLE_HCI_DIFFERENT_TRANSACTION_COLLISION   0x2A
#define 	BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE   0x30
#define 	BLE_HCI_CONTROLLER_BUSY   0x3A
#define 	BLE_HCI_CONN_INTERVAL_UNACCEPTABLE   0x3B
#define 	BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT   0x3C
#define 	BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE   0x3D
#define 	BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED   0x3E

5 更多分享

欢迎关注我的github仓库01workstation,日常分享一些开发笔记和项目实战,欢迎指正问题。

同时也非常欢迎关注我的CSDN主页和专栏:

【CSDN主页:架构师李肯】

【RT-Thread主页:架构师李肯】

【C/C++语言编程专栏】

【GCC专栏】

【信息安全专栏】

【RT-Thread开发笔记】

【freeRTOS开发笔记】

【BLE蓝牙学习开发笔记】

有问题的话,可以跟我讨论,知无不答,谢谢大家。

上一篇:从控制和逻辑的角度看代码复杂度


下一篇:蓝牙BLE芯片方案|伦茨科技智能户外狩猎LED灯方案