由浅入深-蓝牙4.0BLE协议栈开发攻略大全(3)
- 格式:docx
- 大小:368.27 KB
- 文档页数:25
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天线和⼏个阻容器件构成的滤波电路即可实现蓝⽛⽹络节点的构建。
本系列教程将结合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 数字湿温度传感器采用单总线数据格式。
蓝牙协议栈开发流程1. 硬件平台选择在进行蓝牙协议栈开发之前,首先需要选择一个合适的硬件平台。
一般而言,蓝牙协议栈开发需要依托于一个蓝牙芯片或模块,这个芯片或模块需要支持蓝牙标准,并且提供相应的开发工具和文档。
在选择硬件平台时,需要考虑到项目的需求以及硬件的成本和可用性等因素。
2. 硬件平台驱动开发一般而言,蓝牙协议栈开发需要依赖于底层的硬件平台驱动,这需要涉及到对硬件的了解和驱动程序的开发。
这包括对芯片或模块的寄存器映射、时序要求、接口协议等方面的了解,并且需要编写相应的驱动程序来与硬件进行交互。
在驱动开发过程中,需要考虑到硬件的特性和限制,同时也需要保证驱动程序的效率和稳定性。
3. 协议栈架构设计蓝牙协议栈是蓝牙通信的核心部分,它负责处理蓝牙连接、数据传输、设备发现、配对等功能。
协议栈一般包括多个层次,包括物理层、链路层、L2CAP层、RFCOMM层、SDP 层等。
在进行协议栈的开发时,需要对整个协议栈的架构进行设计,包括各个层次的功能和接口等。
同时也需要考虑到协议栈的效率、可扩展性、可移植性等方面的要求。
4. 协议栈的实现在协议栈的实现过程中,需要根据协议规范和硬件平台的要求,编写相应的代码来实现蓝牙协议栈的各个功能。
这需要对蓝牙规范有较深的了解,并且需要在编写代码的过程中充分考虑到硬件平台的特性和限制。
在进行协议栈的实现时,需要进行模块化设计,确保各个功能模块之间的接口清晰,同时也需要进行充分的测试和调试,确保实现的功能正确和稳定。
5. 协议栈的优化在进行协议栈的开发过程中,需要进行各个方面的优化,包括代码的优化、内存的优化、功耗的优化等。
这需要根据具体的硬件平台和应用场景来进行优化的选择,以确保协议栈在实际应用中能够满足相应的要求。
6. 测试和验证在协议栈的开发完成后,需要进行相应的测试和验证工作。
这包括功能测试、性能测试、兼容性测试、安全性测试等。
这需要根据蓝牙标准和相关的测试要求,编写测试用例,并且对协议栈进行全面的测试。
BLE协议栈UART调试指南近年来,蓝牙低功耗(BLE)技术得到了广泛应用和推广,成为物联网设备间无线通信的重要方式之一、在BLE通信过程中,调试是非常重要的一环。
本文将介绍BLE协议栈UART调试指南,帮助开发人员更好地进行BLE调试工作。
一、BLE协议栈概述BLE协议栈是指蓝牙低功耗通信协议的各个层级的软件堆栈。
在BLE 通信中,BLE协议栈分为控制器和主机两部分。
控制器负责底层的物理层和链路层处理,而主机负责高层的GAP(通用接入配置文件)和GATT(通用属性配置文件)协议。
二、BLE协议栈UART调试UART(通用异步收发传输)是一种常用的串行通信接口,可以实现设备之间的数据传输。
在BLE开发中,UART常常被用于与目标设备进行通信,进行调试工作。
1.硬件准备首先,需要准备一台电脑和一个BLE开发板。
开发板上应该有一个UART接口,用于与电脑连接。
在连接之前,确保电脑已经安装了相关的串口驱动程序。
2.配置串口通过设备管理器找到开发板连接的串口,然后配置正确的串口参数,包括波特率、数据位、停止位和校验位等。
这些参数需要与开发板上的串口设置一致。
3.使用串口工具使用串口调试工具,如TeraTerm、Putty等,连接到BLE开发板。
在工具中配置正确的串口参数,并打开串口连接。
4.选择调试输出在BLE开发过程中,可以选择输出不同的调试信息。
根据具体的需要,可以选择输出GAP、GATT、L2CAP(逻辑链路控制和适配层协议)或HCI(主机控制接口)层的调试信息。
通过配置参数,可以将这些调试信息打印到UART接口。
5.调试输出分析一旦开启了BLE协议栈的调试输出,就可以在UART调试工具中观察到相应的调试信息。
这些信息通常包括与设备的连接状态、数据包的传输过程、GAP和GATT命令的处理等。
通过分析这些信息,可以快速定位、排查问题。
6.数据分析与解析BLE通信过程中的数据包是经过特定格式编码和解码的。
三种蓝⽛架构实现⽅案(蓝⽛协议栈⽅案)蓝⽛架构实现⽅案有哪⼏种?我们⼀般把整个蓝⽛实现⽅案叫做蓝⽛协议栈,因此这个问题也可以这么阐述:蓝⽛协议栈有哪些具体的架构⽅案?在蓝⽛协议栈中,host是什么?controller是什么?HCI⼜是什么?⼤家都知道,不同的应⽤场景有不同的需求,因此不同的应⽤场景对蓝⽛实现⽅案的要求也不⼀样,从⽽催⽣不同的蓝⽛架构实现⽅案,或者说蓝⽛协议栈⽅案。
架构1:host+controller双芯⽚标准架构蓝⽛是跟随⼿机⽽诞⽣的,如何在⼿机中实现蓝⽛应⽤,是蓝⽛规格⾸先要考虑的问题。
如果你仔细阅读蓝⽛核⼼规格,你会发现规格书更多地是站在⼿机⾓度来阐述的,然后“顺带”描述⼀下⼿机周边蓝⽛设备的实现原理。
如⼤家所熟知,⼿机⾥⾯包含很多SoC或者模块,每颗SoC或者模块都有⾃⼰独有的功能,⽐如⼿机应⽤跑在AP芯⽚上(⼀般⽽⾔,Android或者iOS开发者只需跟AP芯⽚打交道),显⽰屏,3G/4G通信,WiFi/蓝⽛等都有⾃⼰专门的SoC或者模块,这些模块在物理上都会通过某种接⼝与AP相连。
如果应⽤需要⽤到某个模块的时候,⽐如蓝⽛通信,AP会⾃动跟蓝⽛模块交互,从⽽完成蓝⽛通信功能。
市场上有很多种AP芯⽚,同时也有很多种蓝⽛模块,如何保证两者的兼容性,以减轻⼿机的开发⼯作量,增加⼿机⼚商蓝⽛⽅案选型的灵活性,是蓝⽛规格要考虑的事情。
为此,蓝⽛规格定义了⼀套标准,使得⼿机⼚商,⽐如苹果,⽤⼀颗新AP替换⽼AP,蓝⽛模块不需要做任何更改;同样⽤⼀颗新蓝⽛模块换掉⽼蓝⽛模块,AP端也不需要做任何更改。
这个标准把蓝⽛协议栈分成host和controller两部分,其中host跑在AP上,controller跑在蓝⽛模块上,两者之间通过HCI协议进⾏通信,⽽且host具体包含协议栈那些部分,controller具体包含协议栈那些部分,两者之间通信的HCI协议如何定义,这些在蓝⽛核⼼规格中都有详细定义,因此我把它称为双芯⽚标准⽅案。
深入浅出低功耗蓝牙(BLE)协议栈低功耗蓝牙(BLE)协议栈是一种用于低能耗设备间通信的无线通信技术。
它主要用于物联网设备、传感器和其他低功耗设备之间的通信。
本文将深入浅出地介绍BLE协议栈的工作原理和主要组件,以及其在物联网和其他领域的应用。
BLE协议栈由多个层级组成,包括物理层(PHY)、链路层(LL)、主机控制器接口(HCI)、主机层(Host)和应用层(Application)。
每个层级负责不同的功能,并通过各自的接口与上下层通信。
物理层是BLE协议栈的最底层,负责将数据转化为无线信号进行传输。
BLE使用2.4GHz频段进行通信,采用频率跳变技术来抵抗干扰和提高传输稳定性。
链路层建立在物理层之上,负责处理与设备之间的连接和数据传输。
它包括广播(Advertisement)和连接(Connection)两种传输模式。
广播模式用于设备之间的发现和配对,而连接模式用于实际的数据传输。
主机控制器接口(HCI)是链路层与主机层之间的接口,负责传输控制命令和事件信息。
主机层负责处理设备的连接管理、数据传输和高层协议等任务。
应用层则是最上层,负责处理具体的业务逻辑和应用程序。
BLE协议栈的工作流程一般分为广播、扫描、连接和数据传输四个阶段。
在广播阶段,设备会周期性地发送广播包,以便其他设备发现和连接。
扫描阶段是其他设备主动并发现正在广播的设备。
连接阶段是建立起连接后的设备之间进行数据传输。
数据传输阶段则是实际进行数据交换的阶段。
BLE协议栈的优势在于其低功耗、简单易用和成本低廉。
它适用于大量的物联网设备,如健康追踪器、智能家居设备等。
同时,BLE协议栈也在其他领域有着广泛的应用,例如无线鼠标、键盘、耳机等。
总之,低功耗蓝牙(BLE)协议栈是一种用于低能耗设备间通信的无线通信技术,具有低功耗、简单易用和成本低廉等优势。
它在物联网和其他领域有着广泛的应用,为设备间的通信提供了可靠和高效的解决方案。
ble方案BLE方案1. 简介BLE(Bluetooth Low Energy)是一种低功耗蓝牙技术,旨在提供短距离通信功能,并使能低功耗连接,适用于便携设备和物联网应用。
BLE方案通过简化蓝牙协议栈和减少功耗,实现了较长的电池寿命和更低的成本。
2. BLE技术特点2.1 低功耗BLE采用周期睡眠和广播机制,使得设备在大部分时间处于睡眠状态,只有当有数据传输需求时才唤醒设备。
这种低功耗策略大大延长了设备的电池寿命。
2.2 短距离通信BLE的通信距离通常在几十米以内,相比传统蓝牙技术(Classic Bluetooth)的几百米,BLE在传输距离上更适用于短距离通信场景。
2.3 快速连接BLE在设备之间建立连接的速度比传统蓝牙更快,通常可以在几毫秒的时间内完成连接过程,这使得在实时性要求较高的应用中更加可靠。
3. BLE协议栈BLE协议栈分为物理层(PHY)、链路层(LL)、主机控制器接口(HCI)以及应用层(GAP、GATT等)等不同层级,协议栈的主要功能如下:3.1 物理层(PHY)物理层是实现无线通信的硬件和传输机制,用于传输数据和控制信息。
3.2 链路层(LL)链路层负责处理BLE封包的发送和接收,包括封包的组装、拆解和差错校验等功能。
3.3 主机控制器接口(HCI)HCI是主机与控制器之间的接口,负责控制和管理BLE通信过程。
3.4 应用层(GAP、GATT等)应用层提供了BLE的一些基本功能,例如设备发现、连接管理、数据传输和配置等。
4. BLE应用场景4.1 个人健康监测BLE技术广泛应用于个人健康监测领域,如智能手环、智能手表等。
这些设备可以实时监测用户的心率、步数、睡眠质量等健康指标,并将数据通过BLE传输到手机或云端进行分析和记录。
4.2 室内定位与导航BLE技术可以实现室内定位和导航功能,通过在建筑物内部部署BLE信标,手机或其他设备可以通过接收信标的信号来确定自身位置,并提供导航服务。
MT254xCoreS A T 指令手册V2.0版本更新记录目录第1章常用指令 (5)1.1 注意事项 (5)1.2 A T+ ——测试 .................................................................................................. 5 1.3A T+HELP ——帮助查询 . ................................................................................. 5 1.4 A T+VERS ——软件版本查询 . ......................................................................... 5 1.5 A T+NAME? ——查询/设置模块名称 .............................................................. 6 1.6 AT+RENEW ——恢复出厂设置 ...................................................................... 6 1.7 AT+RESET ——重启模块................................................................................ 6 1.8 AT+ROLE? ——查询/设置主从模式 ............................................................... 6 1.9 AT+NOTI? ——查询/设置是否把当前连接状态通知给用户 . .......................... 6 1.10 A T+IMME? ——查询/设置模块工作方式........................................................ 6 1.11 AT+START ——开始工作 . ............................................................................... 7 1.12A T+TYPE? ——查询/设置模块密码验证类型 . (7)第2章串口指令 (8)2.1 A T+BAUD? ——查询/设置波特率 ..................................................................8 2.2 A T+FLOW? ——查询/设置硬件流控 . (8)2.3 A T+PARI? ——查询/设置串口校验 ................................................................. 8 2.4A T+STOP? ——查询/设置停止位 (8)第3章从机指令 (9)3.1A T+ADVI? ——查询/设置广播时间间隔 (9)3.2 A T+POWE? ——查询/设置模块发射功率 ....................................................... 9 3.3A T+PWRM? ——查询/设置模块自动进入休眠的时间 (9)第4章主机指令 (10)4.1 A T+SCAN ——搜索可连接模块 . ...................................................................10 4.2 A T+SHOW? ——查询/设置模块在手动搜索时是否返回名字 . ......................10 4.3 A T+CON[para1] ——连接指定蓝牙MAC 地址的从模块 . .............................10 4.4 A T+CONN[para1] ——连接搜索返回的模块 . ................................................ 10 4.5A T+CONNL ——连接最后一次连接成功的从模块 . (11)第5章连接相关指令 (12)5.1 A T+ISCON ——查询当前模块是否处于连接状态 ........................................12 5.2 A T+DISCON ——断开连接 (12)5.3A T+CLEAR ——清除模块配对信息 . (12)5.4 A T+RADD ——查询成功连接过的远程设备地址 . (12)5.5A T+SAVE? ——查询/设置模块成功连接后是否保存连接地址 . (12)第6章模块信息相关指令 . (13)6.1A T+PASS? ——查询/设置配对密码 . (13)6.2 A T+MAC ——查询本机MAC 地址...............................................................13 6.3 A T+RSSI ——读取 RSSI 信号值(可作为远控指令) . (13)6.4A T+TEMP ——查询模块温度(可作为远控指令) . (13)第7章 IO 监控指令 (14)7.1 A T+LED? ——查询/设置LED 输出状态 . ......................................................14 7.2 A T+PDIR? ——查询/设置PIO 口的输入输出方向(可作为远控指令) ......14 7.3A T+PDAT?——查询/设置PIO 口的输入输出状态(可作为远控指令) ........14第8章电源管理指令 (15)8.1 A T+SLEEP ——让模块进入休眠状态 ...........................................................15 8.2 A T+WAKE ——将模块唤醒至正常工作状态 (15)8.3 A T+BATC? ——查询/设置电量信息广播开关(可作为远控指令) (15)8.4A T+BATT ——查询电量信息(可作为远控指令) (15)第9章模块出厂设置 (16)第1章常用指令1.1 注意事项1 所有的A T 指令中的符号,如问号(?、冒号(:,都是英文半角格式,需要携带参数para 的指令必须显式地添加中括号[],指令末尾不携带”\r\n”。
深⼊浅出低功耗蓝⽛(BLE)协议栈BLE协议栈为什么要分层?怎么理解BLE“连接”?如果BLE协议只有ATT层没有GATT层会发⽣什么?协议栈框架⼀般⽽⾔,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝⽛协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。
在深⼊BLE协议栈各个组成部分之前,我们先看⼀下BLE协议栈整体架构。
如上图所述,要实现⼀个BLE应⽤,⾸先需要⼀个⽀持BLE射频的芯⽚,然后还需要提供⼀个与此芯⽚配套的BLE协议栈,最后在协议栈上开发⾃⼰的应⽤。
可以看出BLE协议栈是连接芯⽚和应⽤的桥梁,是实现整个BLE应⽤的关键。
那BLE协议栈具体包含哪些功能呢?简单来说,BLE协议栈主要⽤来对你的应⽤数据进⾏层层封包,以⽣成⼀个满⾜BLE协议的空中数据包,也就是说,把应⽤数据包裹在⼀系列的帧头(header)和帧尾(tail)中。
具体来说,BLE协议栈主要由如下⼏部分组成:PHY层(Physical layer物理层)。
PHY层⽤来指定BLE所⽤的⽆线频段,调制解调⽅式和⽅法等。
PHY层做得好不好,直接决定整个BLE芯⽚的功耗,灵敏度以及selectivity等射频指标。
LL层(Link Layer链路层)。
LL层是整个BLE协议栈的核⼼,也是BLE协议栈的难点和重点。
像Nordic的BLE协议栈能同时⽀持20个link(连接),就是LL层的功劳。
LL层要做的事情⾮常多,⽐如具体选择哪个射频通道进⾏通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进⾏重传,以及如何对链路进⾏管理和控制等等。
LL层只负责把数据发出去或者收回来,对数据进⾏怎样的解析则交给上⾯的GAP或者GATT。
HCI(Host controller interface)。
HCI是可选的(),HCI主要⽤于2颗芯⽚实现BLE协议栈的场合,⽤来规范两者之间的通信协议和通信命令等。
本系列教程将结合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第十一节串口通信在软件开发过程中调试是一个很关键的过程,而调试用的最多的手段就是打印Log,嵌入式平台很少有显示设备,所以我们需要将信息通过串口打印到PC端。
MT254xboard上已经通过RS232芯片将UARTC连接到DB9,我们只需要将DB9连接到电脑即可,UARTO对应的外部设备10引脚关系为:P0_2——RX , P0_3——TX 。
我们需要将这两个10配置为复用功能,CC2540的USART可以配置为SPI模式或者异步UART模式,这里我们需要配置为异步UART模式。
首先配置10为UART模式:PERCFG &= ~0x01; // 配置UART为位置1P0SEL = 0x3c; // P0_2 ,P0_3, P0_4, P0_5用作串口功能P2DIR &= ~0XC0; // P0 优先作为UART0配置UART0寄存器,将UART0配置为8N1模式,波特率为115200。
U0CSR |= 0x80; // UART 方式U0GCR |= 11; // U0GCR 与U0BAUDE合U0BAUD |= 216; // 波特率设为115200UTX0IF = 0; // 清除中断标志U0CSR |= 0X40; // 允许接收IEN0 |= 0x84; // 开总中断,接收中断这里采用中断方式来接收串口数据,并在中断中回调应用层的接收处理函数。
#pragma vector = URX0_VECT0R__interrupt void UART0_ISR (void ){uint8 ch;URX0IF = 0; // 清中断标志ch = U0DBUF;RecvCb (ch )} }为了测试串口的通讯功能, 这里我们通过串口接收命令的方式来控制LED 的亮灭和蜂鸣器的响和停止,并且显示当前的状态。
根据串口输出提示,发送对应字符可以实现相应功能, 并且显示状态。
LED 灭蹩鸣器停I 打弃立件I文件名发送文件I停止 保存窗口sussnl Sft I - ICEM10 二矣谢串口巒冋显示渤卬俺甲却 «Qiffli5tTMsscaM .'115200 审 r HE 暖送 作音:鼻阳盅CTD 卅虾申子网旳年 $ 审 ⑵旳 刑此厂友氐新订最祈師本下载地站:1 〒 厂却拨谟1 佃次 Kttp ://www. daxi a.MWTL I * a J/s s eoih r ar 迪WE ▼ 学符串输X 框:」 殓闻桿出临的建讪! Ktone 二丿 _一 :九二•工rf_iwww.daxia.cor [&4R:136|COM18BU 幵{廿ZOObpMU 天校輻无2乙/莎和?酿〒< 殛ssconnA 作耆:最呻基〔」」LEmail :mcu5E@1 &3,com h E00了厲-口|择选 符'la宀产口V-响停曲冃一Flash 的读写嵌入式系统中需要存储数据,而片内的 Flash 资源很匮乏,所以我们经常需要使用SpiFlash 来存储数据,MT254xboard 中板载了一个 512Kbyte 的Flash ,下面我们来驱动此 Flash 。
上一小节中我们用 SPI 的方式驱动了 LCD12864这节我们继续用 SPI 来驱动板载的 Flash , <GD25Q40.pdf>详细的说明了如何驱动这片 Flash ,在此不做累述,我们复制LCD12864 工程,重命名为 SpiFlash ,在此工程中添加 GD25Q40勺两个驱动文件。
下面我们来检测这个 Flash ,检测的方法为,全部写入 OxAA,然后再读出,对比是否为OxAA ,如果是,那Flash 是没有问题的,否则Flash 可能已经有坏块。
具体的代码见例程,这个过程所需要的时间取决于我们需要检测的区域大小, 如果完全检测,则可能需要几分钟的时间。
int main (void ){SysStartXOSC ();LCD12864」nit () ; // LCD 初始化 GD25Q40」nit () ; // Flash 初始化 LCD12864_DisStr (0, “Flash Check.。
”);sprintf(LCDBuf,“Flash ID : %04X , GD25Q40_ReadlD()) ; //读取器件 IDLCD12864_DisStr (1 , LCDBuf )uin t32 iCnt = 0;GD25Q40_EraseChip () ; // 擦除整片Flash 大约需要10S LCD12864 DisStr (2,Erase Chip Complete ”)DebugVy'orkEcace// 全部写入0xAAconst uint8 Write = 0xAA;for ( iCnt=0; iCnt < CHECK_ADDR_RANGE; iCnt++ ) { GD25Q40_Write( &Write ,iCnt ,1 ); // 写入0xAA } // 读取Flash 内部的值,与写入的值对比uint8 Read;for ( iCnt=0; iCnt < CHECK_ADDR_RANGE; iCnt++ ) { GD25Q40_Rea(d &Read,iCnt ,1 ) ;if ( Read != Write ){LCD12864_DisStr (3,“Flash Error ”);break;}}// 写入的值与读出的值完全一样if (iCnt >= CHECK_ADDR_RANG)E{LCD12864_DisStr (3,“Flash Check Success ”);GD25Q40_EraseChip () ; // 再次擦除while (1);return 0;}MT254X蓝牙4.0开发板FlashI 第十三节BLE协议栈简介c 」ayTI的协议栈分为两部分:控制器和主机。
对于 4.0以前的蓝牙,这两部分是分开的。
所有profile 和应用都建构在GAP或GATT之上。
根据这张图,我们从底层开始介绍。
TI的这款CC2540器件可以单芯片实现BLE蓝牙协议栈结构图的所有组件,包括应用程序。
HostGeneric Access Profile (GAP)Generic Attribute Profile (GATT)Security Wanager (SM)Attribute Protocol(ATT)Logical Link Control and AdaptationProtocol (L2CAP)ControllerHost-Controller Jnterface (HCI)Link Layer (LL)1.1.1 PHY 层1Mbps自适应跳频GFSK(高斯频移键控),运行在免证的 2.4GHz。
1.1.2 LL 层LL层为RF控制器,控制设备处于准备(standby )、广播、监听/扫描(scan )、初始化、连接,这五种状态中一种。
五种状态切换描述为:未连接时,设备广播信息,另外一个设备一直监听或按需扫描,两个设备连接初始化,设备连接上了。
发起聊天的设备为主设备,接受聊天的设备为从设备,同一次聊天只能有一个意见领袖,即主设备和从设备不能切换。
1.1.3 HCI 层HCI层为接口层,向上为主机提供软件应用程序接口(API),对外为外部硬件控制接口,可以通过串口、SPI、USB来实现设备控制。
Physical Layer (PHY}1.1.4 L2CAP 层L2CAP层提供数据封装服务,允许逻辑上的点对点通讯。
1.1.5 SM 层SM层提供配对和密匙分发,实现安全连接和数据交换。
1.1.6 ATT 层ATT层负责数据检索,允许设备向另外一个设备展示一块特定的数据称之为属性,在ATT 环境中,展示属性的设备称之为服务器,与它配对的设备称之为客户端。
链路层的主机从机和这里的服务器、客服端是两种概念,主设备既可以是服务器,也可以是客户端。
从设备毅然。
1.1.7 GATT 层GATT层定义了使用ATT的服务框架和配置文件(profiles )的结构。
BLE中所有的数据通信都需要经过GATT。
GATT负责处理向上与应用打交道,其关键工作是把为检索工作提供合适的profile 结构,而profile 由检索关键词( characteristics )组成。
1.1.8 GAP 层GAP直接与应用程序或配置文件(profiles )通信的接口,处理设备发现和连接相关服务。
另外还处理安全特性的初始化。
对上级,提供应用程序接口,对下级,管理各级职能部门,尤其是指示LL 层控制室五种状态切换,指导保卫处做好机要工作。
1.2 TI 协议栈源码介绍在第二章我们讲解了源码的安装,这里我们就来剖析源码的结构。
打开协议栈目录我们可以看到下图:JSS2014/5/23 10f[>2Acres series3014/5/8 16:50文作Companerrts2014/5/23 】0:D2Dxzm 焙nts2014/5/23 1 0L&3丈牛农Projerts2014/5/23 10r02山si2014/6/30 10L298LE_12313/W/S 5:15F&xit Reader PD*”17 KB P?l EULApdf201 7:52Foxit Reader RD….224 KB README.t)ct2013/11/8 8:01TXT文鞋乂 .屮J'J/三1九*」1心CUI BLE源码:目录名内容说明Accessories 一些工具和已经编译好的Hex文件此文件夹中有Btool的安装包、USB-CDC的驱动。
ComponentsHal驱动,OSAL源码、协议栈通用源码此文件夹是OSAL各层组件的实现Documents帮助文档协议栈说明文档,这是学习BLE最好的资料。