1.蓝牙概念
蓝牙,是一种支持设备短距离通信(一般 10m 内)的无线电技术,能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网 Internet 之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。
蓝牙作为一种小范围无线连接技术,能在设备间实现方便快捷、灵活安全、低成本、低功耗的数据通信和语音通信,因此它是目前实现无线个域网通信的主流技术之一。与其他网络相连接可以带来更广泛的应用。是一种尖端的开放式无线通信,能够让各种数码设备无线沟通,是无线网络传输技术的一种,原本用来取代红外。
蓝牙技术是一种无线数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。其实质内容是为固定设备或移动设备之间的通信环境建立通用的无线电空中接口(Radio Air Interface),将通信技术与计算机技术进一步结合起来,使各种 3C 设备在没有电线或电缆相互连接的情况下,能在近距离范围内实现相互通信或操作。简单的说,蓝牙技术是一种利用低功率无线电在各种 3C 设备间彼此传输数据的技术。蓝牙工作在全球通用的 2.4GHz ISM(即工业、科学、医学)频段,使用 IEEE802.11 协议。作为一种新兴的短距离无线通信技术,正有力地推动着低速率无线个人区域网络的发展。
2.市面蓝牙架构介绍
- SOC 蓝牙单芯片方案
一般是半导体厂商半开源协议栈,基于特定的编译器,把蓝牙协议栈直接烧写到蓝牙芯片中(比如 CSR BC4/5,CSR8670,CSR8675,TI CC2540,NRF51xxx,NRF52xxx,乐鑫 ESP32 等等),此类芯片一般可以直接做为 MCU 用,这类产品一般用于消费类电子,集成度很高,调调部参数可以直接使用,常见的有蓝牙耳机,一般蓝牙耳机之前 CSR 的芯片(CSRBC5/8670/8675)占很大的份额,现在 CSR 被高通并掉后,出来 QCC3,QCC5 系列,现在还有洛达,杰里的低成本方案,在有就是 BLE smart 设备,也有特有的方案
- SOC 蓝牙+MCU 方案
就是在 1)的基础上,通过特定的 interface(UART 居多),发送自定义的 command 来达到想要的功能,比如发送 0x01 代表搜索周围设备,当然在产品中肯定不会定义这么简单的 command,一般要加上 command id + command len + command para data + command check sum 来实现功能。此部分的应用一般用于外设功能相对于复杂,需要驱动很多外设,但是单芯片方案的性能达不到的情况下一般用这种方案
- 蓝牙 host + controller 分开方案
这种应用算是蓝牙最复杂的应用,适用于蓝牙使用情景较复杂的情况下使用,比如车载蓝牙等。客户需要有很多蓝牙协议,比如蓝牙电话(HFP),蓝牙音频(A2DP),蓝牙音乐控制(AVRCP),蓝牙电话本(PBAP),蓝牙短信(MAP),BLE,HID,如果你说以上还能用 soc 做,那么再加上 Carplay 的 IAP/IAP2,Android Auto 的 RFCOMM BT 呢,基本以上就需要这种方案了。其中 Transport 是一个协议,H2 就是在 USB 的基础上的协议,H4,H5,BCSP 是 UART 基础上的协议,当然还有 SDIO。
四.总结
其实你会发现每种架构都有每种的好处,并不是每周产品都需要套用某一种架构,需要考虑的方面很多,比如
1)项目需要的成本 2)项目的功能复杂度 3)项目的研发市场 4)项目硬件性能的考虑(rom,ram,codec 等)
我大概列举下几种:
1)手机 -> 手机的蓝牙复杂应用,注定要用第 3 种方案,也就是蓝牙协议栈(host)在主芯片中,蓝牙芯片为 HCI 架构的
2)蓝牙音响,蓝牙耳机 -> 此种应用一般用单芯片方案就能 hold 住,比如 CSR8670/8675/杰理蓝牙等,好处在于开发便捷
3)蓝牙手表 -> 手表要看功能复杂性,如果仅仅有时间显示,传感器交互,蓝牙,那么可以选择单芯片方案(也就是方案 1),如果有网络等比较复杂的功能就要使用 MCU+蓝牙芯片方案(也就是方案 3)了
4)蓝牙手环,蓝牙心率带等 -> 基本上是单芯片方案
3.HCI 蓝牙架构
在介绍架构之前我们先介绍下两个名词:
- BT Controller:此部分指的是蓝牙芯片,包括 BR/EDR 芯片(蓝牙 2.1 芯片),AMP 芯片(蓝牙 3.0 芯片),LE 芯片(蓝牙 4.0 芯片),后续我们把 4.0 以下统称为传统蓝牙,4.0 以上称为低功耗蓝牙,芯片层面会有 2 种模式,包括
- 单模蓝牙芯片:单一传统蓝牙芯片,单一低功耗蓝牙芯片
- 双模蓝牙芯片:同时支持传统蓝牙跟低功耗蓝牙的芯片
- BT Host:蓝牙协议栈
细展开以上的架构如下:
1.HW 层:这里就是蓝牙芯片层,包含以下几个部分
1)RF(RADIO):射频层,本地蓝牙数据通过射频发送给远端设备,并且通过射频接收来自远端蓝牙设备的数据
2)BB(BASEBAND):基带层,进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。
3)LMP(LINK MANAGER PROTOCOL):链路管理层,负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作
4)HCI(HOST CONTROLLER INTERFACE):主机控制器接口层,HCI 层在芯片以及协议栈都有,芯片层面的 HCI 负责把协议栈的数据做处理,转换为芯片内部动作,并且接收到远端的数据,通过 HCI 上报给协议栈。
5)BLE PHY:BLE 的物理层
6)BLE LL:BLE 的链路层
2.TRANSPORT 层:此部分在硬件接口(UART/USB/SDIO)实现 HOST 跟 CONTROLLER 的交互,此部分会分为以下几个协议,在后续章节会对 transport 协议做详细的说明
1)H2:USB 的 transport
2)H4: UART 的 transport
H4 是 UART 传输种最简的一个 Transport,只是在 HCI raw data 的前面加一个 type 就行,如下 HCI 一共有五种 HCI data:
HCI COMMAND:由蓝牙协议栈发送给芯片的命令
HCI EVENT:由蓝牙芯片上报给蓝牙协议栈的事件
HCI ACL:蓝牙协议栈跟蓝牙芯片双向交互的普通数据
HCI SCO:蓝牙芯片跟蓝牙协议栈双向交互的通话/语音识别等音频数据
HCI ISO(这部分是在 core5.2 才添加):LE audio 用的数据包格式
3)H5: UART 的 transport
4)BCSP: UART 的 transport
5)SDIO Transport,我不知道叫什么 transport,但是有走 SDIO 的蓝牙芯片,比如 Marvell8887,可以选择走 SDIO 或者 UART
其中 2,3,4 的主要差别在于 H4 需要 BT CHIP UART_TX/UART_RX/UART_CTS/UART_RTS/VCC/GND 接到 MCU,而 H5,BCSP 只需要 BT CHIP 的 UART_TX/UART_RX/VCC/GND 接到 MCU 就可以通信。
3.HOST 层:此部分就是蓝牙协议栈,