蓝牙4.0BLE学习之协议栈
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)
本系列教程将结合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协议栈由多个层级组成,包括物理层(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代码分析参考: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教程⼆蓝⽛协议之服务与特征值分析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配对根据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(蓝牙低功耗)协议栈是一种用于无线通信的协议,并且非常利于低能耗的设备之间的通信,如物联网设备。
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)
蓝牙协议分析讲解(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),这是一种全新的交替射频技术,允许蓝牙协议栈针对任一任务动态地选择正确射频。
BLE LinkLayer协议分析笔记_v0
BLE LinkLayer协议分析一、概述1.1.背景蓝牙无线技术是一种短距离的通信技术。
BLE,Bluetooth Low Energy是蓝牙技术联盟SIG新推的一代蓝牙技术标准(蓝牙4.0)中的一种低功耗工作模式。
当前iOS和Andriod 4.3以上系统(含4.3)对其都能够支持,尤其是iOS,对BLE更是能够完美的支持。
除BLE外,蓝牙4.0还主推了BR(Basic Rate)工作模式,以及BR的演进版本的EDR 和AMP工作模式。
与BLE相比,它们能够支持更高的传输速率,但也有更大的功耗。
本文档只关注BLE。
BLE是传统蓝牙技术的演进,它除了继承了传统蓝牙的特性外,还行引入了高速和低功耗特性。
其中高速仅是相对而言,最高速率为1Mbps(该取值为物理层支持的最高速率,实际传输速率应该小于该速率)。
BLE使用的频带为2.4GHz,具体频段为2400~2483.5MHz,共计划分为40个无线信道,每个无线信道带宽为2MHz。
BLE主要有以下特点,●高可靠性●低成本低功耗●快速启动,3ms(传统蓝牙需要6s)●传输距离大,100m传统蓝牙为10m)●高安全性●低数据速率(1Mbps)1.2. BLE 网络模型BLE 可用于点对点和点对多点的网络,如下图所示,用于点对点通信场景时,BLE 终端分为Master 和Slave ,Master 负责对整个通信过程的维护和控制。
用于点对多点的网络时,BLE 终端分为Advertiser 、Scanner 和Initializer 。
Advertiser 为主动进行周期性广播信息的BLE 终端。
Scanner 为接收广播信息的BLE 终端,其可主动向Advertiser 发送请求获取更多的信息,Advertiser 在接收到请求后需要予以响应。
Initializer 为期望与Advertiser 建立连接的BLE 终端,其可向Advertiser 发送请求建立连接,Advertiser 收到请求后会与Initializer 建立连接,并且Advertiser 和Initializer 分别以Slave 和Master 切换到点对点通信场景。
CC254x BLE软件开发指南
TI CC2540/41 BLE软件开发指南Ghostyu2013-03-06版本目的本文在OSAL入门指南和BLE开发简介的基础上进一步阐述低功耗蓝牙BLE的软件开发,本手册将对TI BLE作相对全面的描述,希望帮助读者入门BLE的软件开发阅读本文档前,请先阅读下列文档TI BLE简要说明OSAL编程指南1 Bluetooth蓝牙4.0是2012年公布的最新标准,目标是更省电,通信距离更长,成本更低,TI CC2540便是一颗低功耗蓝牙4.0的芯片。
蓝牙4.0标准定义了两种无线技术,1:BasicRate(BR),2:Bluetooth Low energy(BLE)第二种无线技术,BLE系统旨在每次传输非常小的数据包,这样消耗更低的电量。
同时支持BR和BLE的设备为dual-mode设备(Bluetooth SMART READY),通常,我们常用的智能手机、笔记本电脑都是dual-mode设备,仅支持BLE的为single-mode设备(Bluetooth SMART)。
Single-mode设备通常使用纽扣电池供电,这也代表这single-mode设备消耗的电能非常小。
1.1BLE协议栈BLE协议栈如下图所示:该协议栈有两部分组成Host和Controller,这种分离的主机和控制器追溯到标准的蓝牙BR/EDR(Enhance Data Rate)设备。
就是说蓝牙4.0之前的版本,这两部分是分开的。
所有的profile(暂且理解为一种配置)和应用程序都建立在协议栈的GAP和GATT之上,在接下来的TI BLE协议栈应用程序开发中,我们调用的api函数也大多数也来自GAP和GATT,我们先记住他们的名字,具体作用接下来会描述。
PHY层,最底层,1Mbps自适应调频技术,运行在免证的2.4GHz。
LL层,RF控制层,控制芯片工作在standby(准备)、advertising(广播)、scanning(监听/扫描),initiating(发起连接)、connected(已连接)这五个状态中的一种。
蓝牙BLE协议学习:001-BLE协议栈整体架构
蓝⽛BLE协议学习:001-BLE协议栈整体架构背景在深⼊BLE协议帧之前,我们先看⼀下BLE协议栈整体架构。
转载⾃:架构如上图所述,要实现⼀个BLE应⽤,⾸先需要⼀个⽀持BLE射频的芯⽚,然后还需要提供⼀个与此芯⽚配套的BLE协议栈,最后在协议栈上开发⾃⼰的应⽤。
可以看出BLE协议栈是连接芯⽚和应⽤的桥梁,是实现整个BLE应⽤的关键。
那BLE协议栈具体包含哪些功能呢?简单来说,BLE协议栈主要⽤来对你的应⽤数据进⾏层层封包,以⽣成⼀个满⾜BLE协议的空中数据包,也就是说,把应⽤数据包裹在⼀系列的帧头(header)和帧尾(tail)中。
具体来说,BLE协议栈主要由如下⼏部分组成:PHY****层(Physical layer物理层)。
PHY层⽤来指定BLE所⽤的⽆线频段,调制解调⽅式和⽅法等。
PHY层做得好不好,直接决定整个BLE芯⽚的功耗,灵敏度以及selectivity等射频指标。
物理层具体是1Mbps⾃适应跳频的GFSK射频,⼯作于免许可证的2.4GHz ISM(⼯业、科学与医疗)频段。
LL****层(Link Layer链路层)。
LL层是整个BLE协议栈的核⼼,也是BLE协议栈的难点和重点。
像Nordic的BLE协议栈能同时⽀持20个link(连接),就是LL层的功劳。
LL层要做的事情⾮常多,⽐如具体选择哪个射频通道进⾏通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进⾏重传,以及如何对链路进⾏管理和控制等等。
LL层只负责把数据发出去或者收回来,对数据进⾏怎样的解析则交给上⾯的GAP或者GATT。
⽤于控制设备的射频状态,设备将处于五种状态之⼀:等待、⼴告、扫描、初始化、连接。
⼴播设备不需要建⽴连接就可以发送数据,⽽扫描设备接收⼴播设备发送的数据;发起连接的设备通过发送连接请求来回应⼴播设备,如果⼴播设备接受连接请求,那么⼴播设备与发起连接的设备将会进⼊连接状态。
蓝牙4.0讲解
深圳信驰达科技
-14 88 88-
BLE: 扫描事件
�每次扫描设备打开 Radio 接收器去监听广 播设备,称为一个扫描事件 �扫描事件交替发生在三个特定的广播通道 中: 37, 38, 39 �扫描频宽比 (Duty-Cycle), 关于扫描的两个 时间参数:
– 扫描间隔: 即扫描设备的扫描频度 – 扫描窗口: 每次扫描事件持续的时间
深圳信驰达科技
-8 88 88-
BLE:物理层(PHY)
� RF 规格特性 – 运行在 2.4 GHz ISM band – GFSK 调制方式(高斯频移键控) – 40 频道2 MHz 的通道间隙 • 3 个固定的广播通道 • 37 个自适应自动跳频数据通道 � 物理层可以和经典蓝牙 RF组合成双模设备 � 2 MHz 间隙能更好地防止相邻频道的干扰
深圳信驰达科技
-24 88 88-
BLE: (GATT) Client / Server 架构
�GATT 指定了profile数据交换所在的结构 �除了数据的封装方式不同, client server 和 ” Services” Attribute 协议结构相同,数据封装在 “Services ” 表示。 里,用 “Characteristic Characteristic”
深圳信驰达科技
-17 88 88-
BLE: 连接事件
� 所有的通讯都发生在两个设备的连接事件期间 � 连接事件周期地发生,按照连接参数指定的间隔 � 每个事件发生在某个数据通道(0-36),跳频增量参数决 定了下次连接事件发生的通道 � 在每个连接事件期间,Master 先发送,Slave 会在 150us之后做出回应 � 即使一个连接事件发生(或两者),双方都没有数据发送 (例外情况是从设备潜伏使能)。这允许两个设备都承认 对方仍然存在并保持活跃的连接。
BLE 蓝牙4.0 介绍
BLE 蓝牙4.0 介绍1,BLE就是低功率蓝牙。
要着重了解两种设备:1,dual-mode双模设备:简单说就是向下兼容。
2,single-mode单模设备:仅仅支持BLE。
关于开发主要讲的是单模设备,它可以只靠纽扣电池即可持续工作。
2,BLE 协议栈PHY物理层在2.4GHz的ISM频段中跳频识别。
LL连接层:控制设备的状态。
设备可能有5中状态:就绪standby,广播advertising,搜索scanning,初始化initiating和连接connected。
广播者传播数据,使得浏览者可以接收到。
initiator就是一个对广播者回复连接请求的设备。
如果广播者接受请求,广播者和initiator初始者就会进入connected连接状态。
一个处于连接状态的设备会有一个角色:master和slave。
初始化这个连接的为master,接受这个连接请求的为slave。
HCI层为host和controller之间通过一个标准接口进行通信提供了一些方法。
这一层可以通过一个软件API或者是硬件接口如UART,SPI和USB。
L2CAP为上层数据提供封装服务。
SM:定义了建立连接和KEY的方法。
GAP:直接与profile和app进行接触,解决设备的发现和连接相关的服务,此外GAP也会初始化安全相关的特色。
ATT协议允许一个设备去显示一些数据,对于其他设备称之为“Attribute属性”,在ATT中,那些显示这些属性的设备被称为server,同等的另一个设备称为client。
LL层的状态master和slave和ATT层的这两个状态无关。
GATT层:是一个服务框架定义了对ATT应用的子程序。
GATT指定了profile的结构。
在BLE中,由profile或者是服务所使用的所有类型的数据都称为characteristic。
发生于两个设备间通过BLE连接进行交换的数据都需经过GATT 子程序处理。
因此,app和profile会直接使用GATT。
ble协议栈
BLE协议栈什么是BLE协议栈BLE(蓝牙低功耗)协议栈是一种用于无线通信的技术,它是蓝牙技术的一部分。
BLE协议栈是一组软件协议,用于处理蓝牙设备之间的通信。
它定义了通信的规则和步骤,使得不同设备之间能够进行无线通信。
BLE协议栈包含了各个层级的协议,从物理层到应用层,每个层级都有不同的功能和责任。
这些层级协议的组合形成了一个完整的BLE协议栈。
BLE协议栈的组成物理层(Physical Layer)在BLE协议栈中,物理层负责处理与无线通信硬件相关的任务。
它定义了与设备之间的无线通信的频率和信号特性。
物理层还负责将数字数据转换为无线信号,并通过天线发送到接收设备。
链路层(Link Layer)链路层是BLE协议栈的下一层,它负责处理与设备之间的连接和断开连接相关的任务。
链路层定义了设备之间数据传输的方式,并负责处理数据的分组和重传。
链路层还负责设备的扫描和广播功能,以便设备能够发现彼此并建立连接。
它还处理设备之间的身份验证和加密,以确保数据的安全性。
主从协议(Master-Slave Protocol)主从协议定义了BLE设备之间连接的角色和行为。
在这种协议中,一个设备充当主设备(Master),而另一个设备充当从设备(Slave)。
主设备负责发起连接请求,而从设备则接受连接请求并建立连接。
主从协议还定义了设备之间的数据传输方式和通信频率。
它规定了从设备可以执行的操作,如接收数据、发送数据和等待数据。
GATT协议(Generic Attribute Profile)GATT协议是BLE协议栈中非常重要的一部分,它定义了设备之间的数据传输和交互方式。
GATT协议使用一个层次结构来组织数据,其中包含服务(Service)、特征(Characteristic)和描述符(Descriptor)。
服务是一组相关的特征的集合,它们提供了设备的功能和属性。
特征是服务中最基本的单元,它包含了设备的数据和行为。
蓝牙4.0协议栈按键流程分析
蓝牙4.0协议栈按键流程分析在介绍蓝牙按键流程分析之前,我们需要了解一个概念,那就是就是OSAL。
什么是OSAL呢?可能大伙对于OS是比较了解的,学了计算机的搞过OS的也基本接触过,简单来说就是一个操作系统抽象层,可以理解为运行在CC2540 上的操作系统,说操作系统还不能算,TI的OSAL只实现了任务切换和消息机制。
并且把协议栈的代码、硬件处理的代码,用户程序的代码等分别放到了OSAL 层的不同任务处理函数中去了,各任务函数之间通过消息机制、同一个任务之间通过事件的的方式来通信。
什么是EVENT 事件?OSAL 为每个任务函数分配了一个16 位的事件变量,每一位代表一个事件,最高位为0x8000表示为系统事件SYS_EVENT_MSG。
其余的15 位留给用户自定义需要的事件。
通常事件由定时器启动,比如一秒后我要点亮LED2,这就需要发送一个点亮LED2 的事件,然后等待定时器1s后溢出,于是启动点亮LED2事件,事件会调用相应的hal 层API点亮LED2。
什么是MSG 消息MSG 是比EVENT 事件更具体并且可以携带数据的一种通信方式,MSG 的标记是按数值,而不是按位。
比如0x01 和0x02 是两个不同的消息,但对于事件0x03 则是0x01 事件和0x02 事件的组合。
MSG 收发使用osal_msg_send()和osal_msg_receive();当调用osal_msg_send()发送一个msg 的同时会在EVENT 列表中触发一个message ready event。
(请注意最后一句话,这句话点出了为什么按键时间的触发为何会导致系统事件也接受到了)现在以SimpleBLEPeripheral 为例说明按键流程在SimpleBLEPeripheral 任务初始化函数中有这样一条代码:// Register for all key events - This app will handle all key eventsRegisterForKeys( simpleBLEPeripheral_TaskID );这个函数来自OnBoard.c 源文件中/********************************************************************** Keyboard Register function** The keyboard handler is setup to send all keyboard changes to* one task (if a task is registered).** If a task registers, it will get all the keys. You can change this* to register for individual keys.*********************************************************************/uint8 RegisterForKeys( uint8 task_id ){// Allow only the first taskif ( registeredKeysTaskID == NO_TASK_ID )registeredKeysTaskID = task_id;return ( true );}elsereturn ( false );}向一个全局变量registeredKeysTaskID中赋值自己的任务ID,调用了这个函数就能成功注册按键服务,那这个全局变量在何时使用呢?分析到这里,感觉有点迷糊了,我们可以从顶到下分析。
BLE蓝牙 4.0 学习笔记
蓝牙4.0 BLE center与peripheral建立连接绑定过程 (2)蓝牙4.0 BLE peripheral 广播设置 (7)蓝牙4.0 BLE 数据传输(一) (11)蓝牙4.0 BLE 数据传输(二) (12)蓝牙4.0 BLE 数据传输(三) (16)蓝牙4.0 BLE 数据传输(四) (19)蓝牙4.0 BLE 数据传输(五) (23)蓝牙4.0 BLE 程序设计相关问题解答(转载) (25)蓝牙4.0 BLE SimpleBLEPeripheral_添加新CHAR值及UUID (33)蓝牙4.0 BLE peripheral 广播设置学习笔记(转载) (45)蓝牙4.0 BLE key处理过程看任务、事件、消息机制 (50)CC254x 内部存储结构FLASH (53)蓝牙4.0 BLE FLASH 操作 (58)蓝牙4.0 BLE center与peripheral建立连接绑定过程蓝牙主机从机建立连接绑定过程center与simplePeripheral建立连接过程center首先进行osal_init_system()初始化各个任务,SimpleBLECentral_Init->osal_set_event( simpleBLETaskId, START_DEVICE_EVT );进入SimpleBLECentral_ProcessEvent()调用VOID GAPCentralRole_StartDevice( (gapCentralRoleCB_t *) &simpleBLERoleCB );//当初始化完成,会发送GAP_DEVICE_INIT_DONE_EVENT由于注册了simpleBLERoleCB函数,因此发送的event由simpleBLERoleCB函数接收static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )此时pEvent->gap.opcode =GAP_DEVICE_INIT_DONE_EVENT,相应信息存储于pEvent中typedef union{gapEventHdr_t gap; //!< GAP_MSG_EVENT and status.gapDeviceInitDoneEvent_t initDone; //!< GAP initialization done. gapDeviceInfoEvent_t deviceInfo; //!< Discovery device information event structure.gapDevDiscEvent_t discCmpl; //!< Discovery complete event structure.gapEstLinkReqEvent_t linkCmpl; //!< Link complete event structure.gapLinkUpdateEvent_t linkUpdate; //!< Link update event structure.gapTerminateLinkEvent_t linkTerminate; //!< Link terminated event structure.} gapCentralRoleEvent_t;联合体,只有deviceInfo里面的数据是正确的typedef struct{osal_event_hdr_t hdr; //!< GAP_MSG_EVENT and statusuint8 opcode; //!< GAP_DEVICE_INIT_DONE_EVENTuint8 devAddr[B_ADDR_LEN]; //!< Device's BD_ADDRuint16 dataPktLen; //!< HC_LE_Data_Packet_Lengthuint8 numDataPkts; //!< HC_Total_Num_LE_Data_Packets} gapDeviceInitDoneEvent_t;能获得如设备地址等信息设备初始化完成通过串口发送'1'触发设备发现进行设备扫描GAP_DEVICE_INFO_EVENT 0x0D //!< Sent during the Device Discovery Process when a device is discovered.GAP_DEVICE_DISCOVERY_EVENT 0x01 //!< Sent when the Device Discovery Process is complete.当发现一个设备时,触发一个设备info事件同样是在simpleBLECentralEventCB 处理此时pEvent改变为deviceInfo可以获得广告设备的类型,地址。
由浅入深_蓝牙4.0BLE协议栈开发攻略大全(1)
低功耗蓝牙(BluetoothLow Energy),简称BLE。
蓝牙低能耗无线技术利用许多智能手段最大限度地降低功耗。
蓝牙低能耗架构共有两种芯片构成:单模芯片和双模芯片。
蓝牙单模器件是蓝牙规范中新出现的一种只支持蓝牙低能耗技术的芯片——是专门针对ULP操作优化的技术的一部分。
蓝牙单模芯片可以和其它单模芯片及双模芯片通信,此时后者需要使用自身架构中的蓝牙低能耗技术部分进行收发数据。
双模芯片也能与标准蓝牙技术及使用传统蓝牙架构的其它双模芯片通信。
TI用于感测应用的蓝牙低功耗装置是真正的 SoC 解决方案。
CC254x SoC 系列完美结合 TI 协议堆栈、基本软件(profile software)以及样品应用(sample application),是高弹性、低成本单模蓝牙低功耗解决方案。
接下来我们将结合CC254x,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。
本教程共分为六部分,主要知识点如下所示:第一部分知识点:第一节 BLE开发环境的搭建第二节 BLE快速体验第三节创建IAR工程-点亮LED第四节控制LED第五节 LCD12864显示第二部分知识点:第六节独立按键之查询方式第七节独立按键之中断方式第八节 CC254x内部温度传感器温度采集第九节五向按键第十节蜂鸣器第三部分知识点:第十一节串口通信第十二节 Flash的读写第十三节 BLE协议栈简介第十四节 OSAL工作原理第十五节 BLE蓝牙4.0协议栈启动分析第四部分知识点:第十六节协议栈LED实验第十七节协议栈LCD显示第十八节协议栈UART实验第十九节协议栈五向按键第二十节协议栈Flash数据存储第五部分知识点:第二十一节 DHT11温湿度传感器第二十二节蓝牙协议栈之从机通讯第二十三节蓝牙协议栈主从一体之主机通讯第二十四节 OAD空中升级第二十五节 SBL串口升级第六部分知识点:第二十六节 UBL-USB升级第二十七节 MT-iBeacon基站使用iPhone空中升级第二十八节 MT-iBeacon基站在PC端实现OAD空中升级第二十九节 MT-iBeacon基站关于LightBlue软件的使用第三十节如何使用MT-USBDongle的透传功能有关TI 的CC254x芯片介绍,可点击下面链接查看:主流蓝牙BLE控制芯片详解(1):TI CC2540BLE是蓝牙4.0规范中的一种,其中master最多有7个外设,低功耗,低延迟,低吞吐量。
低功耗蓝牙BLE协议
低功耗蓝牙BLE协议BLE协议在蓝牙4.0规范中首次引入,并不同于传统的蓝牙协议。
相比于传统蓝牙,BLE具有以下特点:1. 低功耗:BLE设备在工作时的功耗要远低于传统蓝牙设备。
这是通过多种技术实现的,比如使用GAP(Generic Access Profile)控制设备的连接状态,只在需要通信时才进行连接,其余时间保持休眠状态。
2.快速连接:BLE设备可以在非常短的时间内建立连接和断开连接。
这样的特点适用于需要快速传输一些小量数据的应用场景。
3. 简化的协议栈:BLE协议栈相对于传统蓝牙协议栈要简单得多。
它只包含了GAP、GATT(Generic Attribute Profile)、ATT(Attribute Protocol)和L2CAP(Logical Link Control and Adaptation Protocol)等几个基本协议,并省去了部分网络协议部分。
这样的设计使得BLE设备更加轻巧、低成本和易于实现。
4.快速数据传输:虽然BLE的数据传输速率相对较低,但它通过一些优化措施,比如分组和压缩等,使得在传输小量数据时能够更高效地使用带宽。
BLE协议广泛应用于物联网设备和智能家居等领域。
以智能手环为例,智能手环一般都集成了BLE模块,它可以连接到智能手机或其他设备,通过BLE协议进行数据传输,实现健康监测、运动追踪等功能。
由于BLE的低功耗特点,智能手环可以持续工作数天甚至数周,而不需要频繁充电。
总之,低功耗蓝牙(BLE)是为低功耗应用而设计的一种蓝牙协议。
它在低功耗、快速连接、简化协议栈和高效数据传输等方面具有明显优势,并被广泛应用于物联网设备和智能家居等领域。
随着物联网的发展和应用需求的不断增加,BLE协议有望得到更加广泛和深入的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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/。