三种蓝牙架构实现方案
一、蓝牙架构方案
1、host+controller双芯片标准架构
手机里面包含很多SoC或者模块,每颗SoC或者模块都有自己独有的功能,比如手机应用跑在AP芯片上,显示屏,3G/4G通信,WiFi/蓝牙等都有自己专门的SoC或者模块,这些模块在物理上都会通过某种接口与AP相连。如果应用需要用到某个模块的时候,比如蓝牙通信,AP会自动跟蓝牙模块交互,从而完成蓝牙通信功能。市场上有很多种AP芯片,同时也有很多种蓝牙模块,如何保证两者的兼容性,以减轻手机的开发工作量,增加手机厂商蓝牙方案选型的灵活性,是蓝牙规格要考虑的事情。为此,蓝牙规格定义了一套标准,使得手机厂商,比如苹果,用一颗新AP替换老AP,蓝牙模块不需要做任何更改;同样用一颗新蓝牙模块换掉老蓝牙模块,AP端也不需要做任何更改。这个标准把蓝牙协议栈分成host和controller两部分,其中host跑在AP上,controller跑在蓝牙模块上,两者之间通过HCI协议进行通信,而且host具体包含协议栈那些部分,controller具体包含协议栈那些部分,两者之间通信的HCI协议如何定义,这些在蓝牙核心规格中都有详细定义,因此我把它称为双芯片标准方案。只要遵循这套标准,用户就可以随意替换Host或者Controller方案。当然,这种方案除了可以应用在手机中,也可以应用在任何其他设备中。AP芯片厂商一般会直接采用Bluez等开源协议栈来实现Host功能,而Controller部分大部分由蓝牙厂商自己来实现。另外,目前比较火的Zephyr开源蓝牙协议栈也支持这种架构。
2、单芯片整体方案
手机周边蓝牙设备是蓝牙另外一个非常重要的应用场合,通常手机周边设备功能比较简单,但对成本非常敏感,因此采用一颗芯片来实现整个蓝牙协议栈就是非常明智的选择,即把蓝牙协议栈所有功能都放在一颗芯片上,也就是说,host和controller都放在同一颗芯片上,由于host和controller都在同一颗芯片上,因此物理HCI就没有存在的必要性,host和controller之间直接通过API来交互。像Nordic的蓝牙协议栈Softdevice,就是采用这种模式。当然Zephyr也支持这种架构。
3、自定义双芯片架构
一些蓝牙设备功能比较强大,它需要一颗功能非常强大的MCU来做主应用,而蓝牙SoC只是整个系统的一部分,这种情况下,大部分蓝牙协议栈功能或者整个蓝牙协议栈功能都是跑在蓝牙SoC中,而蓝牙应用则跑在主MCU中,主MCU和蓝牙SoC之间的通信协议由厂商自己定义,因此称为自定义双芯片架构方案。这种方案也非常常见,可以说,除了架构1和架构2之外的架构,都可以称为架构3。架构3里面有一种非常特殊的情况,即主MCU和蓝牙SoC之间采用了HCI接口进行通信,由于这里的HCI只是用来进行物理通信,而通信的主体不是host和controller,通信包应用数据也不遵循蓝牙核心规格规范,因此不能把它看成第1种架构,Nordic的serialization方案就属于这种特殊情况。
二、协议栈框架
把某个协议的实现代码称为协议栈(protocol stack),协议有两个部分组成:Controller和Host。BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。在深入BLE协议栈各个组成部分之前,先看一下BLE协议栈整体架构。
如上图所述,要实现一个BLE应用(Radio+Protocol Stack+Application),首先需要一个支持BLE射频的芯片(Radio),然后还需要提供一个与此芯片配套的BLE协议栈(Protocol Stack),最后在协议栈上开发自己的应用(Application)。可以看出BLE协议栈(Protocol Stack)是连接芯片和应用的桥梁,是实现整个BLE应用的关键。那BLE协议栈具体包含哪些功能呢,简单来说,BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包,也就是说,把应用数据包裹在一系列的帧头(header)和帧尾(tail)中。具体来说,BLE协议栈主要由如下几部分组成:
(0)PHY层(Physical layer物理层,不属于协议栈)。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。
(2)LL层(Link Layer链路层)。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同时支持20个link(连接),就是LL层的功劳。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者GATT。
(3)HCI(Host controller interface)。HCI是可选的,HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。
(4)GAP层(Generic access profile)。GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。
(5)L2CAP层(Logic link control and adaptation protocol)。L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。
(6)SMP(Secure manager protocol)。SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。
(7)ATT(Attribute protocol)。简单来说,ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。
(8)GATT(Generic attribute profile )。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了ZigBee等无线协议的兼容性困境,成了出货量最大的2.4G无线通信产品。
三、OSI模型
从OSI(Open System Interconnection)模型的角度看,蓝牙是一个比较简单的协议,它仅仅提供了物理层(Physical Layer)和数据链路层(Data Link Layer )两个OSI层次。由于经典蓝牙和低功耗蓝牙大都是点对点直连通信,完全不需要路由功能,所以没有特地定义网络层的协议,简单的寻址功能就在数据链路层的LMP层和LL层实现了,而蓝牙mesh由于是组建了mesh网络,有数据转发和寻址的需求,所以定义了一个Network Layer来做这件事情。 蓝牙mesh建立在BLE物理层和链路层之上,通过承载层(Bearer Layer) 把BLE层的数据抽象并供上层使用, 目前定义了两种承载,广播承载和GATT承载, 分别对应BLE的Advertising和Connection方式。
Bluetooth LE技术相比BR技术,差异非常大,可以说就是两种不同的技术,凑巧都加一个“蓝牙”的前缀而已,二者的协议层结构对比如下,本系列中主要介绍BLE蓝牙技术。
SPEC中蓝牙协议分为四个层次:物理层(Physical Layer)、逻辑层(Logical Layer)、L2CAP Layer和应用层(APP Layer)。
四、蓝牙应用方案
1、BLE Mesh无线组网方案
BLE Mesh是蓝牙官方组织(SIG)推出的组网规范,以BLE为载体,形成星型网状的多对多拓扑结构,网络中的每一台设备都可以与其它设备进行通信。
2、蓝牙串口透传方案
蓝牙技术的普及与发展,为传统设备提供了一种低成本无线通信的方式。串口作为一种使用广泛的通信接口,通过串口转蓝牙,进行无线通信传输的需求逐渐展现出来。
3、BLE/UART/USB三向透传方案
BLE/UART/USB三向透传模块可以实现蓝牙、串口和USB接口数据的三向互通传输,蓝牙支持广播模式,主机模式和从机模式;除主芯片外,仅需1颗晶体,3颗电容,外围精简,体积小巧;自主设计天线,最远传输距离可达150米;70uA低功耗广播模式,休眠电流仅1uA;可广泛用于仪器仪表、智能家居、消费类电子和工业控制等。
4、蓝牙以太网网关方案
蓝牙以太网网关单芯片方案,快速实现蓝牙设备和TCP/IP网络之间的互通,帮助您将蓝牙设备连接至互联网,实现远程控制或数据采集,即使你不在家里,也可以通过手机、平板或PC等,从千里之外控制家中的蓝牙设备。
相关文章:

三种蓝牙架构实现方案
一、蓝牙架构方案 1、hostcontroller双芯片标准架构 手机里面包含很多SoC或者模块,每颗SoC或者模块都有自己独有的功能,比如手机应用跑在AP芯片上,显示屏,3G/4G通信,WiFi/蓝牙等都有自己专门的SoC或者模块࿰…...

ffmpeg 视频滤镜:高斯模糊-gblur
滤镜描述 gblur 官网地址 > FFmpeg Filters Documentation 这个滤镜会将视频变得模糊。 滤镜使用 参数 gblur AVOptions:sigma <float> ..FV.....T. set sigma (from 0 to 1024) (default 0.5)steps <int> ..FV.....T…...

期权懂|在期权市场中,如何用好双买期权?
期权小懂每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 在期权市场中,如何用好双买期权? 期权双买操作,即同时买入认购期权(看涨期权)和认沽期权(看跌期权…...

【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入
1.使用命令新建三个.c文件vi main.c,vi input.c,vi caclcu.c,两个.h文件vi input.h,vi caclcu.h 2.vi Makefile:新建Makefile文件,输入一下内容 注意:命令列表中每条命令前用TAB键,不…...

《黑神话:悟空》游戏辅助修改器工具下载指南与操作方法详解
《黑神话:悟空》是一款备受期待的动作冒险游戏,目前尚未正式发布。游戏开发团队一直在强调游戏的完整性和公平性,因此官方并不支持任何形式的作弊或修改行为。然而,对于一些玩家而言,使用辅助修改器可能会成为他们体验…...

C语言菜鸟入门·关键字·union的用法
目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体(union)是一种数据结构,它允许在同一内存位置存储不同的数据类型,但每次只能存储其中一种类型的…...

ensp静态路由实验
一、实验目的 1、熟练掌握交换机的基本配置命令 2、熟练掌握静态路由的使用方法 3. 熟练掌握交换机端口模式 二、实验内容 需求: 根据要求利用现有实验设备组建小型局域网 实验设备: 交换机S37002台;PC机2台;路由器2台。 …...

构建 Java Web 应用程序:从 Servlet 到数据库交互(Eclipse使用JDBC连接Mysql数据库)
第 1 部分:环境设置 安装 Java Development Kit (JDK):下载并安装 JDK。设置 IDE:安装并配置 IDE(如 IntelliJ IDEA 或 Eclipse)。安装数据库:下载并安装 MySQL 数据库。配置数据库:创建数据库…...

mfc100u.dll是什么?分享几种mfc100u.dll丢失的解决方法
mfc100u.dll 是一个动态链接库(DLL)文件,属于 Microsoft Foundation Classes (MFC) 库的一部分。MFC 是微软公司开发的一套用于快速开发 Windows 应用程序的 C 类库。mfc100u.dll 文件包含了 MFC 库中一些常用的函数和类的定义,这…...
Java面试之多线程并发篇
前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!说一说自己对于 synchronized 关键字的了解?说说自己是怎么使用 synchronized 关键字?什么是线程安全?Vector是一个线程安全类吗?…...

视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析
在数字科技日新月异的今天,视频直播和点播已经成为互联网内容传播的重要方式之一。而互联网直播点播平台EasyDSS作为功能强大的流媒体直播点播视频能力平台,提供了一站式的视频推拉流、转码、直播、点播、时移回放、存储等视频服务,广泛应用于…...

安全加固方案
交换机安全加固 查看是否关闭未使用的接口 25GE1/0/1、25GE1/0/47、25GE1/0/48需要使用,暂不关闭 system-view # interface Eth-Trunk99 shutdown quit interface Eth-Trunk100 shutdown quit interface Eth-Trunk110 shutdown quit interface 25GE1/…...
Linux firewall防火墙规则
官网 https://firewalld.org/ 查看所有防火墙规则: firewall-cmd --list-all-zones查看当前区域防火墙规则: firewall-cmd --list-all添加一个开放服务规则: firewall-cmd --add-servicessh删除一个开放服务规则: firewall-cmd…...
速盾:CDN缓存的工作原理是什么?
CDN(内容分发网络)是一种将内容分发到全球不同地理位置的网络架构,以提供更快速、可靠的内容传输。其核心原理是利用缓存技术,将数据内容分布到离用户最近的边缘节点上。当用户请求内容时,CDN将根据用户的IP地址&#…...

日常开发记录-正确的prop传参,reduce搭配promise的使用
日常开发记录-正确的prop传参,reduce搭配promise的使用 1.正确的prop传参2.reduce搭配promise的使用 1.正确的prop传参 一般会的父组件传参子组件 //父组件 <A :demodata.sync"testData" :listData.sync"testData2"></A> data ()…...

Hyper-V配置-cnblog
启用Hyper-V以在 Windows 10上创建虚拟机 (1)控制面板检查系统要求: 确保您的计算机符合 Hyper-V 的系统要求。通常情况下,您的计算机需要运行 Windows 10 专业版、企业版或教育版,并且具有启用了虚拟化技术的处理器。…...

运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Docker与Kubernetes集群拉取Harbor私有容器镜像仓库配置 描述:在现在微服务、云原生的环境下,通常我们会在企业中部署Docker和Kubernetes集群,并且会在企业内部搭建Harbor私有镜像仓库以保证开发源码安全,以及加快…...

openssl颁发包含主题替代名的证书–SAN
原文地址:openssl颁发包含主题替代名的证书–SAN – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 在 X.509 证书中,commonName(CN)字段只能有一个值。如果让证书支持多个域名和IP地址,…...
Stable Diffusion入门教程
要入门Stable Diffusion,你可以按照以下步骤进行: 1. 安装Stable Diffusion 获取安装包:你可以从GitHub上的 Stable Diffusion Web UI开源地址获取安装包。 一键启动程序包:如果你是小白不会装,可以使用国内秋葉aaaki开…...

H.265流媒体播放器EasyPlayer.js无插件H5播放器关于移动端(H5)切换网络的时候,播放器会触发什么事件
EasyPlayer.js无插件H5播放器作为一款功能全面的H5流媒体播放器,凭借其多种协议支持、多种解码方式、丰富的渲染元素和强大的应用功能,以及出色的跨平台兼容性,为用户提供了高度定制化的选项和优化的播放体验。无论是视频直播还是点播&#x…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...