- 博客(80)
- 收藏
- 关注
原创 L2CAP
摘要:L2CAP(逻辑链路控制和适配协议)是蓝牙协议栈中的关键层,提供面向连接和无连接的数据服务。它通过协议多路复用、分段重组和组概念简化高层开发,屏蔽底层协议细节。L2CAP支持多种操作模式(如基本模式、流控模式、重传模式等),使用信道标识符(CID)管理逻辑链路。其数据格式默认为小端,封包结构包含PDU长度、信道ID等信息。L2CAP信号包分为请求、响应和指示三种类型,通过特定CID(传统蓝牙0x0001,BLE 0x0005)传输。连接请求(0x02)和响应(0x03)报文包含PSM、CID等字段,用
2026-01-14 10:10:28
601
原创 SDP(Sever Discover Protocol)
主要参考 Core_v5.3.pdfServiceRecordHandle 的是32位的数据 他的 0x00000001-0x0000FFFF是保留位,所以ServiceRecordHandle 要从0x00010000开始。这一节的btsnoop可以用Ellisys.BluetoothAnalyzer.exe,参考着看数据元素类型表示为5位类型描述符。类型 描述符包含在数据元素头的第一个字节 的最高(高阶)5位中。已经定义了以下类型。
2026-01-12 16:56:36
554
原创 RFCOMM
RFCOMM 协议提供了对 L2CAP 协议上的串行端口的模拟。该协议基于 ETSI 标准 GSM07.10。RFCOMM 的目的,是针对如何在两个不同设备(通信的两端)上的应用之间保证一条完整的通信路径,并在它们之间保持一通信段。下图表示一条完整通信路径。应用不只表示终端用户应用, 比如也可以是高层协议或作为终端用户应用的其它服务。RFCOMM 的目的是覆盖使用其所在设备的串行端口的应用程序,该规范支持两种设备类型的存在:1:设备本身就是通信终端(如计算机,打印机)
2026-01-09 16:30:24
793
原创 HID(Human Interface Device)——人机交互协议
本文介绍了蓝牙HID(人机接口设备)协议架构和通信机制。主要内容包括: HID角色分为Host(如游戏主机)和Device(如游戏手柄) HID report分为Input/Output/Feature三种类型,分别对应不同传输方向 HID基于L2CAP的两个逻辑通道:控制通道(HID_CONTROL)和中断通道(HID_Interrupt) 详细解析了HID封包格式和命令类型,包括握手包、控制包、数据请求包等 介绍了HID描述符的结构,并以鼠标描述符为例说明其构建方法 文章通过协议架构图、封包格式图和具体
2026-01-07 15:26:18
710
原创 AVRCP/AVCTP-蓝牙音视频控制协议
AVRCP协议框架摘要: AVRCP是基于AVCTP协议的蓝牙音视频远程控制协议,定义了控制器(Controller)与目标设备(Target)之间的交互机制。协议支持两种连接通道:控制通道(PSM 0x0017)和浏览通道(PSM 0x001B),分别用于传输控制命令和浏览信息。AVCTP报文格式分为非分片报文(单包)和分片报文(多包),包含事务标签、包类型、命令/响应标识等字段。AVRCP常用命令包括VENDOR DEPENDENT和PASS THROUGH,后者用于实现播放控制等基本功能,其操作码(O
2025-12-27 14:40:12
993
原创 A2DP/AVDTP-蓝牙音乐协议
本文摘要:AVDTP(音视频分配传输协议)是蓝牙A2DP协议的基础,负责音视频流的协商、建立和传输。文章详细介绍了AVDTP的协议框架、组件构成、关键术语解释以及信号封包格式。重点阐述了流端点发现流程,包括命令和响应的封包结构。AVDTP通过L2CAP层传输,支持多路复用、时间戳管理等功能,其信号交互采用事务标签机制确保通信可靠性。文中还提供了PCM音频数据的采样率、位宽等基础参数计算方法,完整描述了蓝牙音频从源端到接收端的传输链路。
2025-12-15 20:35:00
974
原创 OBEX(Object Exchange profile)-对象交换协议
OBEX协议采用请求-响应模式(支持单响应或多响应),数据包由操作码/响应码、长度(大端序)和数据组成。协议定义了连接(Connect)、断开(Disconnect)、推送(Put)和获取(Get)四种核心操作流程,每种操作包含特定的请求和响应格式。数据头(Header)采用HI-HV结构,HI字段决定数据类型(Unicode文本/字节序列/1字节ID/4字节ID)。协议文档IROBEX详细说明了操作码、响应码及数据头解析规则,并提供了蓝牙抓包示例用于协议分析。
2025-12-08 23:03:05
391
原创 PBAP协议(Phone Book Access Profile 蓝牙电话本协议)
本文介绍了PBAP(电话簿访问协议)的基本框架与功能。协议框图展示了OBEX在v1.2版本后直接通过L2CAP传输的改进。文章详细说明了PCE(客户端)和PSE(服务器端)的角色定义,以及PBAP虚拟文件夹结构(包括telecom、sim及各类通话记录目录)。重点阐述了PBAP连接所需的SDP注册内容和OBEX协议交互格式,包括连接请求/响应的详细参数说明。此外,文章还分析了电话簿下载(PullPhoneBook)和浏览(SetPhoneBook)功能的操作流程及数据包结构,特别说明了SRM(单响应模式)的
2025-12-03 23:01:45
986
原创 SPP蓝牙串口协议(serial port profile)
本文介绍了蓝牙SPP(串行端口协议)的工作原理和连接流程。SPP支持双向数据传输,包含Device A(主动连接方)和Device B(被动连接方)两种角色。Device B需注册SDP服务记录以便被发现。文章详细说明了SPP的SDP配置表、UUID(0x1101)以及RFCOMM通道的连接过程:先建立Signal通道,再通过预设的Channel 8进行数据交互。最后展示了SPP数据通过RFCOMM通道传输的格式,其中Payload部分承载实际数据内容。整个连接过程涉及SDP查询、RFCOMM通道建立和数据
2025-11-30 16:49:23
338
原创 HFP前置连接流程
本文详细介绍了蓝牙设备连接的完整流程。首先描述了HCI层连接请求、接受请求及连接完成的交互过程,包括参数传递和状态确认。随后说明了PIN码配对流程及密钥交换机制。接着阐述了L2CAP层的信息交互、连接建立和配置过程,以及SDP协议的服务发现流程。最后介绍了RFCOMM通道建立和HFP协议的服务层连接初始化。整个过程涵盖了从物理层连接到应用层协议交互的完整链路,展示了蓝牙协议栈各层的协同工作机制。
2025-11-29 22:34:32
975
原创 HFP-Enhanced Call Status & HF Indicators
本文介绍了蓝牙HFP协议中的增强型电话状态查询(HF Indicators)功能。主要内容包括:1) 通过AT+CLCC命令查询通话状态,包括来电方向、状态类型等参数;2) HF Indicators的两种类型(0x01增强安全/0x02设备电量)及其相关AT命令(AT+BIND、AT+BIEV);3) 交互流程示例,如查询支持的功能、上报设备电量等。这些功能可用于车载系统等场景,实现通话状态监控和设备信息同步。
2025-11-28 23:48:02
489
原创 HFP-Remote audio volume control & Subscriber Number Information
摘要 本文介绍了蓝牙设备间的远程音频控制功能,包含: 音量控制:通过AT+VGS/VGM命令(增益值0-15)实现HF与AG设备间的扬声器和麦克风音量双向调节; 本机号码查询:HF通过AT+CNUM命令获取AG端电话号码,AG端以+CNUM:响应(支持多号码返回),若无号码则仅回复OK。文中提供了详细的AT指令格式说明和通信流程图解。
2025-11-27 22:33:27
234
原创 HFP-Attach a phone number to a voice tag&Ability to transmit DTMF codes
摘要:本文介绍了HFP协议中两个实用功能:1)通过AT+BINP=1命令获取按键1绑定的电话号码(注意只能查询按键1);2)在已建立SLC连接且有通话时,使用AT+VTS=<DTMF>命令发送DTMF码(如AT+VTS=0发送数字0)。两个功能均需特定条件支持,文末配有AT指令交互截图说明。
2025-11-27 22:01:33
156
原创 HFP-Voice recognition activation(语音识别)
本文介绍了蓝牙设备间语音识别功能的激活与关闭机制。HF端通过发送AT+BVRA=1命令发起语音识别,AG端通过+BVRA:1响应并建立SCO通道;关闭时AG端发送+BVRA:0或HF端发送AT+BVRA=0。文章通过流程图展示了两种设备分别作为发起方的交互过程,包括支持与不支持语音识别时的不同响应情况。
2025-11-27 21:13:10
297
原创 HFP-Calling Line Identification (CLI)&Echo canceling (EC) and noise reduction (NR)
本文介绍了蓝牙HFP协议中的两个重要功能:呼叫线路识别(CLIP)和回声降噪控制。CLIP功能通过AT+CLIP命令开启,来电时会显示对方号码。回声降噪功能可通过AT+NREC=0命令关闭,但不提供开启命令,设备会根据是否支持该功能返回OK或错误码。文章通过图示展示了这两种功能的命令交互过程。
2025-11-26 22:53:32
178
原创 HFP-拨号
本文介绍了蓝牙设备(HF)通过AT命令拨打电话的三种方式:1)直接拨号(ATDdd...dd;),2)记忆拨号(ATD>nnn...;),3)末号重拨(AT+BLDN)。每种方式都展示了完整的通信流程,包括HF发起命令、AG回复状态(如callsetup=2表示拨号中,call=1表示接通)以及音频连接建立过程。文章通过示意图和btsnoop日志详细说明了通话状态转换机制,包括拨号、响铃和接通等关键环节的状态变化。这些AT命令实现了蓝牙设备与手机(AG)之间的基本电话控制功能。
2025-11-26 21:56:04
200
原创 HFP-Audio Connection transfer during an ongoing call
本文介绍了蓝牙音频通话转移功能,需要满足SLC已建立和通话正在进行两个前提条件。文章分别阐述了音频连接转移到HF端(耳机)和AG端(手机)的操作方法:转移到HF端需建立音频连接,转移到AG端则需断开连接。文中提供了相关技术链接和示意图,简要说明了两种转移方式的基本原理和实现路径。
2025-11-26 20:51:41
234
原创 HFP-Accept an incoming voice call,Reject an incoming voice call,Terminate a call
本文介绍了蓝牙设备处理来电的几种场景:1)支持In-band ring tone时,来电即建立音频连接;2)HF端接听来电的流程(包含发送CIEV通知、RING铃声、ATA接听等步骤);3)AG端接听来电的简化流程;4)通过BSIR指令设置铃声模式;5)HF和AG拒接来电的差异(使用CHUP指令);6)通话终止流程。重点对比了有无In-band ring tone时音频连接建立时机的不同,以及HF与AG端操作流程的区别。
2025-11-26 11:18:35
533
原创 HFP-Audio Connection handling(音频连接)
Codec Connection 是在1.6之后才有的,所以如果是之前的profile版本只能通过sco来建立连接。如果支持Codec Connection 那么就走下方这个流程。
2025-11-25 14:43:34
319
原创 HFP-Phone status information(电话状态信息)
本文介绍了蓝牙HFP协议中AG(音频网关)状态信息的传输机制。主要内容包括:1)通过AT+CMER和AT+BIA命令控制AG indicators的开关;2)信号强度、漫游状态、电池电量等通过+CIEV消息上报;3)使用AT+COPS命令查询运营商信息;4)AT+CMEE=1开启详细错误报告功能;5)呼叫状态通过+CIEV消息传输。文章详细说明了各类状态信息的传输格式和参数设置方法,为HFP协议开发提供了实用参考。
2025-11-24 22:20:31
559
原创 HFP(Hand Free Profile)协议介绍和Connection Management流程
HFP协议(Hands-Free Profile)是蓝牙设备间实现免提通话功能的通信协议。协议采用AG(音频网关,如手机)和HF(免提设备,如耳机)两种角色,通过RFCOMM连接建立服务级通信(SLC)。主要功能包括连接管理、音频处理、呼叫控制和状态通知等。协议版本从1.0到1.8逐步增加了宽带语音、编解码器协商、电量指示和语音识别等功能。连接建立过程包含特性交换(BRSF)、编解码协商(BAC)和状态指示配置(CIND/BIND)等步骤。该协议支持CVSD和mSBC两种音频编解码器,广泛应用于车载系统和蓝
2025-11-24 20:47:38
1187
原创 DID(DeviceID)协议
本文介绍了蓝牙设备ID(DID)信息的获取方式,包括通过EIR命令获取基本信息和通过SDP协议获取完整信息。EIR只能获取厂商ID、产品ID等有限信息,而SDP可以获取完整的DID信息,DID协议正是基于SDP实现的。文章详细说明了DID服务记录的6个必设参数(SpecificationID、VendorID等)和3个可选参数,并提供了参数格式示例。最后通过btsnoop分析展示了EIR和SDP报文中的DID信息解析过程,包括版本号0x0103表示v1.3协议等信息的具体呈现方式。
2025-11-21 14:09:27
539
原创 蓝牙EIR数据
本文介绍了蓝牙EIR(Extended Inquiry Response)数据格式,重点解析了其LTV(Length-Type-Value)结构。EIR数据通过HCI Write Extended Inquiry Response命令写入,其中Type字段需参考蓝牙规范文档Assigned_Numbers.pdf(2.3 Common Data Types部分)。以UUID为例:0x05表示5字节数据长度,0x03表示16bit UUID类型,后续数据如00 12代表Pnp Information UUID
2025-11-16 20:49:41
219
原创 BLE 扫描与广播
被动扫描和主动扫描。通常设为主动扫描,0x01这两个参数设置的ble的扫描时间和扫描周期,比方说ble每10.24s启动一次,每次扫描5.12秒,减少功耗。设置本地蓝牙地址类型设置扫描的过滤策略,0x00就是不过滤。
2025-11-16 20:35:48
671
原创 蓝牙SIG命令初始化流程
本文介绍了蓝牙HCI初始化流程中的关键Command和Event交互。主要内容包括: HCI Reset(OGF 0x03 OCF 0x03)进行软件复位,返回状态确认 版本信息读取(OGF 0x04 OCF 0x01)获取HCI版本 缓冲区大小读取(OGF 0x04 OCF 0x05)查询队列深度 蓝牙地址读取(OGF 0x04 OCF 0x09)获取设备地址 设备类型设置(OGF 0x03 OCF 0x24)写入Class of Device 本地名称设置(OGF 0x03 OCF 0x13)配置蓝牙名
2025-11-15 18:31:37
1011
原创 HCI Vender command CSR8311初始化
该命令中的 opcode是0xfc00 OGF是0x3f OCF是0x00,OGF的0x3f指的是厂家自定义的HCI COMMAND.第二个的参数 Parameter Total Length 指的是参数的长度,不包含opcode,当我们整包数据没有被拆分时Last Fragment 喝 First Fragment 都为1 channel ID 参考下表,我们目前使用的是BCCOMMAND。
2025-11-15 14:13:28
399
原创 HCI 数据格式
本文介绍了四种HCI数据包的结构和计算方法:1)HCI Command由16位操作码(10位OCF+6位OGF)、8位数据长度和数据组成,总长度为数据长度+4字节;2)HCI ACL数据包包含12位句柄、4位标志位、16位数据长度和数据,总长度为(packet[3]<<8)+packet[2]+5字节;3)HCI SCO数据包由12位连接句柄、4位状态标志、8位数据长度和数据组成,总长度为数据长度+4字节;4)HCI Event数据包包含8位事件码、8位参数长度和参数,总长度为参数长度+3字节。
2025-11-12 15:21:05
300
原创 btsnoop编写流程
btsnoop是一种用于记录蓝牙HCI流量的日志格式,采用大端字节序存储。其文件头包含识别模式"btsnoop"、版本号和传输类型标识,如H4协议值为0x03ea。数据包记录格式包括原始长度、包含长度、数据包标志(区分HCI命令/事件/ACL/SCO数据)、时间戳等信息。其中HCI命令包长度计算需包含1字节类型、2字节操作码和1字节参数长度;ACL数据包需计算2字节句柄和2字节数据长度。btsnoop.c实现了基于FATFS和Zephyr的文件操作,支持日志文件的创建、写入和关闭功能。
2025-11-12 15:09:17
815
原创 指针传参误区
野指针不会有这个问题,因为野指针会被随机的分配一块内存空间,但是实际使用中仍不建议这样使用,使用野指针操作,可能会踩到其他内存空间造成莫名其妙的死机,并且很难排插问题。同样的若是要修改指针a的内容,如果a为空指针在函数内调用。这种形式的话,是无法通过简单的。C语言中指针作为形参传递时,形式2:采用二级指针的形式,
2024-01-08 21:40:57
494
原创 快速排序法
1选定Pivot中心轴(为了方便通常选取最开始的数据为中心轴)4.分别对左右子序列重复前三步操作(递归操作)2将大于Pivot的数字放在Pivot的右边。3将小于Pivot的数字放在Pivot的左边。
2023-02-17 23:01:08
358
原创 内存常见划分区域ZI-data RO-data RW-data Code BSS DATA
RO_DATA段:只读(read_only)区域,保存const修饰的常量,不是全部的常量都保存再这的,有的立即数直接编码在指令里,存放在代码段(.text)中,BSS段(好像和ZI-data是一样的):保存未初始化或初始化为0的全局变量,这种全局变量再bss段里面都会被清成0,为了移植方便最好都初始化成0。在有的嵌入式系统中,rodata放在ROM(如norflash)里,运行时直接读取ROM内存,无需要加载到RAM内存中。RW-data: 可读可写的,已经初始化的全局变量。
2022-12-30 16:12:17
2737
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅