从零开始的nrf52832蓝牙开发(1)--蓝牙协议基础

article/2025/8/17 0:59:43

想要进行蓝牙开发,第一步肯定要对蓝牙协议有所了解。除了要对蓝牙的一些专业术语有所熟悉,还应该对蓝牙协议每层功能有一定认知。
概略图:
在这里插入图片描述

物理层(PHY):

物理层规定了蓝牙频段:2400MHz~2483.5MHz
物理层规定了调制解调方案:高斯频移键控
首先蓝牙物理传输基于Radio模块,也就是无线电模块。我们知道在串口中对地线有无电压可以表示逻辑上的1或是0,而无线电的做法简单来说就是在某个频率中心,上浮和下降一定频率看做1和0,这就是高斯频移键控(GFSK),它是一种调制解调方案。
物理层规定了三种调制解调方案的变体:LE 1M PHY、LE 2M PHY、LE Coded PHY
物理层规定了通信方案:分时双工
物理层规定了发送功率和接收灵敏度
发送功率:0.01mW(-20dBm)到 100mW(+20dBm)
接收灵敏度(它并不是一个具体的值,而是根据发送数据长度,指定了要低于多少的误码率):
在这里插入图片描述

链路层(LL):

链路层在蓝牙协议栈中最为复杂!
定义了空口包格式和空口协议,负责广播、扫描、建立连接、维护连接等,展开来讲比如广播间隔、数据重传、接收发送等待超时等设置最后都在这一层中被实际应用。
链路层的五种状态:
就绪态、广播态、扫描态、发起态、连接态。状态机如下:
蓝牙4.2第2574页

蓝牙每个信道为2MHZ,所以一共40个信道,其中2402、2426、2480MHZ为主信道,主要用于传统广播,其余为二级信道,主要用于。广播时在三个广播信道循环跳转,连接后在数据信道循环跳转。
连接状态下定义了两个重要的角色:中心角色(Central role)和外围角色(Peripheral role),主动发起连接的叫做中心角色,被动接受连接的叫做外围角色!
一个链路层可以同时实现多个状态机,一个状态机只能处于一种状态而不可以同时处于多种状态。
2022-11-04新增:
现在的蓝牙链路层状态机为:
在这里插入图片描述
新添加了同步广播态和同步态。
其次编号为37、38、39的信道之前只用来广播,而其他37个信道可以用来在连接后传输数据,但是现在新增拓展广播后,那37个信道也可以用来传输广播了,比如周期广播。新增的拓展广播,还是需要先在广播信道上告诉接收设备,怎么后续在数据信道上接收,所以之前的广播信道现在叫做主信道,数据信道叫做二级信道,之前只在主信道上广播的广播,叫做传统广播。
还新增了恒音拓展用来支持AoA/AoD测向。新增CIS和BIS等,内容比较多。

同步适应层

主要为了解决音频传输中音频帧长不一问题,通过分割和重组让发送和接收端在使用不同帧长时正常使用。

主机与控制器接口(HCI):

此层可选,是连接主机(Host)和控制器(Controller)之间的桥梁。主机与控制器之间可以使用USB、UART等通信,HCI规定了一系列的通信标准协议。但像52832这种芯片是没有HCI的,Host和Controller被设计在一个芯片内,他们直接通过调用接口API通信。

逻辑链路控制和协议适配(L2CAP):

1.协议或通道的多路复用
2.上层应用数据(L2CAP Service Data Units,SDUs)的分割(和重组),生成协议数据单元(L2CAP Packet Data Units,PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现
3.提供基于信用的流控机制
4.错误控制和重传机制
5.支持流式传输(如音频、视频等,不需要重传或者只需要有限重传)
6.协议数据单元(PDUs)的分片(和重组),生成符合Link Layer传输要求的数据片(长度不超过251)
7.Qos服务

安全管理层(SMP):

管理蓝牙连接的安全性,主要负责密钥分发与配对。支持如下命令:
蓝牙协议4.2第2326页

属性协议(ATT):

协议两个字画重点,什么是协议?就是一种约定,两个设备要交互数据,数据按照什么顺序发,每个字节代表什么意思,这就是协议。所以ATT就是规定了两个蓝牙设备之间通信的一个协议。属性协议肯定是关于属性的协议,属性其实就是一种数据格式:
在这里插入图片描述
上图就是一条属性,它由以下几个部分组成:
Attribute Type:
属性类型,用UUID表示,分为四大类:
1.Primary Service(首要服务项)
2.Secondary Service(次要服务项)
3.Include(包含服务项)
4.Characteristic(特征值)
uuid对应属性类型划分:
0x1800 – 0x26FF :服务项类型
0x2700 – 0x27FF :单位
0x2800 – 0x28FF :属性类型
0x2900 – 0x29FF :描述符类型
0x2A00 – 0x7FFF :特征值类型
实际数据可以参考下一节GATT的图片。
Attribute Handle:
属性句柄,如果设备上有两个类型一样的肯定需要一个标识来区分,属性句柄就是每个属性的唯一标识。它由系统分配。
Attribute Value:
属性的值,如果该属性是服务项类型或者是特征值声明类型,那么它的属性值就是UUID等信息。如果是普通的特征值,则属性值是用户的数据。属性值需要预留空间以保存用户数据。为了方便理解,我们可以将属性值的空间看做I2C的数据空间,操作特征值里的用户数据,就是对那块内存空间进行读写。
Attribute Permissions:
属性权限,主要有一下四类:
访问权限(Access Permission)- 只读、只写、读写
加密权限(Encryption Permission) – 加密、不加密
认证权限(Authentication Permission) – 需要认证、无需认证
授权权限(Authorization Permission) – 需要授权、无需授权
操作属性的指令:
在这里插入图片描述
蓝牙协议4.2第2201页

通用属性配置文件(GATT):

它规定了属性的组织方式,一个profile由若干个service组成,而一个service又由若干characteristic组成,characteristic又是由声明、数值和描述符组成。整体结构:
蓝牙协议4.2第2219页
蓝牙协议4.2第2275页

通用访问配置文件(GAP):

1.定义了GAP层角色:
蓝牙协议不同层中对角色的定义互不干扰。
比如链路层里面定义了主机(Master)、从机(Slave)角色。
GAP层定义了广播者(Broadcaster Role)、观察者(Observer Role)、外围设备(Peripheral Role)、中心设备(Central Role)。
ATT层定义了服务端(Server)、客户端(Client)。
2.定义GAP层的、用于实现各种通信的操作模式(Operational Mode)和过程(Procedures):
Broadcast mode and observation procedure,实现单向的、无连接的通信方式;
Discovery modes and procedures,实现蓝牙设备的发现操作;
Connection modes and procedures,实现蓝牙设备的连接操作;
Bonding modes and procedures,实现蓝牙设备的配对操作。
3.定义User Interface有关的蓝牙参数:
1.蓝牙地址
2.蓝牙名称
3.蓝牙的pincode
4.蓝牙的class

最后在应用程序中我们可以自定义或者使用SIG官方定义的配置,去实现自己的蓝牙功能,也就是各种各样的service和characteristic。

下一篇:
从零开始的nrf52832蓝牙开发(2)–蓝牙模板解析

推荐文章:
BLE发展介绍

蓝牙核心规范

蓝牙协议指南

蓝牙4.2协议官方下载

ATT协议解析

深入浅出低功耗蓝牙(BLE)协议栈

低功耗蓝牙ATT/GATT/Profile/Service/Characteristic规格解读

蓝牙相关名词全称

蓝牙技术揭秘

2022-11-04更新

重新修改了一些错误概念,原文基于蓝牙V4.2,添加了到最新的蓝牙V5.3的相关内容。


http://chatgpt.dhexx.cn/article/J4RjOX4D.shtml

相关文章

01、NRF52832介绍功耗、射频参数、芯片处理能力、内存和支持协议详解

众所周知,低功耗代蓝牙以其低功耗的优势,凸显出强大的市场竞争力,而其中 nRF52832 这一款低功耗蓝牙芯片更是受到大家的欢迎。 下面云想智慧带你从功耗、射频参数、芯片处理能力、内存和支持协议这 5 个方面来解说 nRF52832 为什么受到欢迎。…

NRF52832蓝牙芯片详细介绍及应用方案

NRF52XX系列蓝牙Soc芯片选型表 NRF52810-QFAA 处理器:ARM Cortex M4RAM:24kBFLASH:192kB支持协议:BLE、ANT、私有2.4G封装:QFN48尺寸(mm):6 x 6 NRF52810-QCAA 处理器&#xff1…

SpringBoot前端模板

Springboot支持thymeleaf、freemarker、JSP,但是官方不建议使用JSP,因为有些功能会受限制,这里介绍thymeleaf和freemarker。 一、thymeleaf模板 thymeleaf模板的前端界面为.html格式的文件,可以直接使用浏览器进行查看,方便进…

后台管理系统前端模板(html + CSS + JavaScript)

这是为大家准备的资源链接🤐🤐🤐: 提取码:0000 bootstrap_htmb.zip_免费高速下载|百度网盘-分享无限制百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速&#…

39个精美前端模板

为了方便广大程序员开发,整理了网上常见的免费的后台模板给大家。 1.Ace_admin Ace_admin 下载地址:http://pan.baidu.com/s/1dFaRCCL 2.AdminEx AdminEx 下载地址:http://pan.baidu.com/s/1gfxOkpl 3.AdminLTE AdminLTE 下载地址&a…

django 使用网上下载的前端模板

记录一下django使用前端模板的过 新手,没写过前端,不对的地方欢迎大神指教!!!谢谢。 环境 windows7 django3.X pycharm 1使用pycharm 创建django项目 2创建app,python manage.py startapp app名称 3把下载好…

基于html+css+js线上订餐系统前端模板

h180效果图 部分源码 html <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"><title>Cooker</title><meta name"descriptio…

使用Vue+Element-UI从0搭建一个常见的前端模板

首先&#xff0c;创建一个vue项目&#xff0c;这里不做过多阐述&#xff0c;直接写模板 简单的介绍一下一般的页面布局包括顶部导航栏&#xff0c;左侧菜单栏&#xff0c;和主要的信息展示页面 我们直接勾勒出一个这样的架子,这里使用了element-UI&#xff0c;记得用npm下载一…

免费html模板bootstrap,20 款超棒免费的 Bootstrap 管理和前端模板

1. SB Admin 2 2. Admin Lite 3. Director Responsive Admin Template Free 4. Free Bootstrap Admin Template Dream 5. Dashgum – Free Dashboard 6. Free Responsive Admin Template – Zontal Admin 7. Free Download Bootstrap Admin Template 8. Janux – Free Responsi…

【精美前端模板】你还不心动吗?

文章目录 &#x1f449;引言&#x1f48e;&#x1f31f;久等了&#xff01;&#x1f449;一、UniDark&#x1f449;二、My hat&#x1f449;三、ELYSIUM 魔兽世界&#x1f449;四、Sea Food美食&#x1f449;五、 Raduate&#x1f449;六、Goaway&#x1f449;七、CLEAN FRESH …

小区管理系统之后台管理前端模板

&#x1f525;作者主页&#xff1a;疯狂行者&#x1f525; &#x1f496;简介&#xff1a;Java领域新星创作者&#x1f3c6;、【计算机源码之家】公号作者✌ 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】&#x1f496; &#x1f496;文末获取源码联系&#x1f…

前端模板引擎 -- Freemarker

一、Freemarker介绍 FreeMarker是一个模板引擎&#xff0c;一个基于模板生成文本输出的通用工具&#xff0c;使用纯Java编写。 FreeMarker被设计用来生成HTML Web页面&#xff0c;特别是基于MVC模式的应用程序。 虽然FreeMarker具有一些编程的能力&#xff0c;但通常由Java程序…

前端模板

总述 “模板”这个词&#xff0c;可能很多人第一印象是后端的技术&#xff08;Smarty&#xff0c;Velocity等&#xff09;&#xff0c;但本文要讲的却不是后端的概念&#xff0c;而是前端开发中所使用到的一种技术&#xff0c;也就是“前端模板”技术。 模板的工作原理可以简单…

前端模板template

一、背景 前端小白的成长历程&#xff0c;一般都会经历html模板的一些问题,jquery template/artTemplate/yayaTemplate等常见的模板使用&#xff0c;这里就不作介绍了。 先谈谈我们为什么要使用模板&#xff1f; 当一个html页面有许多重复功能、累赘功能、有逻辑功能&#xf…

后台管理系统纯前端模板

分享一个个人学习前端写过的模板&#xff0c;简单、高效、好用。 下载链接&#xff1a; https://download.csdn.net/download/qq_51701007/87109342https://download.csdn.net/download/qq_51701007/87109342 相关技术&#xff1a;HTML、CSS、JavaScript、Vue2.0&#xff08…

各种前端模板

标准色板 扩展色板 图表配色模板 字体大小模板 状态提示配色模板 品牌配色模板 字体颜色模板 分类色板 状态提示配色模板 分割线配色模板

快速搭建一个前端模板

之前写过好几个前端页面&#xff0c;都是从网上copy下来别人的模板&#xff0c;总是因为本案或者其他环境问题弄个半天&#xff0c;主要是影响心态&#xff0c;所以这次专门记录一下怎么快速生成一个前端模板&#xff1b; 1.下载并且安装打开 HBuilder X 这个软件 2.新建 3.然…

前端模板引擎使用

用来代替模板字符串&#xff0c; 在JS字符串中写模板问题? 1.维护不方便&#xff0c;不能换行&#xff0c;没有着色 常用模板引擎&#xff1a; 1. Art-template 2. DOT 3. JavaScript-Templates 4. Template.js 5. Tempo 6. ECT 7. Dot Dom 8. Template7 9. Bunny …

推荐几个前端模板下载站

相信大家自己做web项目的时候会为找不到好看的前端模板而发愁&#xff0c;有时候在网上找到了自己喜欢的模板&#xff0c;但是下载又需要积分或者是vip&#xff0c;最近我就整理了几个前端模板很多的网站&#xff0c;部分网站完全免费&#xff0c;不需要VIP或积分 top1 推荐指…

前端模板引擎

一. 为什么要使用模板引擎 关于为什么要使用模板引擎, 就我现在的项目而言,我还停留在进行发送Ajax请求到后台后,利用模板引擎拼接接受到的JSON字符串,展现到页面的地步. 按照我老师的一句话表达:不用重复制造轮子. 对于为什么要使用模板引擎的解释,我看过最好的回答来自知乎上…