【BLE蓝牙学习开发笔记】BLE-HCI-Error-Code
2022/1/28 23:34:23
本文主要是介绍【BLE蓝牙学习开发笔记】BLE-HCI-Error-Code,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1 前言
- 2 什么是BLE?
- 3 BLE与HCI的关系?
- 3.1 BLE的分层设计
- 3.2 HCI层的作用
- 4 BLE HCI Error Code
- 5 更多分享
1 前言
目前博主主要在开发IoT相关的项目,在室内IoT领域用到最多的通讯方式无非就是Wi-Fi和BLE蓝牙。而目前市面上有一些芯片,它既支持Wi-Fi也支持BLE,这种芯片也就是我们常说的Combo芯片,像平头哥的TG7100C,上海博通的BL2028N,都是这一类芯片。
2 什么是BLE?
蓝牙低能耗(Bluetooth Low Energy,或称Bluetooth LE、BLE,旧商标Bluetooth Smart)也称低功耗蓝牙,是蓝牙技术联盟设计和销售的一种个人局域网技术,旨在用于医疗保健、运动健身、信标、安防、家庭娱乐等领域的新兴应用。相较经典蓝牙,低功耗蓝牙旨在保持同等通信范围的同时显著降低功耗和成本。(参见:百度百科)
3 BLE与HCI的关系?
3.1 BLE的分层设计
在 BLE 系统中不仅仅是物理层和硬件内容,根据整个 BLE 从上到下,大致分为了 Profile,Host,HCI,Controller 以及 硬件部分的 Baseband 和 RF。
两个 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蓝牙学习开发笔记】BLE-HCI-Error-Code的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享