c# 蓝牙虚拟串口_蓝牙模块——基础知识介绍

1. 数据透传

蓝牙模块可以通过串口(SPI、IIC)和MCU控制设备进行数据传输。

04140ff3e64084c9edccc0fb2d0f038c.png

蓝牙模块可以做为主机和从机。主机就是能够搜索别的蓝牙模块并主动建立连接,从机则不能主动建立连接,只能等别人连接自己。

2. 低功耗

低功耗蓝牙(Bluetooth Low Energy),简称BLE。蓝牙低能耗无线技术利用许多智能手段最大限度地降低功耗。

蓝牙低能耗架构共有两种芯片构成:单模芯片和双模芯片。蓝牙单模器件是蓝牙规范中新出现的一种只支持蓝牙低能耗技术的芯片——是专门针对ULP操作优化的技术的一部分。蓝牙单模芯片可以和其它单模芯片及双模芯片通信,此时后者需要使用自身架构中的蓝牙低能耗技术部分进行收发数据。双模芯片也能与标准蓝牙技术及使用传统蓝牙架构的其它双模芯片通信。

0c311b791cbf880fb5f13d5fa581f3c0.png

按应用分为:

可分为数据蓝牙模块和语音蓝牙模块,前者完成无线数据传输,后者完成语音和立体声音频的无线数据传输。

3. 蓝牙协议组成

1716cd8be9f143af7c91980de564b0f4.png

蓝牙协议体系中的协议按SIG的关注程度分为四层:

  1. 核心协议:BaseBand、LMP、L2CAP、SDP;

  2. 电缆替代协议:RFCOMM;

  3. 电话传送控制协议:TCS-Binary、AT命令集;

  4. 选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。

除上述协议层外,规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1中,HCI位于L2CAP的下层,但HCI也可位于L2CAP上层。

蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。

4. 蓝牙基本架构

eba8c6f098631df9bdc58b531e03cdbf.png

4.1 底层硬件模块

(1)无线射频模块(Radio): 蓝牙最底层,带微带天线,负责数据接收和发送。

(2)基带模块(BaseBand): 无线介质访问约定。提供同步面向连接的物理链路(SCO)和异步无连接物理链路(ACL),负责跳频和蓝牙数据及信息帧传输,并提供不同层次的纠错功能(FEC和CTC)。

(3)链路控制模块(LC): 蓝牙数据包的编码和解码。

(4)链路管理模块(LM) :负责创建、修改和发布逻辑链接,更新设备间物理链接参数,进行链路的安全和控制。

(5)主机控制器接口(HCI): 是软硬件接口部分,由基带控制器、连接管理器、控制和事件寄存器等组成;软件接口提供了下层硬件的统一命令,解释上下层消息和数据的传递。硬件接口包含 UART、SPI 和 USB 等。

2. 中间协议层

(1)逻辑链路控制与适配协议(L2CAP): 蓝牙协议栈的基础,也是其他协议实现的基础。向上层提供面向连接和无连接的数据封装服务;采用了多路技术、分割和重组技术、组提取技术来进行协议复用、分段和重组、认证服务质量、组管理等行为。

(2)音视频发布传输协议(AVDTP)和音视频控制传输协议(AVCTP): 二者主要用于 Audio/Video 在蓝牙设备中传输的协议,前者用于描述传输,后者用于控制信号交换的格式和机制。

(3)服务发现协议(SDP): 蓝牙技术框架至关重要一层,所有应用模型基础。动态的查询设备信息和服务类型,建立一条对应的服务通信通道,为上层提供发现可用的服务类型和属性协议信息。

(4)串口仿真协议(RFCOMM): 实现了仿真 9 针 RS232 串口功能,实现设备间的串行通信。

(5)二进制电话控制协议(TCS): 基于 ITU-T Q.931 建议的采用面向比特的协议,它定义了用于蓝牙设备之间建立语音和数据呼叫的控制信令(Call Control Signalling),并负责处理蓝牙设备组的移动管理过程。

3. 蓝牙Profile

Bluetooth Profile 是蓝牙设备间数据通信的无线接口规范。目前有四大类、十三种协议规则,厂商可以自定义规格。几种最常见的 Profile 文件:

(1)通用访问配置文件(GAP): 其他所有配置文件的基础,定义了在蓝牙设备间建立基带链路的通用方法,并允许开发人员根据 GAP 定义新的配置文件。包含所有蓝牙设备实施的功能,发现和连接设备的通用步骤,基本用户界面等通用操作。

(2)服务发现应用配置文件(SDAP): 描述应用程序如何用 SDP 发现远程设备服务,可与向/从其他蓝牙设备发送/接收服务查询的 SDP 连接。

(3)串行端口配置文件(SPP): 基于 ETSI TS 07.10 规格定义如何设置虚拟串行端口及如何连接两个蓝牙设备。速度可达 128kb/s。

(4)通用对象交换配置文件(GOEP): 可以将任意对象(如图片、文档等)从一个设备传输到另一个设备。

5. 蓝牙协议栈层次

5afbc147dd52a418ee24fcbd7a908b1e.png

5.1. 物理层(PHY):

射频传输。

5.2. 链路层(LL):

控制射频状态,包括等待、广告、扫描、初始化、连接。

5.3. 主机控制接口层(HCI):

主机和控制器通信接口。

5.4. 逻辑链路控制及适配协议层(L2CAP):

提供数据封装服务,允许逻辑上点对点通信。

5.5. 安全管理层(SM):

加解密,为安全连接和数据交换提供服务。

5.6. 属性协议层(ATT):

允许设备(服务器)向另一个设备(客户端)展示特定的数据(属性)。

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

定义了使用ATT的服务框架,两个建立连接的设备之间的所有数据通信都是通过GATT子程序处理。

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

对所有蓝牙设备提供共同的功能,如传输模式和访问程序、协议和应用描述。GAP服务包含设备发现、连接模式、安全、认证、联合模型和服务发现。

6. 蓝牙传输过程

6.1. 主从机建立过程

f57c136792786246131aea8cca50d6d4.png

6.2. 主从通信透传模块

分为主透传协议模块(MTTM)和从透传协议模块(STTM)。

MTTM可以工作在透传模式(TTM)和指令模式(CM),工作如下:用户通过AT指令控制模块连接从设备。在成功建立链接后,MTTM自动查找从设备的透传通道,如果从设备属于STTM,MTTM默认进入TTM,否则进入CM。

透传模式,目的是实现透传或直驱控制功能,主机CPU可以通过通用串口模块与STTM双向通信,MTTM直接将数据转发给STTM,再从STTM串口输出到从机CPU。反向亦可。

参考:

1.SKYLAB_无线模块的博客

2.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1)

3. 蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)

4.通识蓝牙低功耗

5. nrf51822蓝牙笔记之GAP(通用属性配置文件)解读

6.蓝牙的初见初识

7.蓝牙协议分析(5)_BLE广播通信相关的技术分析

8.Bluetooth LE(低功耗蓝牙) - 第一部分

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Error: could not open `C:\Java\jre7\lib\i386\jvm.cfg

打开eclipse时出现Error: could not open C:\Program Files\Java\jre7\lib\i586\jvm.cfg’) 删除 c:\windows\system32\java, c:\windows\system32\javaw, c:\windows\system32\javaws, 如果是64位系统,还要删除 c:\windows\SysWOW64\java&am…

java项目001.双色球游戏

package Suangseq; //双色球游戏制作。 import java.awt.SystemColor; import java.util.Arrays; import java.util.Scanner; public class TextA { public static void main(String[] args) { boolean flagfalse;//定义一个布尔类型的变量。 int[] mynull;//定义一个变量 in…

华为手机30s桌面循环滑动_华为发飙了!麒麟820+双模5G,从2699元跌至2499元,超出消费者预期...

阅读本文前,请您先点击上面的“蓝色字体”,再点击“关注”,这样您就可以继续免费收到文章了。每天都会有分享,都是免费订阅,请您放心关注。注图文来源网络,侵删 …

混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集...

其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的System.Data.Sqli…

mysql008where.or.in查询

-- 创建EMP表 CREATE TABLE EMP ( EMPNO int(4) PRIMARY KEY, ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT(4), HIREDATE DATE, SAL DOUBLE(7,2), COMM DOUBLE(7,2), DEPTNO INT(2) ); -- where查询 语句 SELECT * from emp; SELECT * FROM DEPT; SELECT * FROM…

微信接口请求次数_接口签名验证常用方案

前面的文章说了接口数据如何获取,今天就来聊聊接口数据的安全问题。说到接口加密验证,通常都称作“签名”,类似于名人的个性签名,让其它人无法模仿。比如说请求接口删除自己写的文章,又或者请求接口查询自己的帐单明细…

mysql009模糊查询like.是否为null

-- 创建EMP表 CREATE TABLE EMP ( EMPNO int(4) PRIMARY KEY, ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT(4), HIREDATE DATE, SAL DOUBLE(7,2), COMM DOUBLE(7,2), DEPTNO INT(2) ); -- where查询 语句 SELECT * from emp; -- 模糊查询 -- 搜索emp表中还有A的…

28335接两个spi设备_SPI浅析

01 SPI简介SPI,全称为Serial Peripheral interface,即串行外围设备接口。由摩托罗拉率先在产品上使用。SPI是一种高速全双工,同步(full duplex synchronous)的通信总线协议,且占用硬件端口只有4个(SO,SI, SCLK 和CSN),所以出于这…

java mongo 获取所有数据库_Spring Batch —从XML读取并写入Mongo

Java面试必备之JVMGC教程这几天闲着在优锐课的java学习必备中学习了,在本文中,了解如何使用Spring Batch通过StaxEventItemReader使用ItemReader读取XML文件并将其数据写入NoSQL。在本文中,我们将向展示如何使用Spring Batch使用StaxEventIte…

001多表查询.交叉链接cross JOIN.自然链接natural JOIN.using链接.on链接

-- 需求:查询每一个员工信息,并且显示每一个员工所在的部门名称 -- mysql中多表查询有四种,交叉链接cross JOIN,自然链接natural JOIN,using链接,on链接 -- 交叉链接cross JOIN SELECT * FROM emp; --6…

华菱重卡仪表指示说明_新一代创虎重卡登场!LNG车型将配玉柴燃气发动机

2020年10月23日,现代商用车新一代创虎重卡正式发布,此次新车不仅外观与韩国本土同步,更是首次搭载了国产玉柴动力,推出了LNG版车型。具体情况我们先抢先看看吧!外观升级 与韩国本土同步我们可以看到,相比此…

mysql002多表查询.on链接分为三种情况,左链接,右链接,全链接

-- on链接(最实用),分为三种情况,左链接,右链接,全链接 -- 左外链接,左表全部显示,如果匹配不到右表的内容使用null代替。 SELECT * FROM emp e LEFT JOIN dept d ON e.DEPTNOd.DE…

x轴z轴代表的方向图片_游戏中到底是Z轴朝上还是Y轴朝上?

本文转自我的公众号——游戏开发那些事在谈到游戏世界中的坐标轴时,我们经常会看到这样的争论。“游戏中Y轴是向上的好么?这你都不知道?”“不对,空间直角坐标系不就是Z轴向上的么?”“拜托,请搞清楚坐标系…

补发《超级迷宫》站立会议三

那天我给自己的任务是实现控件的控制,但结果明显很不理想,我仅仅加载了两个控件(即两个小人),一个是玩家,另一个是守关者,玩家控制基本实现,通过方向键进行控制;但守关者…

mysql003三表查询.三表查询.自链接查询

-- 多表查询 三表查询 -- 查询员工的编号,姓名,薪水,部门编号,部门名称,薪水等级 -- 可以先两表查询,在修改成三表查询 -- 第一行查询的内容,第二,三行查询需要的表, -- 和条件…

hook xposed 自定义类_【开始学习React Hook(1)】Hook之useState

react hook是react推出的一种特殊函数。这些函数可以让你在不创建react class的情况下依然可以使用react的一些特性(诸如目前react的钩子函数拥有的所有特性)。最常用的hook有useState, useEffect, 日常开发使用这两个就足够了。如果再懂点useReduer, us…

mysql004子查询.相关子查询.不相关子查询

子查询:相关子查询,不相关子查询 -- 不相关子查询 -- 一条SQL语句含有多个select,先执行子查询,在执行外部查询。子查询可以独立运行,成为不相关子查询。 -- 需求1:查询所有比姓名为“CLARK”工资高的员工的信息。 …

文件无刷新上传(swfUpload与uploadify)

文件无刷新上传并获取保存到服务器端的路径 遇到上传文件的问题,结合之前用到过的swfUpload,又找了一个无刷新上传文件的jquery插件uploadify,写篇博客记录一下分别介绍这两个插件的实现方法 swfUpload 导入swfUpload的开发包 添加js引用&am…

ediplus 复制编辑一列_vi编辑器的使用详解

一个编辑器具备的功能一个编辑器(例如Windows中的记事本)具备的功能:打开文件、新建文件、保存文件光标移动文本编辑(多行间|多列间)复制、粘贴、删除查找和替换vi编辑器的环境设置为了更方便的使用vi编辑器,我们需要先对vi编辑器进行一些配置。打开虚拟…

myjdbc链接数据库.增删改查

-- 创建user表 CREATE TABLE user( uid int PRIMARY KEY auto_increment, uname VARCHAR(55), pwd VARCHAR(55), realName VARCHAR(55) ) SELECT * FROM user; Jdbc增删改查 package myjdbc; import java.sql.Connection; import java.sql.DriverManager; import java.…