三种蓝牙架构实现方案
一、蓝牙架构方案
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…...

conan2 c/c++包管理入门之--------------------------conanfile.py
书接上回,用过使用cmake去手动指定CMAKE_TOOLCHAINE_FILE和CMAKE_BUILD_TYPE太麻烦,有没有更简单的办法了,经过我的大量探索下终于发现,使用conan build和conanfile.py。大致原理是conan在构建时会自动调用conanfile.py里面定义数据和函数。举个例子: from conan import …...

DICOM图像深入解析:为何部分DR/CR图像默认显示为反色?
概述 在数字医学影像处理中,CR(Computed Radiography,计算机放射摄影)和DR(Digital Radiography,数字放射摄影)技术广泛应用于医疗影像获取与分析。然而,临床实践中常常遇到这样一个问题:部分CR/DR图像在默认打开时呈现为反色(即负片效果),需手动反色后才能正常阅片…...

重新定义社媒引流:AI社媒引流王如何为品牌赋能?
在社交媒体高度竞争的时代,引流已经不再是单纯追求流量的数字游戏,而是要找到“对的用户”,并与他们建立真实的连接。AI社媒引流王通过技术创新和智能策略,重新定义了社媒引流的方式,帮助品牌在精准触达和高效互动中脱…...

【FPGA】Verilog:利用 4 个串行输入- 串行输出的 D 触发器实现 Shift_register
0x00 什么是寄存器 寄存器(Register)是顺序逻辑电路中使用的基本组成部分之一。寄存器用于在数字系统中存储和处理数据。寄存器通常由位(bit)构成,每个位可以存储一个0或1的值。通过寄存器,可以设计出计数器、加法器等各种数据处理电路。 0x01 寄存器的种类 基于 D 触发…...

《硬件架构的艺术》笔记(五):低功耗设计
介绍 能量以热量形式消耗,温度升高芯片失效率也会增加,增加散热片或风扇会增加整体重量和成本,在SoC级别对功耗进行控制就可以减少甚至可能消除掉这些开支,产品也更小更便宜更可靠。本章描述了减少动态功耗和静态功耗的各种技术。…...

Hive离线数仓结构分析
Hive离线数仓结构 首先,在数据源部分,包括源业务库、用户日志、爬虫数据和系统日志,这些都是数据的源头。这些数据通过Sqoop、DataX或 Flume 工具进行提取和导入操作。这些工具负责将不同来源的数据传输到基于 Hive 的离线数据仓库中。 在离线…...

鱼眼相机模型-MEI
参考文献: Single View Point Omnidirectional Camera Calibration from Planar Grids 1. 相机模型如下: // 相机坐标系下的点投影到畸变图像// 输入:相机坐标系点坐标cam 输出: 畸变图像素点坐标disPtvoid FisheyeCamAdapter::…...

GPT系列文章
GPT系列文章 GPT1 GPT1是由OpenAI公司发表在2018年要早于我们之前介绍的所熟知的BERT系列文章。总结:GPT 是一种半监督学习,采用两阶段任务模型,通过使用无监督的 Pre-training 和有监督的 Fine-tuning 来实现强大的自然语言理解。在 Pre-t…...

微软Ignite 2024:建立一个Agentic世界!
在今年的Microsoft Ignite 2024上,AI Agent无疑成为本次大会的重点,已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布:企业可以在智能体中,使用Azure目录中1800个LLM中的任何一个模型了! 建立一个Agent…...

windows C#-属性
属性提供了一种将元数据或声明性信息与代码(程序集、类型、方法、属性等)关联的强大方法。将属性与程序实体关联后,可以使用称为反射的技术在运行时查询该属性。 属性具有以下属性: 属性将元数据添加到您的程序中。元数据是有关程序中定义的类型的信息…...