1.浅谈蓝牙BLE的总体框架

这里只展开BLE这一部分,

框图如下所示
蓝牙也是使用分层的结构组织代码。
在这里插入图片描述
Application:是自己的业务逻辑实现的地方。当然应用程序需要根据BLE的规定,实现配置文件(profile)、服务(service)和特征(character)。
Host::这一部分实现蓝牙如何存储和交互数据,也涉及到数据加密的部分
Controller:控制层将蓝牙数据通过无线电发送出去,这一部分是硬件强相关的,且往往是闭源的。nordic的这部分也是闭源。

Controller可以先不研究,一般都挺稳定的,毕竟nordic需要自己负责这部分的稳定性。

Host主机层

  1. 逻辑链路控制和适配协议(L2CAP):向上层提供数据封装服务。
  2. 安全管理器协议 (SMP):定义并提供安全通信的方法。
  3. 属性协议 (ATT):允许一个设备向另一个设备公开某些数据。
  4. 通用属性配置文件(GATT):定义使用ATT层所需的子程序。
  5. 通用访问配置文件 (GAP):直接与应用程序交互以处理设备发现和连接相关的服务。

GATT实现了怎么展示应用层定义的服务。这些交互过程都在这里实现
GAP:主要是设备信息的展示,比如设备名这些。

zephyr的host层实现了上面列出的所有功能。
https://docs.nordicsemi.com/bundle/ncs-latest/page/zephyr/connectivity/bluetooth/bluetooth-arch.html#host

后续开章节详解这部分的API。

控制器层

物理层 (PHY):确定实际数据如何调制到无线电波上,以及如何传输和接收。
链路层 (LL):管理无线电的状态,定义为以下之一 - 待机、广告、扫描、启动、连接。

在NCS里可以使用zephyr自带的控制器。也可以用nordic专门设计的softDevice。

  • 官方是强烈推荐softDevice。因为这能充分发挥nordic芯片的性能。
  • 在蓝牙标准里面也有对控制器统一、标准化、详细的定义,因此zephyr自带的控制器也能控制nordic的BLE部分,不过有些特别的设计就无法实现。这里我还没有详细深入控制器这一块,只知道是这个原理。
  • softDevice的API文档地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/792010.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【话题】开源项目:从边缘到主流的转变之旅

目录 开源项目有哪些机遇与挑战? 前言 宏观视角:开源项目的发展趋势 开源运动,作为一股不可忽视的创新力量,正在重塑全球科技版图。其核心价值在于打破知识的壁垒,推动技术的民主化,让信息与技术不再为少…

C++ :内联函数inline|nullptr

欢迎来到HarperLee的学习笔记! 博主主页传送门:HarperLee博客主页! 欢迎交流学习! 一、inline关键字 1.1 什么是内联函数? 内联函数:用** inline 修饰的函数叫做内联函数,编译时C编译器会在调用…

PostgreSQL行级安全策略探究

前言 最近和朋友讨论oracle行级安全策略(VPD)时,查看了下官方文档,看起来VPD的原理是针对应用了Oracle行级安全策略的表、视图或同义词发出的 SQL 语句动态添加where子句。通俗理解就是将行级安全策略动态添加为where 条件。那么PG中的行级安全策略是怎…

R包:‘ggcharts好看线图包‘

介绍 ggcharts提供了一个高级{ggplot2}接口,用于创建通用图表。它的目标既简单又雄心勃勃:让您更快地从数据可视化的想法到实际的绘图。所以如何?通过处理大量的数据预处理,为您模糊{ggplot2}细节和绘图样式。生成的图是ggplot对象,可以使用…

CTF php RCE(三)

0x07 日志文件包含 判断类型 使用kali curl -I urlF12 打开F12开发者工具,选中之后F5刷新查看server类型即可 配置文件 直接包含或者访问如果有回显就是, NGINX:NGINX 的配置文件通常位于 /etc/nginx/ 目录下,具体的网站配…

【深度学习入门篇 ④ 】Pytorch实现手写数字识别

【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

LLMs可以进行任务规划吗?如果不行,LLMs+GNN可以吗?

深度图学习与大模型LLM(小编): 大家好,今天向大家介绍一篇最新发布的研究论文(20240530)。这篇论文探讨了如何通过引入GNN来提高大模型在任务规划(task planning)中的性能。*论文分析了LLMs在任务规划上的局限性,并提出了一种简单而有效的解决方案。* 1.…

VIM模式之间的切换

命令行界面下,常用的文本编辑器是 VI / VIM(VI增强版),VI 是 Linux 最通用的文本编辑器,VIM相较于VI,提供了代码高亮等功能,两者用法完全兼容; 1. 进入 VIM 工作界面 vim 文件名 2. 进入编辑模式 三种方…

深入分析与解决4.3问题:iOS应用版本更新审核被拒原因解析

深入分析与解决4.3问题:iOS应用版本更新审核被拒原因解析 在iOS应用开发和发布过程中,遇到4.3问题(设计 - 垃圾邮件)是一个常见且令人头疼的情况。即使您的应用已成功发布其第一个版本,但在进行版本更新时&#xff0c…

【React Hooks原理 - useState】

概述 useState赋予了Function Component状态管理的能力,可以让你在不编写 class 的情况下使用 state 。其本质上就是一类特殊的函数,它们约定以 use 开头。本文从源码出发,一步一步看看useState是如何实现以及工作的。 基础使用 function …

数据结构day6链式队列

主程序 #include "fun.h" int main(int argc, const char *argv[]) { que_p Qcreate(); enqueue(Q,10); enqueue(Q,20); enqueue(Q,30); enqueue(Q,40); enqueue(Q,50); show_que(Q); dequeue(Q); show_que(Q); printf(&qu…

小程序复制功能不可用 setClipboardData:fail no permission

先上图 用户协议剪切板也更新但是依旧报错了 最后在公众平台通知里发现是用户之前小程序有规格被封禁了该功能

【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)

目录: 目录: 一、什么是openssl? 二、所需要具备的开发工具 三、Windows上编译OpenSSL3.0 四、Linux编译openssl3.0 一、什么是openssl? OpenSSL 是一个开源的软件库,它提供了一系列加密工具和协议,主要用…

apple watch程序出错 Cannot launch apps while in nightstand mode

开发的时候运行apple watch程序出错: ailure Reason: The request was denied by service delegate (IOSSHLMainWorkspace) for reason: Busy ("Cannot launch apps while in nightstand mode"). 这是因为: 将Apple Watch放在充电器上并直立…

Python 处理文件的读写操作

Python 提供了丰富的文件读写操作,可以轻松处理文本文件和二进制文件。以下是关于 Python 文件读写操作的详细讲解,包括打开文件、读取文件、写入文件、文件指针操作、文件关闭和异常处理等方面。 一、文件的打开和关闭 在对文件进行读写操作之前&…

喜讯|华院计算法律大模型入围《2024大模型典型示范应用案例集》

2024年世界人工智能大会(WAIC)举办期间,中国信通院正式发布了《2024大模型典型示范应用案例集》(以下简称《案例集》)。该案例集由中国信通院华东分院、上海人工智能实验室主导,以产业化为导向,…

探索IP形象设计:快速掌握设计要点

随着市场竞争的加剧,越来越多的企业开始关注品牌形象的塑造和推广。在品牌形象中,知识产权形象设计是非常重要的方面。在智能和互联网的趋势下,未来的知识产权形象设计可能会更加关注数字和社交网络。通过数字技术和社交媒体平台,…

Java 中的泛型(超全详解)

一、泛型概述 1. 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参列表,普通方法的形参列表中,每个形参的数据类型是确定的,而变量是一个参数。在…

VS2022 git拉取/推送代码错误

第一步:打开VS2022 第二步:工具->选项->源代码管理->Git 全局设置 第三步:加密网络提供程序设置为:OpenSSL 完结:

函数式接口、匿名内部类、lambda表达式

一、函数式接口 只有一个抽象方法的接口叫函数式接口,不能有两个,也不能有方法实现。 FunctionalInterface注解标记,在idea中可以用这个注解验证是不是函数式接口。实现函数式接口可以转成lambda表达式。 二、匿名内部类 匿名内部类的格式&a…