由浅入深-蓝牙4.0ble协议栈开发攻略大全(3)

上传人:suns****4568 文档编号:91150697 上传时间:2019-06-26 格式:DOCX 页数:23 大小:608.14KB
返回 下载 相关 举报
由浅入深-蓝牙4.0ble协议栈开发攻略大全(3)_第1页
第1页 / 共23页
由浅入深-蓝牙4.0ble协议栈开发攻略大全(3)_第2页
第2页 / 共23页
由浅入深-蓝牙4.0ble协议栈开发攻略大全(3)_第3页
第3页 / 共23页
由浅入深-蓝牙4.0ble协议栈开发攻略大全(3)_第4页
第4页 / 共23页
由浅入深-蓝牙4.0ble协议栈开发攻略大全(3)_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《由浅入深-蓝牙4.0ble协议栈开发攻略大全(3)》由会员分享,可在线阅读,更多相关《由浅入深-蓝牙4.0ble协议栈开发攻略大全(3)(23页珍藏版)》请在金锄头文库上搜索。

1、本系列教程将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。教程共分为六部分,本文为第三部分:第三部分知识点:第十一节 串口通信第十二节 Flash的读写第十三节 BLE协议栈简介第十四节 OSAL工作原理第十五节 BLE蓝牙4.0协议栈启动分析有关TI 的CC254x芯片介绍,可点击下面链接查看:主流蓝牙BLE控制芯片详解(1):TI CC2540同系列资料推荐:由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1)由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2)有关本文的工具下载,大家可以到以下这个地址:朱兆祺ForARM

2、第十一节 串口通信在软件开发过程中调试是一个很关键的过程,而调试用的最多的手段就是打印Log,嵌入式平台很少有显示设备,所以我们需要将信息通过串口打印到PC端。MT254xboard上已经通过RS232芯片将UART0连接到DB9,我们只需要将DB9连接到电脑即可,UART0 对应的外部设备 IO 引脚关系为:P0_2-RX,P0_3-TX。我们需要将这两个IO配置为复用功能,CC2540的USART可以配置为SPI模式或者异步UART模式,这里我们需要配置为异步UART模式。首先配置IO为UART模式:PERCFG &= 0x01; / 配置UART为位置 1P0SEL = 0x3c; /

3、P0_2,P0_3,P0_4,P0_5用作串口功能P2DIR &= 0XC0; / P0 优先作为UART0配置UART0寄存器,将UART0配置为8N1模式,波特率为115200。U0CSR |= 0x80; / UART 方式U0GCR |= 11; / U0GCR与U0BAUD配合U0BAUD |= 216; / 波特率设为115200UTX0IF = 0; / 清除中断标志U0CSR |= 0X40; / 允许接收IEN0 |= 0x84; / 开总中断,接收中断这里采用中断方式来接收串口数据,并在中断中回调应用层的接收处理函数。#pragma vector = URX0_VECTOR

4、_interrupt void UART0_ISR(void)uint8 ch;URX0IF = 0; / 清中断标志ch = U0DBUF;if ( NULL != RecvCb ) / 调用回调函数RecvCb(ch);为了测试串口的通讯功能,这里我们通过串口接收命令的方式来控制LED的亮灭和蜂鸣器的响和停止,并且显示当前的状态。根据串口输出提示,发送对应字符可以实现相应功能,并且显示状态。第十二节 Flash的读写嵌入式系统中需要存储数据,而片内的Flash资源很匮乏,所以我们经常需要使用SpiFlash来存储数据,MT254xboard中板载了一个 512Kbyte的Flash,下面我

5、们来驱动此Flash。上一小节中我们用SPI的方式驱动了LCD12864,这节我们继续用SPI来驱动板载的 Flash,详细的说明了如何驱动这片Flash,在此不做累述,我们复制LCD12864工程,重命名为SpiFlash,在此工程中添加GD25Q40的两个驱动文件。下面我们来检测这个Flash,检测的方法为,全部写入0xAA,然后再读出,对比是否为0xAA,如果是,那Flash是没有问题的,否则Flash可能已经有坏块。具体的代码见例程,这个过程所需要的时间取决于我们需要检测的区域大小,如果完全检测,则可能需要几分钟的时间。int main(void)SysStartXOSC();LCD1

6、2864_Init(); / LCD初始化GD25Q40_Init(); / Flash初始化LCD12864_DisStr(0, “Flash Check.。”);sprintf(LCDBuf, “Flash ID :%04X”, GD25Q40_ReadID(); / 读取器件IDLCD12864_DisStr(1, LCDBuf);GD25Q40_EraseChip(); / 擦除整片Flash 大约需要10SLCD12864_DisStr(2, “Erase Chip Complete”);uint32 iCnt = 0;/ 全部写入0xAAconst uint8 Write = 0x

7、AA;for(iCnt=0; iCnt CHECK_ADDR_RANGE; iCnt+)GD25Q40_Write(&Write, iCnt, 1); / 写入0xAA/ 读取Flash内部的值,与写入的值对比uint8 Read;for(iCnt=0; iCnt = CHECK_ADDR_RANGE)LCD12864_DisStr(3, “Flash Check Success”);GD25Q40_EraseChip(); / 再次擦除while(1);return 0;MT254X蓝牙4.0开发板Flash效果:第十三节 BLE协议栈简介TI的协议栈分为两部分:控制器和主机。对于4.0以前

8、的蓝牙,这两部分是分开的。所有profile和应用都建构在GAP或GATT之上。根据这张图,我们从底层开始介绍。TI的这款CC2540器件可以单芯片实现BLE蓝牙协议栈结构图的所有组件,包括应用程序。1.1.1 PHY层1Mbps自适应跳频GFSK(高斯频移键控),运行在免证的2.4GHz。1.1.2 LL层LL层为RF控制器,控制设备处于准备(standby)、广播、监听/扫描(scan)、初始化、连接,这五种状态中一种。五种状态切换描述为:未连接时,设备广播信息,另外一个设备一直监听或按需扫描,两个设备连接初始化,设备连接上了。发起聊天的设备为主设备,接受聊天的设备为从设备,同一次聊天只能

9、有一个意见领袖,即主设备和从设备不能切换。1.1.3 HCI层HCI层为接口层,向上为主机提供软件应用程序接口(API),对外为外部硬件控制接口,可以通过串口、SPI、USB来实现设备控制。1.1.4 L2CAP层L2CAP层提供数据封装服务,允许逻辑上的点对点通讯。1.1.5 SM层SM层提供配对和密匙分发,实现安全连接和数据交换。1.1.6 ATT层ATT层负责数据检索,允许设备向另外一个设备展示一块特定的数据称之为属性,在ATT环境中,展示属性的设备称之为服务器,与它配对的设备称之为客户端。链路层的主机从机和这里的服务器、客服端是两种概念,主设备既可以是服务器,也可以是客户端。从设备毅然

10、。1.1.7 GATT层GATT层定义了使用 ATT 的服务框架和配置文件(profiles)的结构。BLE 中所有的数据通信都需要经过 GATT。GATT负责处理向上与应用打交道,其关键工作是把为检索工作提供合适的profile结构,而profile由检索关键词(characteristics)组成。1.1.8 GAP层GAP直接与应用程序或配置文件(profiles)通信的接口,处理设备发现和连接相关服务。另外还处理安全特性的初始化。对上级,提供应用程序接口,对下级,管理各级职能部门,尤其是指示LL层控制室五种状态切换,指导保卫处做好机要工作。1.2 TI协议栈源码介绍在第二章我们讲解了源

11、码的安装,这里我们就来剖析源码的结构。打开协议栈目录我们可以看到下图:BLE源码:目录名内容说明Accessories一些工具和已经编译好的Hex文件此文件夹中有Btool的安装包、USB-CDC的驱动。ComponentsHal驱动,OSAL源码、协议栈通用源码此文件夹是OSAL各层组件的实现Documents帮助文档协议栈说明文档,这是学习BLE最好的资料。Projects工程文件这里有一些TI的Demo,我们开发一般是在Demo的基础上进行这里TI给出了很多Demo,这些例程都是经过了SIG评审的,ble 文件夹中有很多工程文件,有些是具体的应用,例如BloodPressure、Gluc

12、oseCollector 、GlucoseSensor 、 HeartRate 、HIDEmuKbd 等都为传感器的实际应用,有相应标准的 Profile。其中有4种角色: SimpleBLEBroadcaster 、 SimpleBLECentral 、SimpleBLEObserver、SimpleBLEPeripheral。他们都有自己的特点。1.Broadcaster 广播员 非连接性的信号装置2.Observer 观察者 扫描得到,但不能链接3.Peripheral 从机 可链接,在单个链路层链接中作为从机4.Central 主机 扫描设备并发起链接,在单链路层或多链路层中作为主机。

13、我们的讲解将围绕这主机和从机进行。因为其它的设备都是基于这两种设备扩展开来的。第十四节 OSAL工作原理蓝牙为了实现同多个设备相连,或实现多功能,也实现了功能扩充,这就产生了调度问题。因为,虽然软件和协议栈可扩充,但终究最底层的执行部门只有一个。为了实现多事件和多任务切换,需要把事件和任务对应的应用,并起一个名字OSAL操作系统抽象层。OSAL管理的实现如果实现软件和硬件的低耦合,使软件不经改动或很少改动即可应用在另外的硬件上,这样就方便硬件改造、升级、迁移后,软件的移植。HAL硬件抽象层正是用来抽象各种硬件的资源,告知给软件。其作用类似于嵌入式系统设备驱动的定义硬件资源的h头文件。BLE低功

14、耗蓝牙系统架构:OSAL作为调度核心,BLE协议栈、profile定义、所有的应用都围绕它来实现。OSAL不是传统大家使用的操作系统,而是一个允许软件建立和执行事件的循环。软件功能是由任务事件来实现的,创建一个任务事件需要以下工作:1. 创建task identifier任务ID;2. 编写任务初始化(task initialization routine)进程,并需要添加到OSAL初始化进程中,这就是说系统启动后不能动态添加功能;3. 编写任务处理程序;4. 如有需要提供消息服务。BLE协议栈的各层都是以OSAL任务方式实现,由于LL控制室的时间要求最为迫切,所以其任务优先级最高。为了实现任务管理,OSAL通过消息处理(messageproc

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号