大纲
蓝牙简介
BLE协议栈
开发环境搭建I
OSAL层工作原理
UART实验
LED实验、ADC实验
深入了解GAP和GATT
添加特征值-主从机通信实验
无线网络开发
进阶学习
蓝牙智能手环介绍
1 蓝牙4.0简介
为什么需要蓝牙技术
wifi功耗太高,电池无法支撑
短距离、小电池支持的设备需要蓝牙,抗干扰能力强
1.1 蓝牙4.0是什么:
- 使用最广的短距离无线标准之一
- 重新定义蓝牙技术:低功耗
- 蓝牙4.0与传统蓝牙关系
1.2 蓝牙4.0与传统蓝牙关系:
smart ready:适用于任何双模蓝牙4.0的电子产品
smart:可以和smart ready和smart自己配对,主要用于可穿戴,不能与传统蓝牙连接
传统蓝牙:无法与smart相通。
1.3 BLE功耗对比
zigbee最多组网0xffff(65535)
BLE(mesh无穷大)
蓝牙特性:
高可靠性
快速连接
低成本、低功耗
传输距离
高安全性
上图是一个wifi的信道,其中37、38、39对应蓝牙的广播信道,信道宽带使得抗电磁干扰强
1.4 版本介绍:
1、版本1.1:
传输率约在748~810kb/s,这个初始版本支持Stereo音效的传输要求,但只能够以(单工)方式工作
2、版本1.2:
同样是只有748~810kb/s的传输率,但增加了(改善Software)抗干扰跳频功能。
3、版本2.0:
传输率约在1.8M/s~2.1M/s,可以有(双工)的工作方式
。即一边作语音通讯,同时亦可以传输档案/高质素图片,2.0版本当然也支持Stereo运作。随后蓝牙2.0版本的芯片,增加了Stereo译码芯片,则连A2DP(AdvancedAudioDistributionProfile)也可
以不需要了。
4、版本2.1:
Bluetooth 2.1+EDR版本的蓝牙技术。改善装置配对流程:以往在连接过程中,需要利用个人识别码来确保连接的安全性,而改进过后的连接方式则是会自动使用数字密码来进行配对与连接,举例来说,只要在手机选项中选择连接特定装置,在确定之后,手机会自动列出当前环境中可使用的设备,并且自动进行连结;而短距离的配对方面:也具备了在两个支持蓝牙的手机之间互相进行配对与通讯传输的NFC(Near Field CoMMunication)机制;更佳的省电效果:蓝牙2.1版加入了Sniff
Subrating的功能,透过设定在2个装置之间互相确认讯号的发送间隔来达到节省功耗的目的。蓝牙2.1将装置之间相互确认的讯号发送时间间隔从旧版的0.1秒延长到0.5秒左右,如此可以让蓝牙芯片的工作负载大幅降低,也可让蓝牙可以有更多的时间可以彻底休眠。根据官方的报告,采用此技术之后,蓝牙装置在开启蓝牙联机之后的待机时间可以有效延长5倍以上,开始支持全双工通信模式。
5、版本3.0+HS:
2009年4月21日
,蓝牙3.0的核心是"GenericAlternateMAC/PHY"(AMP),这是一种全新的交替射频技术,允许蓝牙协议栈针对任一任务动态地选择正确射频。最初被期望用于新规范的技术包括802.11以及UMB,但是新规范中取消了UMB的应用。作为新版规范,蓝牙3.0的传输速度自然会更高,而秘密就在802.11无线协议上。通过集成"802.11PAL"(协议适应层),蓝牙3.0的数据传输率提高到了大约24Mbps(即可在需要的时候调用802.11WI-FI用于实现高速数据传输)。,是蓝牙2.0的八倍,可以
轻松用于录像机至高清电视、PC至PMP、UMPC至打印机之间的资料传输。功耗方面,通过蓝牙3.0高速传送大量数据自然会消耗更多能量,但由于引入了增强电源控制(EPC)机制,再辅以802.11,实际空闲功耗会明显降低,蓝牙设备的待机耗电问题有望得到初步解决。此外,新的规范还具备通用测试方法(GTM)和单向广播无连接数据(UCD)两项技术,并且包括了一组HCI指令以获取密钥长度。据称,配备了蓝牙2.1模块的PC理论上可以通过升级固件让蓝牙2.1设备也支持蓝牙3.0。联盟成员已经开始为设备制造商研发蓝牙3.0解决方案。
6. 蓝牙4.0
6.1 简介:
蓝牙4.0为蓝牙3.0的升级标准
蓝牙4.0最重要的特性是省电,极低的运行和待机功耗可以使一粒纽扣电池连续工作数年之久。此外,低成本和跨厂商互操作性,3毫秒低延迟、AES-128加密等诸多特色,可以用于计步器、心律监视器、智能仪表、传感器物联网等众多领域,大大扩展蓝牙技术的应用范围。
6.2 主要特点:
蓝牙4.0是蓝牙3.0+HS规范的补充,专门面向对成本和功耗都有较高要求的无线方案,可广泛用于卫生保健、体育健身、家庭娱乐、安全保障等诸多领域。它支持两种部署方式:双模式和单模式。双模式中,低功耗蓝牙功能集成在现有的经典蓝牙控制器中,或再在现有经典蓝牙技(2.1+EDR/3.0+HS)芯片上增加低功耗堆栈,整体架构基本不变,因此成本增加有限。
Single mode只能与BT4.0互相传输无法向下兼容(与3.0/2.1/2.0无法相通);Dual mode可以向下兼容可与BT4.0传输也可以跟3.0/2.1/2.0传输。单模式面向高度集成、紧凑的设备,使用一个轻量级连接层(Link Layer)提供超低功耗的待机模式操作、简单设备恢复和可靠的点对多点数据传输,还能让联网传感器在蓝牙传输中安排好低功耗蓝牙流量的次序,同时还有高级节能和安全加密连接。6.3 优点
蓝牙4.0将三种规格集一体,包括传统蓝牙技术、高速技术和低耗能技术,与3.0版
本相比最大的不同就是低功耗。“4.0版本的功耗较老版本降低了90%,更省电,
“随着蓝牙技术由手机、游戏、耳机、便携电脑和汽车等传统应用领域向物联网、
医疗等新领域的扩展,对低功耗的要求会越来越高。4.0版本强化了蓝牙在数据传
输上的低功耗性能。”
7.蓝牙4.1
7.1 简介
如果说蓝牙 4.0主打的是省电特性的话,那么此次升级蓝牙4.1的关键词应当是IOT
(全联网),也就是把所有设备都联网的意思。为了实现这一点,对通讯功能的改
进是蓝牙 4.1最为重要的改进之一。
7.2 主要特点
1)批量数据的传输速度
首当其冲的就是批量数据的传输速度,大家知道蓝牙的传输速率一直非常渣,与已
经跨入千兆的WiFi相比毫无可比性。所以蓝牙4.1在已经被广泛使用的蓝牙4.0 LE
基础上进行了升级,使得批量数据可以以更高的速率传输。当然这并不意味着可以
用蓝牙高速传输流媒体视频,这一改进的主要针对的还是刚刚兴起的可穿戴设备。
例如已经比较常见的健康手环,其发送出的数据流并不大,通过蓝牙4.1能够更快
速地将跑步、游泳、骑车过程中收集到的信息传输到手机等设备上,用户就能更好
地实时监控运动的状况,这是很有用处的。
在蓝牙4.0时代,所有采用了蓝牙4.0 LE的设备都被贴上了“BluetoothSmart” 和
“Bluetooth SmartReady”的标志。其中Bluetooth Smart Ready设备指的是PC、
平板、手机这样的连接中心设备,而Bluetooth Smart设备指的是蓝牙耳机、键鼠
等扩展设备。之前这些设备之间的角色是早就安排好了的,并不能进行角色互换,
只能进行1对1连接。而在蓝牙4.1技术中,就允许设备同时充当“Bluetooth Smart
” 和“Bluetooth Smart Ready”两个角色的功能,这就意味着能够让多款设备连
接到一个蓝牙设备上。举个例子,一个智能手表既可以作为中心枢纽,接收从健康
手环上收集的运动信息的同时,又能作为一个显示设备,显示来自智能手机上的邮
件、短信。借助蓝牙4.1技术智能手表、智能眼镜等设备就能成为真正的中心枢纽
。
2)通过IPV6连接到网络
除此之外,可穿戴设备上网不易的问题,也可以通过蓝牙4.1进行解决。新标准加
入了专用通道允许设备通过 IPv6 联机使用。举例来说,如果有蓝牙设备无法上网
,那么通过蓝牙4.1连接到可以上网的设备之后,该设备就可以直接利用IPv6连接
到网络,实现与WiFi相同的功能。尽管受传输速率的限制,该设备的上网应用有限
,不过同步资料、收发邮件之类的操作还是完全可以实现的。这个改进的好处在于
传感器、嵌入式设备只需蓝牙便可实现连接手机、连接互联网,相对而言WiFi多用
于连接互联网,在连接设备方面效果一般,无法做到蓝牙的功能。未来随着物联网
逐渐走进我们的生活,无线传输在日常生活中的地位也会越来越高,蓝牙作为普及
最广泛的传输方式,将在“物联网”中起到不可忽视的作用。不过,蓝牙完全适应
IPv6则需要更长的时间,所以就要看芯片厂商如何帮助蓝牙设备增加IPv6的兼容性
了
3)简化设备连接
在各大手机厂商以及PC厂商的推动下,几乎所有的移动设备和笔记本电脑中都
装有蓝牙的模块,用户对于蓝牙的使用也比较多。不过仍有大量用户觉得蓝牙使用
起来很麻烦,归根结底还是蓝牙设备较为复杂的配对、连接造成的。试想一下,如
果与手机连接的智能手表,每次断开连接后,都得在设置界面中手动选择一次才能
重新连接,这就非常麻烦了。之前解决这一问题的方法是厂商在两个蓝牙设备中都
加入NFC芯片,通过NFC近场通讯的方式来简化重新配对的步骤,这本是个不错的思
路。只是搭载NFC芯片的产品不仅数量少,而且价格偏高,非常小众。
蓝牙4.1针对这点进行了改进,对于设备之间的连接和重新连接进行了很大幅度的
修改,可以为厂商在设计时提供更多的设计权限,包括设定频段创建或保持蓝牙连
接,这以改变使得蓝牙设备连接的灵活性有了非常明显的提升。两款带有蓝牙4.1
的设备之前已经成功配对,重新连接时只要将这两款设备靠近,即可实现重新连接
,完全不需要任何手动操作。举个例子,以后使用蓝牙4.1的耳机时,只要打开电
源开关就行了,不需要在手机上进行操作,非常的简单。
4)与4G和平共处
在移动通信领域,近期最火的话题莫过于4G了,已经成为全球无线通信网络一个不
可逆转的发展趋势。而蓝牙4.1也专门针对4G进行了优化,确保可以与4G信号和平
共处,这个改进被蓝牙技术联盟称为“共存性”。可能大家会觉得疑惑,手机网络
信号和蓝牙不是早就共存了么,为什么蓝牙4.1还要特别针对这点改进呢?这是因
为在实际的应用中,如果这两者同时传输数据,那么蓝牙通信就可能受到手机网络
信号的干扰,导致传输速率的下降。因此在全新的蓝牙4.1标准中,一旦遇到蓝牙
4.1和4G网络同时在传输数据的情况,那么蓝牙4.1就会自动协调两者的传输信息,
从而减少其它信号对蓝牙4.1的干扰,用户也就不用担心传输速率下降的问题了。
5)蓝牙4.1提供的增强功能包括:
AES加密技术提供更安全的连接。该功能使无线耳机更加适用于***、医疗及银行
等安全至上的应用领域。
可通过专属Bluetooth Smart远程遥控器操控耳机、扬声器及条形音箱,并支持同
步播放源于另一个完全不同设备的音频流。
蓝牙4.2标准
2014年12月4日,蓝牙4.2标准颁布,改善了数据传输速度和隐私保护程度,可直接通过IPv6和6LoWPAN接入互联网。在新的标准下蓝牙信号想要连接或者追踪用户设备必须经过用户许可,否则蓝牙信号将无法连接和追踪用户设备。
速度方面变得更加快速,两部蓝牙设备之间的数据传输速度提高了2.5倍,因为蓝牙智能(Bluetooth Smart)数据包的容量提高,其可容纳的数据量相当于此前的10倍左右。
蓝牙5.0协议
于美国时间2016年6月16日在伦敦正式发布,为现阶段***的蓝牙协议标准。
1、更快的传输速度
蓝牙5.0的开发人员称,新版本的蓝牙传输速度上限为2Mbps,是之前4.2LE版本的
两倍。当然,你在实际生活中是不太可能达到这个极限速度的,但是仍然可以体验
到显著的速度提升。
2、更远的有效距离
蓝牙5.0的另外一个重要改进是,它的有效距离是上一版本的4倍,因此在理论上,
当你拿着手机站在距离蓝牙音箱300米的地方,它还是会继续放着你爱的歌。也就
是说,理论上,蓝牙发射和接收设备之间的有效工作距离可达300米。当然,实际
的有效距离还取决于你使用的电子设备。
3、导航功能
此外,蓝牙5.0将添加更多的导航功能,因此该技术可以作为室内导航信标或类似
定位设备使用,结合wifi可以实现精度小于1米的室内定位。举个例子,如果你是路痴,你仍可以使用蓝牙技术,在诺大的商业中心找到路。
4、物联网功能
物联网还在持续火爆,因此,蓝牙5.0针对物联网进行了很多底层优化,力求以更
低的功耗和更高的性能为智能家居服务。
5、升级硬件
此前的一些蓝牙版本更新只要求升级软件,但蓝牙5.0很可能要求升级到新的芯片
。不过,旧的硬件仍可以兼容蓝牙5.0,你就无法享用其新的性能了。搭载蓝牙5.0
芯片的旗舰级手机将于2017年问世,相信中低端手机也将陆陆续续内置蓝牙5芯片
。苹果将为成为第一批使用该项技术的厂商之一。
6、更多的传输功能
全新的蓝牙5.0能够增加更多的数据传输功能,硬件厂商可以通过蓝牙5.0创建更复
杂的连接系统,比如Beacon或位置服务。因此通过蓝牙设备发送的广告数据可以发
送少量信息到目标设备中,甚至无需配对。
7、更低的功耗
众所周知,蓝牙是智能手机的必备功能,随着智能设备和移动支付等越来越多需要
打开蓝牙,才能享受便利功能逐渐融入人们的生活之中,蓝牙的功耗成为了智能手
机待机时间的一大杀手。为此蓝牙5.0将大大降低了蓝牙的功耗,使人们在使用蓝
牙的过程中再也不必担心待机时间短的问题。
8、真正支持无损传输
支持24bit/192KHz的无损音源传输,对现有的WIFI高保真无损音频传输形成有效威胁。
2 协议和协议栈
2.1 协议栈架构
总体上分为两层:蓝色框部分为:Host 绿色框部分为:Controller
Controller部分有三层,分别是Physical Layer(物理层)、Link Layer (数据链路层)、HCI(Host/Controller Interface )Host和Controller接口
这一层可以看出来基本上都是跟硬件有关,都是一些底层的驱动,还有RF(射频)的一些通讯协议。
Host部分包括:L2CAP(Logical Link Control and Adaptation Protocol )逻辑链路控制和适配协议、SMP(Security Manager Protocol )安全管理协议、GAP (Generic Access Profile )通用接近协议、ATT(Attribute Protocol )属性协议、GATT(Generic Attribute Profile )通用属性协议。
可以看的出来Host层都是一些协议,而这一层正是协议栈的最关键的部分,蓝牙的广播、扫描、链接通信等所有的行为都是由这一层的协议来规范和配置,使得蓝牙这种通信方式有条不紊的进行,后续会对每一块协议的功能和配置进行细致剖析,以帮助我们从整体上对蓝牙的工作过程有一个完整的认知。
2.2 协议和协议栈概念
蓝牙4.0协议概念
协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发;协议栈是协议的具体实现形式, 通俗的理解就是用代码实现的函数库,以便于开发人员调用。BLE协议栈将各个层定义的协议都集合在一起,以函数库的形式实现,并给用户提供一些应用层 API,供用户调用。
非mesh是星型链接模式,一个主机对应n个从机,主机开启扫描,电机连接即可组网
BLE协议栈
在 Bluetooth-LE 低功耗蓝牙中有四种设备类型:Central主机、Peripheral从机、Observer观察者、Broadcaster广播者。
通常Central和Peripheral一起使用。
然后Observer和 Broadcaster一起使用。
Central和Peripheral 连接后交换数据,我们平时使用到的基本上都是这个模式,而像多个温度采集器(一般用于智能家居),通常采用 Observer 和 Broadcaster 这种无需连接的方式。
GATT层
初始化 GATT Client,GATT有Service和Client之分,Service 作为服务端,GATT Client提供 read/write 接口,Central 作为 Client,对一般情况下,Peripheral 作为 Service ,所以主机 Central会调用GATT_WriteCharValue 或者GATT_ReadCharValue 来和作为Service端的 Peripheral从机通信, 而Peripheral 需要通过notify的方式,也就是调用GATT_Notification 发起和主机的通信,在后面我们会详细介绍他们,一般来说,Peripheral notify的方式,速度要比直接读写的速度要慢 。
2.3 BLE协议栈各个层简介
PHY层:
1Mbps自适应跳频的GFSK射频,工作于免许可证的2.4GHz ISM(工业、科学、医疗)频段。
LL 层:
链路层,RF 控制层,用于控制设备的射频状态,控制芯片工作在standby(准备)、advertising(广播)、scanning(监听/扫描), initiating(发起连接)、connected(已连接) 这五个状态中的一种。五种状态的切换描述为: advertising(广播)不需要连接就可以发送数据(告诉所有人,我来了), scanning(监听/扫描)来自广播的数据,initiator(发起人)将携带 connection request(连接请求)来响应广播者,如果advertiser(广播者)同意该请求, 那么广播这和发起者都会进入已连接状态, 发起连接的设备变为 master(主机),接收连接请求的设备变为 slave(从机)。
HCI 层
主机控制接口层,通信层,向host和controller提供一个标准化的接口。该层可以由软件API实现或者使用硬件接口 uart、spi、usb来控制。
L2CAP 层
逻辑链路控制及自适应协议层,相当于快递,将数据打包,为上层提供数据封装服务,可以让客户点对点的通信。
SM 层
安全管理层,提供配对和密钥的分发,实现安全连接和数据交换。
ATT 层
属性协议层,ATT 环境中,允许设备向另外一个设备展示一块特定的数据,称之为“属性”,展示“属性” 的设备称为服务器,与之配对的设备称为客户端。链路层状态(主机和从机)与设备的ATT 角色是相互独立的,也就是说,主机设备可以是 ATT 服务器,也可以是 ATT客户端,从机也一样。
GATT 层负责数据传输
通用属文件健配置层,从名字就能看出,GATT 是在 ATT 上面的一层结构,定义了使用 ATT的服务框架,GATT规定了配置文件(鼎鼎有名的 profile)的结构,在BLE中,所有被profile或者服务用到的数据块都称为“特性, characteristic”两个建立连接的设备之间的所有数据通信都是通过 GATT 子程序处理,应用程序和 profile 直接使用 GATT层,在后面具体的代码中,我们会经常见到 GATT,数据交互也是再GATT层。
GAP层
主要用于设备查找,连接建立,广播发送接收APP 和profile
定义了不同应用场景
3 CC2540特性 (2541也一样)
低功耗
RF部分
布局
微控制处理器
外围设备
应用:
便携式医疗仪表
低功耗照明
...
4 协议栈目录介绍
Driver里usb转串口驱动,cc2540 dongle驱动
BTools 工具包
Hexfile 预先编译好的hex文件
蓝牙4.0 ble底层 开发层硬件抽象hal 操作系统soal
协议栈阅读文档,必看
BLE _API_GUIDE_main.html 接口文件
TI_BLE_Sample_Applications_Guide.pdf 所有模板介绍
TI_BLE_Software_Developer's_Guide.p... 高级进阶
工程文件,以后提取修改
5 IAR开发环境搭建
Next
Next
把注册码复制到我们 iar 上。
Next。
完成。
这边系统的32或64,用户按电脑情况自行选择。
6 创建测试工程
6.1创建工程目录
6.2 配置工程文件
我买的开发板是cc2541F256.i51
6.3 设置仿真器调试
6.4 添加测试代码
创建main.c
#include <ioCC2541.h>
//宏定义
#define uchar unsigned char
#define uint unsigned int
#define led P1_0
//延时函数
void delay(unsigned int len)
{
int i,j;
for(i=0;i<len;i++)
for(j=0;j<1000;j++);
}
int main()
{
//设置P1.0 端口为I/O 功能 (默认为I/O功能)
P1SEL &= ~0x01;
//设置P1.0 端口方向为输出
P1DIR |= 0x01;
//死循环
while(1)
{
led=1;//点亮led
delay(1000);
led=0;//熄灭led
delay(1000);
}
}
新建好后,点选代码区,光标闪烁时 Ctrl+S(保存) 或者选择左上角保存按钮
至此,我们第一个demo工程就配置好了,单击OK 确认。
完成烧写后进入如下界面