蓝牙40-BLE无线通信技术协议栈开发入门课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《蓝牙40-BLE无线通信技术协议栈开发入门课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝牙 40 BLE 无线通信 技术 协议 开发 入门 课件
- 资源描述:
-
1、 认识蓝牙4.0 BLE协议栈 蓝牙4.0 BLE协议栈工作流程解析蓝牙4.0 协议栈串口通信功能的实现知识目标知识目标(1)掌握蓝牙4.0 BLE协议栈的工作原理和流程;(2)掌握蓝牙4.0 BLE协议栈的软件架构;(3)掌握蓝牙4.0 BLE协议栈串口通信机制。技能目标技能目标(1)掌握蓝牙4.0 BLE协议栈的安装、编译和下载;(2)掌握蓝牙4.0 BLE协议栈主机和从机工程的基本使用方法;(3)掌握蓝牙4.0 BLE协议栈应用层串口通信的设计实现方法。项目分析项目分析 本项目是学习蓝牙4.0 BLE无线数据通信技术的基础,将带领读者进入协议栈部分的学习。协议是一系列的通信标准,通信双方
2、需要共同按照这一标准进行正常的数据发送和接收。协议栈是协议的具体实现形式,虽然协议是统一的,但是协议的具体实现形式是有区别的,如在智能手机终端上广泛使用的Wi-Fi网络协议,则对于在安卓和iOS平台下的实现方法是不一样的。简单理解就是,协议栈是协议与用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数据的收发。在蓝牙4.0 BLE协议栈中已经实现了低功耗蓝牙(bluetooth low energy,BLE)协议,用户在进行应用程序开发时可以直接使用协议栈提供的API函数进行编程设计,在项目开发过程中完全不必关心BLE协议提供的具体细节,但需要理解其中的关键函数和协议栈的工
3、作流程,本项目也将通过任务进行重点解析。异步串行接口(UART,串口)可以反映程序运行过程中包括调试信息在内的各种信息。德州仪器(texas instruments,TI)的蓝牙4.0 BLE协议栈已经包含了对串口的支持,并增加了易用的外部API,即NPI,实现了串口的初始化,数据包的发送、接收,应用层向NPI模块注册回调函数等功能,本项目将带领读者一起实现协议栈串口的双工通信和调试信息的同步打印。图图4-1 4-1 蓝牙蓝牙4.0 BLE4.0 BLE模块与模块与PCPC的串口通信结构的串口通信结构任务一 蓝牙4.0 BLE协议栈的安装、编译和下载任务描述任务描述 本任务要求完成蓝牙4.0
4、BLE协议栈1.4.0的安装、编译和下载。知识链接知识链接 TI的蓝牙低功耗 BLE-Stack 1.4.0 软件堆栈是一款全功能的蓝牙 4.0 软件开发套件,适用于 TI 的 CC2540 和 CC2541 射频单片机芯片,并包含单模式蓝牙智能应用开发所需的所有软件。BLE-Stack 1.4.0 以免专利费形式向使用 TI 的 CC2540/41 蓝牙低耗能片上系统(SoC)产品系列的用户提供,读者可以访问 TI BLE Wiki 来获得更多的资源,如移植指南和示例应用等,网址为“http:/ 1.4.0 包括对象代码及最新的蓝牙低功耗协议堆栈,支持多个连接、示例项目和应用程序,这些应用程
5、序中涵盖了一组广泛的带有源代码的配置文件及 BTool(用于测试应用的 Windows PC 应用程序)。除了软件以外,此套件还包含文档,其中包括开发人员指南、示例应用指南和 API 指南等。(1)从官方网站“http:/ BLE协议栈。(2)双击“BLE-CC254x-1.4.0.exe”进行协议栈安装,整个安装过程比较简单,建议选择安装到默认的C盘根目录下,如图4-2所示。任务实施任务实施图图4-2 BLE-CC254x-1.4.04-2 BLE-CC254x-1.4.0版本的默认安装路径版本的默认安装路径图图4-3 BLE-CC254x-1.4.04-3 BLE-CC254x-1.4.0
6、协议栈的安装过程协议栈的安装过程 (3)TI蓝牙4.0 BLE协议栈中的相关文件及路径位置如图4-4所示。这里包含了TI提供的蓝牙4.0 BLE的相关实例和说明文档。图图4-4 TI4-4 TI蓝牙蓝牙4.0 BLE4.0 BLE协议栈中相关文件及路径位置协议栈中相关文件及路径位置 具体内容如下。Accessories目录:包含了一些工具和已经编译好的Hex文件,此文件夹中有BTool的安装包和USB-CDC的驱动等,如图4-5 所示。图图4-5 4-5 协议栈协议栈AccessoriesAccessories目录目录 Components目录:包含了hal驱动、osal源码、协议栈通用源码,
7、此文件夹是 osal 各层组件的具体实现,如图4-6所示。图图4-6 4-6 协议栈协议栈ComponentsComponents目录目录 Documents目录:协议栈帮助和说明文档,这是学习TI蓝牙4.0 BLE的最好资料,如图4-7所示。图图4-7 4-7 协议栈协议栈DocumentsDocuments目录目录 Projects目录:工程文件是一些TI的蓝牙4.0 BLE应用示例,如图4-8所示。图图4-8 TI4-8 TI蓝牙蓝牙4.0 BLE4.0 BLE协议栈工程示例协议栈工程示例任务二 蓝牙4.0 BLE协议栈的使用任务描述任务描述 在协议栈软件包工程目录中找到主机示例(Sim
8、pleBLECentral)和从机示例(SimpleBLEPeripheral),并以从机工程为例打开,结合协议栈的构成,查看文件布局。知识链接知识链接 TI的协议栈分为两部分,即控制器和主机,如图4-9所示。对于4.0版本以前的蓝牙,这两部分是分开的。所有配置文件和应用程序都建构在通用访问配置文件(GAP)或通用属性配置文件(GATT)上。本书中硬件平台使用的CC2540单片机可以单芯片实现BLE蓝牙协议栈结构图中的所有组件,包括应用程序。图图4-9 4-9 蓝牙蓝牙4.0 BLE4.0 BLE协议栈结构图协议栈结构图 协议栈各层的功能如下。(1)物理层(physical layer,PHY
9、)。PHY的传输速率为1 Mb/s,采用自适应跳频GFSK(高斯频移键控),运行在免证的2.4 GHz频段。(2)链路层(link layer,LL)。LL为射频(RF)控制器,控制设备处于等待(stand by)、广播(advertising)、扫描(scan)、初始化(initiating)和连接(connected)五种状态中的一种。五种状态切换描述为:未连接时,设备广播信息,另一个设备一直监听或按需扫描,两个设备连接初始化完成后,设备进行连接绑定。发起连接的设备为主设备,接受连接的设备为从设备,同一次连接中的主设备与从设备不能切换。(3)主机控制接口(host controller i
10、nterface,HCI)层。HCI层为接口层,向上为主机提供软件应用程序接口(API),对外为外部硬件控制接口,可以通过串口、SPI和USB来实现设备控制。(4)逻辑链路控制与适配协议(logical link control and adaption protocol,L2CAP)层。L2CAP层提供数据封装服务,允许逻辑上的点对点通信。(5)安全管理(security manager,SM)层。SM层提供配对和密匙分发,实现安全连接和数据交换。(6)属性协议(attribute protocol,ATT)层。ATT层负责数据检索,允许设备向另外一个设备展示一块特定的数据,称为属性。在AT
11、T环境中,展示属性的设备称为服务器,与它配对的设备称为客户端。链路层的主机、从机与这里的服务器、客户端是两种概念,主设备既可以是服务器,也可以是客户端,从设备亦然。(7)通用属性配置文件(generic attribute profile,GATT)层。GATT层定义了使用 ATT 的服务框架和配置文件的结构。BLE 中所有的数据通信都需要经过 GATT层。GATT层提供的服务可以完成特征值的读取、写入和查询等操作。(8)通用访问配置文件(generic access profile,GAP)层。GAP是直接与应用程序或配置文件通信的接口,处理设备发现和连接相关服务,另外还处理安全特性的初始化
12、。GAP层通常运行于四种角色,即广播者(broadcaster)、观察者(observer)、从机(peripheral)和主机(central)中的一种。(1)在路径“C:Texas InstrumentsBLE-CC254x-1.4.0ProjectsbleSimpleBLECentralCC2540”目录中找到从机工程“SimpleBLECentral.eww”,如图4-10所示。打开主机工程打开主机工程1.任务实施任务实施图图4-10 SimpleBLECentral.eww4-10 SimpleBLECentral.eww工程文件路径工程文件路径 (2)使用IAR集成开发环境打开主机
13、工程,协议栈SimpleBLECentral的工程初始界面和文件布局如图4-11所示。图图4-11 SimpleBLECentral4-11 SimpleBLECentral工程初始界面和文件布局工程初始界面和文件布局打开从机工程打开从机工程2.(1)在路径“C:Texas InstrumentsBLE-CC254x-1.4.0ProjectsbleSimpleBLEPeripheralCC2540DB”目录中找到从机工程“SimpleBLEPeripheral.eww”,如图4-12所示。图图4-12 SimpleBLEPeripheral.eww4-12 SimpleBLEPeripher
14、al.eww工程文件路径工程文件路径 (2)使用IAR集成开发环境打开从机工程,协议栈SimpleBLEPeripheral工程的目录结构如图4-13所示。图图4-13 4-13 协议栈协议栈SimpleBLEPeripheralSimpleBLEPeripheral工工程的目录结构程的目录结构 (3)工程项目设置。查看从机工程项目配置,如图4-14所示,可以看到BLE协议栈本身已经经过相关配置,所以在程序编译前无须进行CC2540单片机裸机开发时的设置,只需使用TI默认的配置即可。(a a)(b b)(c c)(4)对从机SimpleBLEPeripheral协议栈工程直接编译,无任何错误和
15、警告,如图4-15 所示,保证了接下来的二次开发。图图4-15 4-15 编译结果无错误和警告编译结果无错误和警告 在TI 的蓝牙4.0 BLE 协议栈中,虽然主机的主体结构和从机的主体结构类似,但是从机与主机有着很大的区别,从机中包含了一个称为配置文件的相关程序代码,这个配置文件决定了从机的功能。例如,防丢器、血压仪、心率计等均是蓝牙组织规定的配置文件。小贴士 为了在开发时保留原版的协议栈代码,可以把BLE-CC254x-1.4.0协议栈目录复制到自己的项目开发目录下,直接在自己的项目开发目录下开发蓝牙BLE应用。任务一 蓝牙4.0 BLE协议栈启动测试任务描述任务描述 在蓝牙4.0 BLE
16、协议栈从机示例工程“osal_start_system()”函数中加入LED1灯闪烁程序,验证协议栈的启动流程。知识链接知识链接 蓝牙4.0 BLE协议栈作为帮助程序员方便开发BLE应用的一套系统,它采用轮转查询式操作系统,其核心思想是“轮转”和“查询”,包括两个主要流程,即系统初始化和执行OSAL操作系统,如图4-16所示。系统初始化完成后,就进入执行操作系统,并且在其中是一个死循环。执行操作系统中的主函数为轮询式操作系统的主体部分,也是需要重点开发、调用和掌握的部分。图图4-16 4-16 蓝牙蓝牙4.0 BLE4.0 BLE协议栈的主要流程协议栈的主要流程 BLE协议栈的主函数在APP层
17、目录的“SimpleBLEPeripheral_Main.c”文件中,如图4-17所示,这也是整个协议栈的入口点,即从该函数开始执行。从总体上来说,它一共做了两件工作:一件是系统初始化,即由启动代码来初始化硬件系统和软件架构所需要的各个模块;另一件是开始执行OSAL操作系统实体,OSAL操作系统实现了任务切换和消息机制,并且把协议栈的代码、硬件处理的代码和用户程序的代码等分别放到了 OSAL 层的不同任务处理函数中,各任务函数之间通过消息机制、同一个任务之间通过事件的方式来通信,同时安排好各任务中具体事件的执行时间。图图2-50 2-50 选择选择lnk51ew_cc2540F256.xcll
18、nk51ew_cc2540F256.xcl文件文件 系统初始化系统初始化1.系统启动代码需要完成初始化硬件系统和软件架构所需要的各个模块,为协议栈操作系统的运行做好准备工作。协议栈初始化流程如图4-18 所示,主要为初始化系统时钟、初始化I/O口、初始化各个硬件模块和初始化非易失性(NV)存储、初始化操作系统等。图图4-18 4-18 协议栈初始化流程协议栈初始化流程 在这几个初始化函数中,操作系统的初始化“osal_init_system()”是一个比较重要的函数,因为它里面包含了操作系统的任务初始化函数“osalInitTasks();”。其相关代码如程序清单4.1 所示。程序清单4.1
19、/*函数名:osalInitTasks *功能描述:调用各层任务的初始化函数并注册 *参数:无 *返回:无 */void osalInitTasks(void)uint8 taskID=0;/*分配内存,返回指向缓冲区的指针*/tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*tasksCnt);osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt);/*LL 任务*/LL_Init(taskID+);/*Hal 任务*/Hal_Init(taskID+);/*HCI 任务*/HCI_Init(
20、taskID+);#if defined(OSAL_CBTIMER_NUM_TASKS)/*回调定时器任务*/osal_CbTimerInit(taskID);taskID+=OSAL_CBTIMER_NUM_TASKS;#endif /*L2CAP 任务*/L2CAP_Init(taskID+);/*GAP 任务*/GAP_Init(taskID+);/*GATT 任务*/GATT_Init(taskID+);/*SM 任务*/SM_Init(taskID+);/*GAP角色配置*/GAPRole_Init(taskID+);/*蓝牙绑定管理初始化*/GAPBondMgr_Init(task
21、ID+);/*GATT层服务的初始化*/GATTServApp_Init(taskID+);/*应用层初始化*/SimpleBLEPeripheral_Init(taskID);函数对各层上的任务分配内存空间,并对 taskID 任务号进行初始化,每初始化一个,taskID加1。任务优先级由高向低依次排列,高优先级对应taskID的值反而小。最后是初始化SimpleBLEPeripheral任务,这是应用层程序任务,包括初始化函数和任务处理函数都需要用户根据具体要求编写。操作系统的执行操作系统的执行2.初始化代码为操作系统的执行做好准备工作后,就开始执行操作系统入口程序,并由此彻底将控制权移交
22、给操作系统。其实,操作系统实体函数只有一行代码,即 osal_start_system();/No Return from here 图图4-19 4-19 任务轮转查询式操作系统的工作流程任务轮转查询式操作系统的工作流程 “osal_start_system()”函数具体的实现代码如程序清单4.2所示,其实,这个函数是在一个无限的循环中,它是整个程序运行的灵魂。程序清单4.2 void osal_start_system(void)/*协议栈中默认没有定义ZBIT和UBIT两个宏,所以执行for语句无限循环*/#if!defined(ZBIT)&!defined(UBIT)for(;)/无限
23、循环#endif osal_run_system();继续进入运行操作系统函数“osal_run_system()”,具体实现代码和相关注释如程序清单4.3所示。它的实现方法就是不断地查看事件表,如果有事件发生就调用相应的事件处理函数。程序清单4.3 void osal_run_system(void)uint8 idx=0;/任务号初始值为0#ifndef HAL_BOARD_CC2538 osalTimeUpdate();#endif Hal_ProcessPoll();/*从优先级最高的LL层依次开始查询各层任务事件标志表中各任务的事件标志,如果有事件标志置位,则跳出循环,否则轮询完所有
24、事件标志后再退出循环*/do if(tasksEventsidx)/最高优先级的任务被找到 break;while(+idxtasksCnt);/*若idxtasksCnt,则得到了待处理的具有最高优先级的任务的索引号 idx*/if(idx0;i-)for(j=587;j0;j-);osal_run_system();下载和调试程序下载和调试程序2.将蓝牙从机模块连接到CC DEBUGGER下载器,下载并调试。全速运行,观察LED1灯的状态有闪烁现象,说明嵌入的裸机程序被反复执行了。注意注意小贴士 在IAR集成开发环境中,若需要跳转到某个函数或变量的定义,则可以在此函数名中右击并选择Go T
25、o Definition选项,就可以调到相应的定义。任务二 蓝牙4.0 BLE协议栈按键点灯程序设计任务描述任务描述 本任务要求通过修改蓝牙4.0 BLE从机协议栈示例工程中HAL层的按键驱动,在APP应用层实现S1按键控制LED1亮灭的事件处理。知识链接知识链接 按键的驱动在TI蓝牙4.0 BLE协议栈中已经实现,但由于硬件平台的不同,因而用户需要做一些修改,使它适应自己的硬件开发平台。在协议栈“Hal_key.c”文件中,包含了OSAL 系统中主机和从机共用的按键驱动文件,主要是实现按键的初始化与中断服务函数,包括主机的五向摇杆按键驱动和普通S1按键驱动。由于从机协议栈APP层中不提供普通
展开阅读全文