蓝牙4.0BLE学习之协议栈

合集下载

BLE4.0教程一蓝牙协议连接过程与广播分析

BLE4.0教程一蓝牙协议连接过程与广播分析

BLE4.0教程⼀蓝⽛协议连接过程与⼴播分析1.蓝⽛简介什么是蓝⽛4.0蓝⽛⽆线技术是使⽤范围最⼴泛的全球短距离⽆线标准之⼀,蓝⽛4.0版本涵盖了三种蓝⽛技术,即传统蓝⽛、⾼速蓝⽛和低功耗蓝⽛技术,将三种规范合⽽为⼀。

它继承了蓝⽛技术在⽆线连接上的固有优势,同时增加了⾼速蓝⽛和低功耗蓝⽛的特点。

这三个规格可以组合或者单独使⽤。

蓝⽛4.0规范的核⼼是低功耗蓝⽛(Low Energy),即蓝⽛4.0BLE。

该技术最⼤特点是拥有超低的运⾏功耗和待机功耗,蓝⽛低功耗设备使⽤⼀粒纽扣电池可以连续⼯作数年之久。

蓝⽛4.0技术同时还拥有低成本、向下兼容、跨⼚商互操作性强等特点。

蓝⽛4.0 BLE的特点蓝⽛4.0 BLE技术具有如下特点:1.⾼可靠性对于⽆线通信⽽⾔,由于电磁波在传输过程中容易受很多因素的⼲扰,例如,障碍物的阻挡、天⽓状况等。

因此,⽆线通信系统在数据传输过程中,具有内在的不可靠性。

蓝⽛技术联盟(SIG)在制定蓝⽛4.0规范时已经考虑到了这种数据传输过程中的内在的不确定性,所以在射频、基带协议、链路管理协议(LMP)中采⽤可靠性措施,包括:差错检测和校正、进⾏数据编解码、差错控制、数据加噪等,极⼤地提⾼了蓝⽛⽆线数据传输的可靠性。

另外,使⽤⾃适应跳频技术,最⼤程度地减少和其他2.4GHz ISM频段⽆线电波的串扰。

2.低成本、低功耗低功耗蓝⽛⽀持两种部署⽅式:双模⽅式和单模⽅式。

(1)双模⽅式,低功耗蓝⽛功能集成在现有的经典蓝⽛控制器中,或在现有经典蓝⽛技术(2.1+EDR/3.0+HS)芯⽚上增加低功耗堆栈,整体架构基本不变,因此成本增加有限。

(2)单模⽅式,⾯向⾼度集成、紧凑的设备,使⽤⼀个轻量级连接层(Link Layer)提供超低功耗的待机模式操作。

蓝⽛4.0BLE技术可以应⽤于8bit MCU,⽬前TI公司推出的兼容蓝⽛4.0BLE协议的SoC芯⽚CC2540/CC2541,外接PCB天线和⼏个阻容器件构成的滤波电路即可实现蓝⽛⽹络节点的构建。

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

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

本系列教程将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。

教程共分为六部分,本文为第五部分:第五部分知识点:第二十一节 DHT11温湿度传感器第二十二节蓝牙协议栈之从机通讯第二十三节蓝牙协议栈主从一体之主机通讯第二十四节 OAD空中升级第二十五节 SBL串口升级有关TI 的CC254x芯片介绍,可点击下面链接查看:主流蓝牙BLE控制芯片详解(1):TI CC2540同系列资料推荐:由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1)由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2)由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(4)有关本文的工具下载,大家可以到以下这个地址:朱兆祺ForARM第二十一节 DHT11温湿度传感器DHT11简介DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。

传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

每个DHT11传感器都在极为精确的湿度校验室中进行校准。

校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。

单线制串行接口,使系统集成变得简易快捷。

超小的体积、极低的功耗,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。

产品为4针单排引脚封装,连接方便。

技术参数供电电压: 3.3~5.5V DC输出:单总线数字信号测量范围:湿度20-90%RH,温度0~50℃测量精度:湿度+-5%RH,温度+-2℃分辨率:湿度1%RH,温度1℃互换性:可完全互换,长期稳定性: < ±1%RH/年DHT11 数字湿温度传感器采用单总线数据格式。

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

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

深入浅出低功耗蓝牙(BLE)协议栈低功耗蓝牙(BLE)协议栈是一种用于低能耗设备间通信的无线通信技术。

它主要用于物联网设备、传感器和其他低功耗设备之间的通信。

本文将深入浅出地介绍BLE协议栈的工作原理和主要组件,以及其在物联网和其他领域的应用。

BLE协议栈由多个层级组成,包括物理层(PHY)、链路层(LL)、主机控制器接口(HCI)、主机层(Host)和应用层(Application)。

每个层级负责不同的功能,并通过各自的接口与上下层通信。

物理层是BLE协议栈的最底层,负责将数据转化为无线信号进行传输。

BLE使用2.4GHz频段进行通信,采用频率跳变技术来抵抗干扰和提高传输稳定性。

链路层建立在物理层之上,负责处理与设备之间的连接和数据传输。

它包括广播(Advertisement)和连接(Connection)两种传输模式。

广播模式用于设备之间的发现和配对,而连接模式用于实际的数据传输。

主机控制器接口(HCI)是链路层与主机层之间的接口,负责传输控制命令和事件信息。

主机层负责处理设备的连接管理、数据传输和高层协议等任务。

应用层则是最上层,负责处理具体的业务逻辑和应用程序。

BLE协议栈的工作流程一般分为广播、扫描、连接和数据传输四个阶段。

在广播阶段,设备会周期性地发送广播包,以便其他设备发现和连接。

扫描阶段是其他设备主动并发现正在广播的设备。

连接阶段是建立起连接后的设备之间进行数据传输。

数据传输阶段则是实际进行数据交换的阶段。

BLE协议栈的优势在于其低功耗、简单易用和成本低廉。

它适用于大量的物联网设备,如健康追踪器、智能家居设备等。

同时,BLE协议栈也在其他领域有着广泛的应用,例如无线鼠标、键盘、耳机等。

总之,低功耗蓝牙(BLE)协议栈是一种用于低能耗设备间通信的无线通信技术,具有低功耗、简单易用和成本低廉等优势。

它在物联网和其他领域有着广泛的应用,为设备间的通信提供了可靠和高效的解决方案。

NORDIC蓝牙BLE4.0方案SDK例子ANCS代码分析

NORDIC蓝牙BLE4.0方案SDK例子ANCS代码分析

NORDIC蓝牙BLE4.0方案SDK例子ANCS代码分析参考:SDK11.0.0nRF5_SDK_11.0.0_89a8197\examples\ble_peripheral\ble_app_ancs_c1. 主函数下面结合上面的函数慢慢展开讲解。

2. 宏定义3. 定时器ti mers_init如下图3.1. APP_TIMER_APPSH_INT宏Nordic的定时器是通过RTC1模拟出了一个定时器时钟队列,所以在初始化时需要传入的参数有两个:APP_TIMER_PRESCALER:时钟分频APP_TIMER_OP_QUEUE_SIZE:timer的队列第3个参数是是否启动调度,这里true表示启用任务调度。

也就是说会调用app_timer_evt_schedule函数进行时间任务调度,后面会讲解。

上面的初始化时使用的宏,那么真正的初始化函数是:上面又是一个宏进行封装的,实体如下:不继续向下分析了,到这定时器就初始化完毕了。

截取SDK说明文档中的说明吧!3.2. 定时器创建app_timer_create定时器创建函数如下:这里定时器句柄是通过宏进行定义的:这个宏的函数原型是:上面的“##” 表示连接前后的字符,也就是上面的宏表示static app_timer_t m_sec_req_timer_id_data= { {0} }; \static const app_timer_id_t timer_id = &m_sec_req_timer_id_data;实际上这个宏就是定义个两个变量。

3.3. 回调函数sec_req_timeout_handler回调函数的作用,从名字上看的话,这个回调函数应该与安全管理有关,那么到底什么关系呢?我们知道ANCS服务必须是在配对绑定启动加密之后才能进行服务的,也就是必须进行配对绑定,然而配对就必须通过安全管理进行,所以这个回调函数是从机启动加密请求,然而为啥又通过定时器进行控制呢?这里只有当连接建立之后进行一次调用,所以在创建定时器时使用的APP_TIMER_MODE_SINGLE_SHOT参数,为什么需要用定时器,因为刚刚建立连接时需要给双方一定的缓冲时间,在后面启动定时器时会传入定时时间的。

BLE4.0教程二蓝牙协议之服务与特征值分析

BLE4.0教程二蓝牙协议之服务与特征值分析

BLE4.0教程⼆蓝⽛协议之服务与特征值分析1.关于服务与特征值的简述之前说到蓝⽛的连接过程,那蓝⽛连接之后具体是如何传数据的呢。

这⾥做⼀下简要说明。

蓝⽛4.0是以参数来进⾏数据传输的,即服务端定好⼀个参数,客户端可以对这个参数进⾏读,写,通知等操作,这个东西我们称之为特征值(characteristic),但⼀个参数不够我们⽤,⽐如我们这个特征值是电量的值,另⼀个特征值是设备读取的温度值。

那这时候会有多个特征值,并且我们还会对它们分类,分出来的类我们称之为服务(service)。

⼀个设备可以有多个服务,每⼀个服务可以包含多个特征值。

为了⽅便操作,每个特征值都有他的属性,例如长度(size),权限(permission),值(value),描述(descriptor),如下图。

2.ATT与GATT我们刚才介绍服务与特征值,那具体我们是怎么去实现的呢.蓝⽛4.0版本推出了低功耗规范,引⼊了两个核⼼协议:ATT(Attribute Protocol)和GATT(Generic Attribute Protocol).这两个协议主要⽬标是BLE,但是也可以运⾏在传统蓝⽛上(BR/EDR)。

ATT主要是规定了"属性"的定义,GATT则是将这些"属性"包装成我们上⾯所讲的服务、特征值等。

那我们是怎么搭建起来我们的服务的呢?⼤概可以概述为,由⼀个个属性搭建起来的东西。

如下图,每⼀个属性就会告诉使⽤者说,我是什么,我带有什么,你能对我做什么,即描述,值,权限序号描述权限值属性1我是服务A的开头只读服务号0001属性2我是特征值1的开头只读特征值1的值放在属性3⾥特征值1的值类型特征值1的值权限属性3我是特征值1的值/0属性4我是特征值1的特殊操作读写关闭属性5我是特征值2的开头只读…属性6我是特征值2的值/…属性7我是特征值2的特殊操作读写…属性8我是服务B的开头只读服务号0002上图是⼀个简单的表述,真正的属性表如下图。

BLE协议栈配对过程

BLE协议栈配对过程

BLE配对根据4.0.协议中相关文档的顺序从安全管理(SECURITY MANAGER)、安全管理协议SMP(SECURITY MANAGER PROTOCOL)和消息序列流程图(MESSAGE SEQUENCE CHARTS)这三个方面进行论述。

具体内容见Volume3part H一、安全管理2.1介绍配对是一个三阶段的过程。

前两个阶段总是使用,可能跟随着一个可选的传输特定秘钥分配的阶段。

阶段1:配对特征交换阶段2:短期秘钥(STK)生成阶段3:传输特定秘钥分配设备首先在配对特征交换阶段交换IO能力来决定在第二阶段使用下面哪种方法:Just Works:只工作Passkey Entry:输入密码Out Of Band(OOB):带外可选的,第三阶段将执行来分配传输特定秘钥,例如长期秘钥(LTK)和加密多样化(EDIV)值。

无论过程2用哪种方法过程1和3都是一致的。

过程3只在使用第二阶段生成的STK加密的链路上执行。

阶段1和2可以在加密或未加密的链路上执行。

2.1加密工具箱加密函数:1、ah用来创建在随机地址创建和解析中使用的24位哈希码。

2、c1用来生成在配对过程中使用的确认值3、s1用来在配对过程中生成STK基于上述加密功能的建筑块就是安全函数e。

2.2.1安全函数e安全函数e使用AES分组密码生成128位的密文和128位的明文。

encryptedData=e(key,plaintextData)注意:安全函数e能在主机中实现或使用HCI_LE_Encrypt命令实现。

2.1.2随机地址哈希函数ah函数ah用来生成在可解析私有地址中使用的哈希值。

函数ah的输入:128位k,24位r,104位padding参数r和padding级联生成r’,r’作为向函数e提供的128位输入参数明文。

r’=padding||rr最不重要的字节变成r’中最不重要的字节,padding最重要的字节变成最重要的字节。

BLE协议栈——UARTDMA工作方式

BLE协议栈——UARTDMA工作方式

BLE协议栈——UARTDMA工作方式BLE(蓝牙低功耗)协议栈是一种用于无线通信的协议,并且非常利于低能耗的设备之间的通信,如物联网设备。

BLE协议栈包含了多个层次的协议,其中包括物理层、链路层和主机控制器接口层等。

在BLE协议栈中,UARTDMA(串口直接内存访问)是一种常见的工作方式,下面我们将详细介绍UARTDMA的工作原理和流程。

UARTDMA是一种使用DMA技术进行数据传输的串口通信方式。

DMA(直接内存访问)是一种用于高速数据传输的技术,其通过在外设和内存之间建立直接的数据通路,减少了处理器的介入,提高了数据传输的效率。

在UARTDMA工作方式下,首先需要初始化DMA控制器和串口控制器。

DMA控制器负责管理数据在内存和外设之间的传输,而串口控制器负责串口的配置和数据的发送和接收。

在数据发送过程中,首先将要发送的数据写入到内存缓冲区中。

然后,通过配置DMA控制器的相关寄存器,将内存缓冲区的地址设置为源地址,将串口数据寄存器的地址设置为目的地址,并设置数据长度。

当DMA控制器检测到数据发送请求时,会自动将数据从内存缓冲区传输到串口数据寄存器中,并通过串口发送出去。

在数据接收过程中,首先配置DMA控制器,将串口数据寄存器的地址设置为源地址,将内存缓冲区的地址设置为目的地址,并设置数据长度。

当DMA控制器检测到数据接收请求时,会自动将数据从串口数据寄存器中传输到内存缓冲区中。

UARTDMA工作方式的主要优点是降低了CPU的负载,提高了数据传输的效率。

由于DMA可以在不影响CPU的情况下进行数据传输,所以CPU可以将更多的时间用于其他任务处理,提高了系统的性能。

然而,UARTDMA工作方式也存在一些局限性。

首先,由于DMA的使用需要占用一部分系统资源,所以在资源有限的嵌入式系统中可能无法使用。

其次,在数据传输过程中,如果DMA控制器和串口控制器之间没有很好的同步机制,可能会导致数据传输错误或数据丢失的问题。

蓝牙协议详解(4.0 5.0)

蓝牙协议详解(4.0 5.0)

蓝牙协议分析讲解(BT1.1-5.0)本文通过以下大纲,扩展讲解蓝牙协议规范。

蓝牙协议分析详解大纲(BT 1.1~5.0)一、蓝牙的概述(一)蓝牙版本信息(二)典型蓝牙与BLE蓝牙对比(三)蓝牙的技术特点(四)Bluetooth的系统构成二、蓝牙协议规范(一)传输协议、中介协议、应用协议(二)蓝牙协议栈三、硬件接口四、蓝牙协议规范(射频、基带链路控制、链路管理)五、蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)一、蓝牙的概述(一)蓝牙版本信息蓝牙版本主要有1.1/1.2/2.0/2.1/3.0/4.0/5.01. 1.1版本传输率约在748~810kb/s,因是早期设计,容易受到同频率之产品所干扰下影响通讯质量。

2. 1.2版本同样是只有748~810kb/s 的传输率,但在加上了(改善Software)抗干扰跳频功能。

3. 2.0+EDR版本是1.2的改良提升版,传输率约在1.8M/s~2.1M/s,开始支持双工模式——即一面作语音通讯,同时亦可以传输档案/高质素图片,2.0 版本当然也支持Stereo 运作。

应用最为广泛的是Bluetooth2.0+EDR标准,该标准在2004年已经推出,支持Bluetooth 2.0+EDR标准的产品也于2006年大量出现。

虽然Bluetooth 2.0+EDR标准在技术上作了大量的改进,但从1.X标准延续下来的配置流程复杂和设备功耗较大的问题依然存在。

4. 2.1版本更佳的省电效果:蓝牙2.1版加入了SniffSubrating的功能,透过设定在2个装置之间互相确认讯号的发送间隔来达到节省功耗的目的。

5. 3.0+HS版本2009年4月21日,蓝牙技术联盟(Bluetooth SIG)正式颁布了新一代标准规范”Bluetooth Core Specification Version 3.0 High Speed”(蓝牙核心规范3.0版),蓝牙3.0的核心是”GenericAlternate MAC/PHY”(AMP),这是一种全新的交替射频技术,允许蓝牙协议栈针对任一任务动态地选择正确射频。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在线学习好工作/
蓝牙4.0BLE学习之协议栈
蓝牙4.0BLE协议栈介绍
问题:什么是BLE协议栈?BLE协议栈与BLE协议的关系?
顾名思义,人类之间需要一种语言才能沟通,机器之间,电子之间也有一个标准,也就是作为通讯标准,也就是通讯协议。

协议:定义了一系列通讯标准,通讯双方都按照这一标准,进行数据通讯。

协议栈:协议的具体实现形式,实现的函数库,固件库。

把个个协议集合到了一起,以函数库的形式实现,并用这些给用户提供一些应用层的API接口,用户可以进行一些调度。

问题:如何使用BLE协议栈进行开发?
三个步骤:
1.不需要具体了解BLE协议栈的具体复杂的过程,只需要知道它的数据从哪里来,需要到哪里去就行了。

2.根据BLE协议栈调用它里面的函数,实现自己的一些功能。

3.可以自己编写一些函数,实现自己需要特定的功能。

协议结构图
第一层:physicallayer(物理层)
信道带宽提供2M,提供三个广播信道1M。

第二层:link layer(链路层)
执行一些基带协议,底层的数据包管理协议。

第三层:host controller interface (主机控制接口层)
提供主机与控制层的通讯方式,以及命令格式,重用蓝牙标准,比如一些串口,USB等等。

第四层:L2CAP(逻辑链路于适配器协议层)
为它上层提供数据业务,提供端到端的逻辑数据通信。

第五层:security manager(SM)安全管理层
层与层之间会有通信,它是建立数据交换安全方面的数据知识。

第六层:attribute protocol(ATT)通用接入层
定义了一些通用接口,供应用层和底层之间的调用,比如你要调底层的硬件模块的东西,就需要这个层的底层的驱动模块去实现它的一些功能,所以它会同时封装一些API的函数设置。

第七层:generic attribute profile(GATT)(属性协议层)
允许设备以属性的形式向外设备暴露它的一些数据,就像广播者与观察者之间,它一直在广播自己的属性,数据出去。

观察者观察到了它以后就可以把它的属性提取出来。

第八层:generic access profile(GAP)通用属性剖面
具体属性协议的应用框架,应用了属性协议的应用架构,通过这个层,可以在里面开发一些应用的东西,这里做好了一些应用的框架,可以在上面写一些开发。

文章来源:麦子学院
原文链接:/wiki/bluetooth/stack/。

相关文档
最新文档