当前位置: 首页 > article >正文

38_一文讲清楚蓝牙协议栈和BLE协议

一、蓝牙协议栈概述1. 蓝牙协议栈的分类(1) 经典蓝牙协议栈BR/EDRa. 核心协议层i. 无线电层Radio⓵ 工作在2.42.42.4GHz 的 ISM 频段⓶ 采用跳频扩谱FHSS技术每秒跳频160016001600次⓷ 发射功率分为三个等级Class 1202020dBm、Class 2444dBm、Class 3000dBmi. 基带层Baseband⓵ 负责数据包的重传ARQ和前向纠错FEC⓶ 定义物理信道如 Piconet 中的主从设备时分复用⓷ 处理 ACL 链路和 SCO/eSCO 链路i. 链路管理器LMP⓵ 负责设备之间的配对、加密和认证⓶ 控制设备的低功耗模式Hold、Sniff、Parki. 主控制器接口HCI⓵ 为上层协议L2CAP和下层控制器基带提供标准通信接口i. 逻辑链路控制和适配协议L2CAP⓵ 负责协议复用、分段与重组SAR⓶ 默认 MTU 为672672672字节可协商至655356553565535字节a. 串口仿真协议RFCOMMi. 基于 L2CAP 层模拟 RS-232 串口ii. 最多支持606060个并发连接通道111到606060a. 服务发现协议SDPi. 用于查询设备提供的服务如耳机服务、文件传输服务ii. 每个服务由 UUID 唯一标识161616位 /323232位 /128128128位a. 电话控制协议TCSi. 定义蓝牙设备之间的呼叫控制信令已较少使用(2) 低功耗蓝牙协议栈BLEa. 控制器层i. 物理层PHY⓵ 支持111Mbps、222Mbps、500500500Kbps、125125125Kbps 四种速率⓶ 采用 GFSK 调制跳频间隔为222MHzi. 链路层Link Layer⓵ 定义五种状态就绪、广播、扫描、发起、连接⓶ 控制广播信道373737、383838、393939和数据信道000到363636i. 主机层i. 逻辑链路控制和适配协议L2CAP⓵ BLE 中基于 LE Credit Based Flow Control Mode⓶ 支持面向连接的通道CoCi. 属性协议ATT⓵ 定义客户端与服务器之间的数据交换格式⓶ 数据以“属性”形式组织包含句柄、类型、权限和值i. 通用属性协议GATT⓵ 基于 ATT 定义服务、特征和描述符的层次结构⓶ 典型流程Discover → Read → Write → Notify / Indicatei. 安全管理协议SMP⓵ 负责配对、认证和加密密钥分发⓶ 支持 Just Works、Passkey Entry、Numeric Comparison、OOB 四种配对方式i. 通用访问配置文件GAP⓵ 定义设备的四种角色广播者、观察者、外设、中心⓶ 控制广播间隔、连接间隔、延迟和超时等参数2. 经典蓝牙与 BLE 的对比(1) 技术参数对比表a. 传输速率经典蓝牙最高2.12.12.1MbpsEDRBLE 最高222MbpsPHYb. 传输距离经典蓝牙通常101010米Class 2BLE 可达100100100米Long Range 模式c. 功耗经典蓝牙约111W持续连接BLE 约0.010.010.01W 到0.50.50.5W间歇工作d. 应用场景经典蓝牙用于音频流耳机、音箱BLE 用于传感器心率、温度(2) 协议栈差异a. 经典蓝牙独有RFCOMM、SDP、TCSb. BLE 独有ATT、GATT、SMP经典蓝牙中为 LMP 子集c. 共用部分L2CAP但 BLE 中简化了流量控制3. 双模蓝牙Bluetooth Dual Mode(1) 硬件架构a. 共享同一2.42.42.4GHz 天线和射频前端b. 基带控制器时分处理经典蓝牙和 BLE 的数据包(2) 软件架构a. 主机协议栈同时运行 BR/EDR 和 BLE 的 L2CAP 层及以上b. 通过 HCI 命令Set_Event_Mask和LE_Set_Event_Mask区分事件类型(3) 典型应用a. 智能手机同时连接经典蓝牙耳机和 BLE 手环b. 车载系统蓝牙通话经典蓝牙 胎压监测BLE4. 协议栈实现举例代码级架构(1) 主机层Host与控制器层Controller分离a. 接口HCIUART、USB、SDIOb. 固件示例Zephyr 协议栈/* * Zephyr 蓝牙协议栈初始化流程Allman 风格 */#includezephyr/bluetooth/bluetooth.h#includezephyr/bluetooth/gatt.hstaticconststructbt_dataad[]{BT_DATA_BYTES(BT_DATA_FLAGS,BT_LE_AD_GENERAL|BT_LE_AD_NO_BREDR),BT_DATA(BT_DATA_NAME_COMPLETE,DEVICE_NAME,DEVICE_NAME_LEN)};voidmain(void){interr;errbt_enable(NULL);if(err){printk(蓝牙初始化失败 (错误码 %d)\n,err);return;}errbt_le_adv_start(ad,ARRAY_SIZE(ad),NULL,0);if(err){printk(广播启动失败 (错误码 %d)\n,err);return;}printk(BLE 广播已启动设备名: %s\n,DEVICE_NAME);}(2) L2CAP 层通道创建伪代码function L2CAP_Connect(Psm, SourceCid, DestinationCid){Create a new channel contextSet Psm 0x1001(Service Discovery)Send “L2CAP_Connection_Request” via ACL linkWait for “L2CAP_Connection_Response”if Response.Result Success then{Return ChannelId}else{Return Error}} \begin{aligned} \text{function L2CAP\_Connect(Psm, SourceCid, DestinationCid)} \\ \{ \\ \quad \text{Create a new channel context} \\ \quad \text{Set Psm } 0x1001 \quad \text{(Service Discovery)} \\ \quad \text{Send \text{L2CAP\_Connection\_Request} via ACL link} \\ \quad \text{Wait for \text{L2CAP\_Connection\_Response}} \\ \quad \text{if Response.Result Success then} \\ \quad \{ \\ \quad \quad \text{Return ChannelId} \\ \quad \} \\ \quad \text{else} \\ \quad \{ \\ \quad \quad \text{Return Error} \\ \quad \} \\ \} \end{aligned}​function L2CAP_Connect(Psm, SourceCid, DestinationCid){Create a new channel contextSet Psm 0x1001(Service Discovery)Send“L2CAP_Connection_Request”via ACL linkWait for“L2CAP_Connection_Response”if Response.Result Success then{Return ChannelId}else{Return Error}}​(3) GATT 服务结构C 语言风格/* * BLE 自定义服务示例带心率特征 */typedefstruct{uint16_thandle;uint16_tvalue_handle;uint8_tproperties;uint16_tuuid;}gatt_char_t;staticconstgatt_char_theart_rate_char{.handle0x000A,.value_handle0x000B,.propertiesBT_GATT_CHRC_NOTIFY,.uuid0x2A37// Heart Rate Measurement UUID};staticuint8_theart_rate_data[2]{0x00,72};// Flags 0, Value 72 bpm5. 广播与扫描机制(1) BLE 广播信道a. 三个固定信道373737240224022402MHz、383838242624262426MHz、393939248024802480MHzb. 广播间隔202020ms 到10.2410.2410.24s典型值100100100msc. 广播数据包最大313131字节扫描响应包同样为313131字节(2) 扫描参数a. 扫描窗口Scan Window101010ms 到10.2410.2410.24sb. 扫描间隔Scan Interval窗口值 到10.2410.2410.24sc. 主动扫描 vs 被动扫描主动扫描会发送 SCAN_REQ 获取扫描响应数据(3) 广播数据格式AD 结构/* * 广播数据包结构 * [Length][Type][Data...] */staticuint8_tadv_data[]{0x02,0x01,0x06,// Flags: LE General Discoverable, BR/EDR Not Supported0x03,0x03,0xAA,0xFE,// Complete List of 16-bit UUIDs: 0xFEAA0x09,0x09,B,l,e,D,e,v,i,c,e// Complete Local Name};6. 连接建立与参数更新(1) 连接请求流程a. 中心设备收到广播包后发送 CONNECT_REQb. 包含接入地址AA、CRC 初始值、窗口偏移、连接间隔等参数c. 外设设备在1.51.51.5个广播间隔内切换到数据信道(2) 连接参数范围BLE 4.2 规范a. 连接间隔ConnInterval7.57.57.5ms 到444s步长1.251.251.25msb. 从机延迟SlaveLatency000到499499499连接事件跳过的最大次数c. 超时时间ConnTimeout100100100ms 到323232s步长101010ms(3) 连接参数更新请求LL_CONNECTION_UPDATE_REQ{WinOffset, Interval, Latency, Timeout, Instant} \begin{aligned} \text{LL\_CONNECTION\_UPDATE\_REQ} \\ \{\text{WinOffset, Interval, Latency, Timeout, Instant}\} \end{aligned}​LL_CONNECTION_UPDATE_REQ{WinOffset, Interval, Latency, Timeout, Instant}​7. 安全机制(1) 配对阶段BLE 5.0 中的 LE Secure Connectionsa. Phase I配对特性交换IO 能力、认证要求、密钥大小b. Phase II使用 ECDH 进行密钥生成公钥交换c. Phase III密钥分发LTK、IRK、CSRK(2) 加密流程a. 生成 LTK长期密钥长度128128128位b. 使用 AES-CCM 加密数据通道CCM 是 Counter with CBC-MAC(3) 配对方法选择a. Just Works无认证易受中间人攻击b. Passkey Entry一方输入666位数字c. Numeric Comparison双方屏幕显示666位数字确认相等d. OOBOut of Band通过 NFC 等外部信道交换密钥8. 实际应用中的数据流(1) 传感器数据上行BLEa. 应用层heart_rate 72b. GATT 层封装为 ATT 通知opcode 0x1Bc. L2CAP 层添加444字节通道头CID 0x0004d. 链路层封装为数据信道 PDUHeader Payload MICe. 物理层GFSK 调制后发射(2) 音频数据流经典蓝牙 A2DPa. 编码SBC / AAC / aptX压缩为328328328kbps 左右b. 传输层AVDTP 封装添加121212字节 RTP 头c. L2CAP 层基于基础模式无流控MTU 通常为100510051005字节d. 基带层使用 HV3 或 EV3 数据包类型每3.753.753.75ms 发送一个时隙9. 常见问题与调试手段(1) 连接不稳定a. 检查2.42.42.4GHz 干扰源Wi-Fi 信道111、666、111111与蓝牙跳频重叠b. 增大连接间隔减少碰撞概率但会增加延迟(2) 功耗过高a. 广播间隔设置过短低于100100100msb. 未使用从机延迟SlaveLatency导致频繁唤醒(3) 抓包工具a. Nordic Sniffer配合 Wiresharkb. Ellisys Bluetooth Analyzer硬件级c. Ubertooth One开源方案支持嗅探[TOC]蓝牙协议

相关文章:

38_一文讲清楚蓝牙协议栈和BLE协议

一、蓝牙协议栈概述1. 蓝牙协议栈的分类(1) 经典蓝牙协议栈(BR/EDR)a. 核心协议层i. 无线电层(Radio)⓵ 工作在 2.42.42.4 GHz 的 ISM 频段⓶ 采用跳频扩谱(FHSS)技术,每秒跳频 160016001600 次…...

RK3588 Ethernet网络配置与调试实战指南

1. RK3588以太网配置基础入门 第一次拿到RK3588开发板时,很多开发者都会迫不及待地想测试网络功能。作为一款高性能处理器,RK3588通常配备双千兆以太网接口(GMAC0和GMAC1),但在实际使用前需要正确配置才能正常工作。我…...

保姆级教程:在ZYNQ Ultrascale+ MPSOC上配置PS端DP显示(Vitis 2023.1实测)

保姆级教程:ZYNQ Ultrascale MPSOC PS端DP显示全流程实战(Vitis 2023.1版) 当第一次拿到搭载ZYNQ Ultrascale MPSOC的开发板时,验证PS端DisplayPort输出功能往往是硬件加速视觉项目的重要起点。本文将以ALINX AXU2CGA开发板为例&…...

WebGPU实战指南:从零构建浏览器端高性能图形应用

1. WebGPU入门:为什么它是浏览器图形技术的未来 第一次接触WebGPU时,我被它的性能数据震惊了。在同样的硬件环境下,WebGPU渲染三角形的速度是WebGL的8-10倍。这就像从乡村小路突然切换到高速公路的感觉。你可能已经习惯了用Canvas或WebGL在浏…...

S2-Pro卷积神经网络原理可视化教学工具开发

S2-Pro卷积神经网络原理可视化教学工具开发 1. 效果亮点开场 想象一下,当你第一次学习卷积神经网络(CNN)时,如果能直观看到每一层卷积核如何工作、特征图如何变化、网络如何逐步学习,那该多好。这正是我们开发的S2-Pro教学工具要解决的问题…...

如何用Listen1实现跨平台音乐播放?告别多平台切换的终极解决方案

如何用Listen1实现跨平台音乐播放?告别多平台切换的终极解决方案 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_extensi…...

保姆级教程:在CentOS 7/8上配置auditd审计规则,监控关键文件访问与用户行为

保姆级教程:在CentOS 7/8上配置auditd审计规则,监控关键文件访问与用户行为 当你管理一台暴露在公网的服务器时,是否经常担心敏感文件被非法访问?或者怀疑某些用户进行了越权操作?Linux内核自带的auditd审计系统就是为…...

源码阅读的艺术:开源项目入门者的渐进式指南

文章目录 每日一句正能量前言一、为什么读源码是开源入门的必修课二、准备工作:建立项目的"认知地图"2.1 三层结构分析法2.2 依赖关系可视化 三、第一层阅读:从"使用"到"入口"3.1 追踪一个完整请求3.2 绘制"调用链&q…...

MySQL实战:主键与外键的5个常见设计误区及优化方案

MySQL实战:主键与外键的5个常见设计误区及优化方案 在数据库设计领域,主键和外键的合理运用直接影响着系统的稳定性和查询效率。许多开发者在项目初期往往忽视这些基础元素的设计规范,直到面临性能瓶颈或数据混乱时才追悔莫及。本文将揭示那…...

【MicroPython】基于ESP32的REPL交互式在线仿真开发环境实战

1. 为什么你需要ESP32的MicroPython REPL环境 第一次接触MicroPython的开发者经常会问:为什么不用传统的C语言开发ESP32?这里有个很现实的痛点——当你需要快速验证一个硬件功能时,C语言那套编译、烧录、调试的流程实在太重了。我去年给团队…...

智能调控水冷系统:FanControl散热效率与静音方案全解析

智能调控水冷系统:FanControl散热效率与静音方案全解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

TlbbGmTool:重构游戏管理体验的5大架构创新解析

TlbbGmTool:重构游戏管理体验的5大架构创新解析 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 从命令行困境到可视化治理的游戏运维实践指南 一、价值定位:重新定义游戏管理…...

seo网络排名优化如何选择关键词

SEO网络排名优化如何选择关键词 在当今数字化时代,搜索引擎优化(SEO)已经成为了每个网站和网络企业不可忽视的一部分。其中,关键词选择是影响网站排名的核心环节。如何选择最合适的关键词,以优化SEO网络排名呢&#x…...

保姆级教程:用Node.js搭建WebSocket中继,让ESP32-CAM视频在另一块ESP32屏幕上实时播放

从零构建ESP32-CAM视频中继系统:WebSocket与Node.js的深度实践 想象一下这样的场景:工厂里的巡检机器人通过摄像头捕捉设备状态,实时传输到工程师的监控屏幕;或是智能家居中的安防摄像头,将画面无缝推送到多个终端。这…...

5分钟部署MGeo:中文地址相似度识别零基础教程

5分钟部署MGeo:中文地址相似度识别零基础教程 你是不是遇到过这样的问题?手里有两份地址数据,一份来自电商订单,一份来自物流系统,明明应该是同一个地方,但写法五花八门——“北京市朝阳区望京街1号”、“…...

超越Smooth L1!揭秘Wing Loss在人脸对齐中的梯度优化艺术(附PyTorch代码剖析)

1. 为什么我们需要超越Smooth L1? 在计算机视觉领域,人脸关键点检测一直是个既基础又具有挑战性的任务。记得我第一次尝试用深度学习解决这个问题时,就像大多数初学者一样,毫不犹豫地选择了L2损失函数。结果发现模型在测试集上的表…...

构建高效云点播系统(一):开源组件选型、安全防护与性能优化

1. 开源组件选型:从零搭建云点播系统的基石 第一次接触云点播系统时,我被各种开源组件的选择搞得晕头转向。经过几个项目的实战,我发现选对开源组件就像搭积木,基础打好了,后面的事情就水到渠成。这里分享几个我踩过坑…...

ABAP事务控制深度指南:如何避免COMMIT WORK导致的BW数据丢失问题

ABAP事务控制深度指南:如何避免COMMIT WORK导致的BW数据丢失问题 在SAP BW项目实施过程中,数据完整性是每个ABAP开发者的核心关切。我曾亲眼目睹一个关键财务月结报表因为异步提交导致数据缺失,最终引发连锁反应——财务团队不得不通宵重新跑…...

OpenClaw语音控制:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF实现声控自动化

OpenClaw语音控制:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF实现声控自动化 1. 为什么需要语音控制自动化 去年冬天的一个深夜,我在赶项目文档时突然冒出一个想法:如果能像科幻电影里那样,用语音指挥电脑完成重复性工作…...

HS2-HF Patch:Honey Select 2游戏体验全面优化解决方案

HS2-HF Patch:Honey Select 2游戏体验全面优化解决方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF Patch是针对Honey Select 2游戏开发的…...

Windows 11 LTSC微软商店完整解决方案:从问题诊断到系统优化

Windows 11 LTSC微软商店完整解决方案:从问题诊断到系统优化 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 在企业办公环境中&#xff0c…...

星图平台快速部署Qwen3-VL:30B:Ubuntu20.04环境配置全攻略

星图平台快速部署Qwen3-VL:30B:Ubuntu20.04环境配置全攻略 想在Ubuntu系统上快速部署强大的多模态AI模型?本文手把手教你从零开始配置星图GPU平台环境,30分钟搞定Qwen3-VL:30B部署! 1. 开篇:为什么选择这个部署方案 最…...

Windows系统Btrfs文件系统革新性应用指南

Windows系统Btrfs文件系统革新性应用指南 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs 革新性数据管理体验:WinBtrfs驱动价值定位 打破系统边界:Windows平台…...

Hunyuan-MT-7B开源镜像实操:Pixel Language Portal在Jetson Orin边缘设备上的轻量部署

Hunyuan-MT-7B开源镜像实操:Pixel Language Portal在Jetson Orin边缘设备上的轻量部署 1. 项目概览 Pixel Language Portal(像素语言跨维传送门)是一款基于Tencent Hunyuan-MT-7B核心引擎构建的创新翻译工具。与传统翻译软件不同&#xff0…...

MiniCPM-V-2_6AR应用赋能:手机摄像头取景框实时图文叠加说明

MiniCPM-V-2_6AR应用赋能:手机摄像头取景框实时图文叠加说明 1. 引言:当手机摄像头"学会思考" 想象一下这样的场景:你正在旅游景点,打开手机摄像头对准一座古建筑,屏幕上不仅显示实时画面,还自…...

bilibili-comment-checker:让B站评论管理效率提升300%的智能分析工具

bilibili-comment-checker:让B站评论管理效率提升300%的智能分析工具 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分油猴脚本,主要为原神玩家识别 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-comment-checker 当你…...

Fish Speech 1.5新手必看:一键部署,轻松实现文本转语音

Fish Speech 1.5新手必看:一键部署,轻松实现文本转语音 1. 认识Fish Speech 1.5 Fish Speech 1.5是由Fish Audio开源的新一代文本转语音(TTS)模型,它基于LLaMA架构与VQGAN声码器,支持零样本语音合成。这意…...

深入解析Standard Delay Format(SDF)中的时序约束映射

1. 什么是Standard Delay Format(SDF)? Standard Delay Format(标准延迟格式)是数字电路设计中用于描述时序信息的标准文件格式。简单来说,它就像电路设计的"时间说明书",告诉EDA工具信号在电路中传播需要多…...

终极DDrawCompat使用指南:让经典游戏在现代Windows系统完美运行

终极DDrawCompat使用指南:让经典游戏在现代Windows系统完美运行 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/…...

UE5动画开发实战:Modify Curve节点的5种Apply Mode详解(附应用场景)

UE5动画开发实战:Modify Curve节点的5种Apply Mode详解(附应用场景) 在UE5动画开发中,曲线控制是提升角色表现力的关键。Modify Curve节点作为动画蓝图中的重要工具,其五种Apply Mode模式的选择直接影响最终动画效果的…...