Android Bluetooth之概念基础

文章目录

一、preface

1、资料快车

1、Android 4.2蓝牙介绍(邓凡平) :https://blog.csdn.net/Innost/article/details/9187199

2、Bluedroid蓝牙代码介绍(Wireless Link-韦东山专题-系统完整): https://blog.csdn.net/xiaoxiaopengbo/category_12834409.html

3、Android 蓝牙源码刨析(轻骑兵) :https://blog.csdn.net/weixin_37800531/category_12836122_2.html

4、高通&MTK蓝牙专栏: https://blog.csdn.net/weixin_47456647/category_11603865.html

5、书籍:

1)低功耗蓝牙开发权威指南

2)低功耗蓝牙智能硬件开发实战

3)蓝牙技术基础

6、Specification

蓝牙官方当前可获取的sepc文档:https://www.bluetooth.com/specifications/archived-specifications/

蓝牙core specifications:https://www.bluetooth.com/specifications/bluetooth-core-specification/

7、课程- 蓝牙HOST-于忠军

2、概述

1)Android协议栈的内容很多(有AI的情况下可以不深入,掌握基本流程),先掌握框架(基础) 再根据实际需求深入某一个章节;

2)掌握基本场景

1)打开、扫描、连接、回连流程;

2)STR开关机流程;

2、术语名词

1)Bluetooth profile - 各种协议(蓝牙设备间的交互方式和数据格式)的简称

​ 1、A2DP(Advanced Audio Distribution Profile);

​ 2、AVRCP(Audio/Video Remote Control Profile);

​ 3、HID(Human interface Device Profile)- 用于蓝牙键盘、鼠标输入设备

​ 4、GATT(Generic Attribute Profile)- BLE profile用于低功耗蓝牙设备的数据交互

​ 5、HFP(Hands-Free Profile)- 车载蓝牙和免提设备;

​ 6、HSP(Headset Profile)- 蓝牙耳机的基本功能;

​ 7、SPP (Serial Port Profile) - 模拟串行端口连接

3)

HCI : Host Controller Interface

4、蓝牙基础

1、蓝牙协议栈

谁来制定?SIG : Special interest group - 负责制定蓝牙协议,仿照网络协议制定蓝牙的各种协议

为何需要蓝牙协议栈?无线通信 无法像有线那样可以明确发送方和接收方,必须依赖协议栈来工作,复杂度大大提高;

2、经典蓝牙和BLE

1)蓝牙技术可以细分为经典蓝牙和BLE蓝牙两大类,两种技术的协议栈和芯片设计都是不同的,对于协议栈 整体架构不变 每一个层级的内容会有所不同,这也导致蓝牙架构会相对混乱;

2)经典蓝牙发展较久,由于历史原因 随着功能不断增加和完善,使得架构也变得臃肿不清晰;

3)BLE则吸收经典蓝牙的设计经验,架构设计得比较清晰,同时相对经典蓝牙,BLE比较简单!

3、蓝牙单模、经典蓝牙、双模

"模" 指代的是工作模式

1)蓝牙单模,只支持经典蓝牙 或 低功耗蓝牙 (BLE);

2)蓝牙双模,同时支持经典蓝牙和BLE

3)蓝牙图标识别

https://blog.csdn.net/Hh20161314/article/details/104497644

4、蓝牙控制器/工作模式

1、BR/EDR : 经典蓝牙的工作模式,Basic Rate(1Mbps) / Enhanced Data Rate(3Mbps,同时降低功耗),也通常代表经典蓝牙,因为这样不仅可以区分经典蓝牙/BLE 还可以区分经典蓝牙的具体工作模式,一举两得!

2、LE :蓝牙的低功耗、低速率工作模式 - Bluetooth Low Energy 即表示BLE

3、BR/EDR Controller 、AMP Controller、LE Controller

5、蓝牙设备

蓝牙相较于WIFI,WIFI场景比较单一(两种STA、P2P,通信设备一般是网关和手机,相对固定),而蓝牙的设备则多种多样(不同设备的兼容性也不同,需要进行匹配工作),场景也较多,因此造成蓝牙问题比较杂乱!

1)蓝牙dongle

相当于外挂模块,单蓝牙设备,注意要与板载的模组互斥

6、蓝牙版本

1)不同蓝牙版本的综合指南

https://www.mokosmart.com/zh-CN/guide-on-different-bluetooth-versions/

2)概述

复制代码
1、Bluetooth 2.1+EDR/3.0/4.x/5.0 拆解如下

2.1+EDR : 经典蓝牙
3.0 :支持AMP
4.x :BLE
5.0 : BLE

2、版本号划分:
经典蓝牙版本:蓝牙 1.0 -- 3.0
低功耗蓝牙版本:蓝牙 4.0 -- 6.0

3)蓝牙版本演进总览

7、蓝牙UUID

复制代码
Universally Unique Identifier,通用唯一标识符

- UUID 是一个 **128 位**(16 字节)的数字,用于**唯一标识**一个实体。在蓝牙中,UUID 用来标识**服务(Service)**、**特征(Characteristic)**、**描述符(Descriptor)** 等。
- 为了节省空间,蓝牙规范定义了一些**标准 UUID**,它们可以简写为 16 位或 32 位。例如:
  - `0x1800` → 通用访问服务(Generic Access Service)
  - `0x180A` → 设备信息服务(Device Information Service)

设备通过广播或 SDP(Service Discovery Protocol)提供自己支持的服务的 UUID

8、蓝牙PIN

复制代码
PIN是什么?
PIN是一串数字(通常为 4--16 位),用于传统配对(Legacy Pairing) 过程中验证设备身份。常见于蓝牙 2.0/2.1 时代的耳机、键盘等设备(例如 0000 或 1234)。

作用
设备认证:用户在配对时输入 PIN 码,两端设备用其生成链路密钥(Link Key),从而建立加密连接。

防止中间人攻击:虽然传统 PIN 机制较为简单,但仍是当时的主要安全手段。

在现代蓝牙中:蓝牙 2.1 以后引入了安全简单配对(SSP),通常不再需要用户输入 PIN,而是通过"数值比较"或"Just Works"方式。但在一些老设备或特定场景中,PIN 仍被使用。

注意:在 BLE 配对中,也有类似 PIN 的"密码"(Passkey),用于 6 位数字的输入或确认。