文档详情

BLE4.0蓝牙概述

小**
实名认证
店铺
DOC
312.50KB
约10页
文档ID:174691734
BLE4.0蓝牙概述_第1页
1/10

蓝牙设计1.问:什么是蓝牙通信?答:蓝牙通讯最初设计初衷是方便移动()与配件之间进行低成本、低功耗无线通信连接,现在已经成为 IEEE802.15 标准,得到全球上万家厂商支持2.问:如果从事蓝牙开发有没有前途?答:严格地说,这不是一个技术问题,而是一个世界观问题什么是前途?如果单纯是金钱,从事技术是不太可能暴富的(注意比尔.盖茨是个技术商人);如果想用你所能改善世界,这是可能的,毕竟蓝牙的主要用途是民用附带说一句,考虑赚钱和改变世界是中国和西方人世界观的主要差别3.问:蓝牙有什么优势?答:首先是低功耗,以 BLE4.0 为例,一节钮扣电池在静态工作状态可以支持一年;其次是低成本,TI 公司的 CC2540 蓝牙 SOC 方案芯片出售价仅 1 美元,可以让人们低廉使用蓝牙技术;再次是开放性,2.4GHz 的频段全球开放,没有政府监管;最后是适合时代潮流,现在是的时代,蓝牙技术本来就为它而生4.问:蓝牙 4.0 协议和 BLE 是什么?答:蓝牙 4.0 协议是 2010 年 6 月由 SIG(SpecialInterestGroup)发布的最新标准,它有 2 种模式:BLE(Bluetoothlowenergy)只能与 4.0 协议设备通信,适应节能且仅收发少量数据的设备(如家用电子);BR/EDR(BasicRate/EnhancedDataRate),向下兼容(能与 3.0/2.1/2.0 通信),适应收发数据较多的设备(如耳机)。

5.问:目前支持蓝牙 4.0 的移动设备有哪些?答:苹果公司的 iPhone4S、iPhone5、miniPad 和 iPad3;小米厶厶三星公司的 GalaxySIII 和 NoteII;HTCONE 系列6.问:如何开始蓝牙 4.0 的开发呢?答:概括地讲至少以下三方面的准备吧硬件方面,需要购买 TI 公司蓝牙迷你套件,包括蓝牙 USB 电子狗和 KeyFob 以及 CCDebugger 器;软件方面,安装 IARfor8051,TI 公司 BTool 软件;技术知识,CC2540/41BLESoftwareDeelopersGuide1.3 和CC2540/41UsersGuide7.问:刚开始接触蓝牙如何快速上手?答:理论联系实践是比较好的学习方法,建议先学习CC2540/41BLESoftwareDeelopersGuide 然后将SimpleBLEPerepheral 工程导入 IARfor8051,结合电子狗和 BTool,调试蓝牙通讯中的广播/连接/绑定/访问光看书不动手,空虚;不看书光动手,浅薄8.问:IAR 调试 CC2540 时程序导入到了芯片的 Flash 中了吗?答:确实。

CC2540 是 SOC(SystemOnChip)芯片,它的内核就是 8051,它需要从 ROM 中取指令,从RAM 中取数据来运行仿真时,CCDebugger 会把程序导入芯片 Flash 中,再执行仿真9问:当 IAR 调试中出现警告缺少断点,无法运行到 main)答:出现这个错误的原因是,IARfor8051 最多只能设置 3 个断点,如果设置过多,当程序下载后,将出现些调试警告解决的方法很简单,去掉一些断点,再重新载入程序10.问:为什么 IAR 调试时有很多变量无法查看它的值?答:主要的原因是 IAR 编译器设置了优化功能,函数中的自动变量以及一些静态函数都被优化过了,所以没有生成对应的调试信息,无法查看和设置断点解决的方法是关闭编译器的优化功能,右键点击工程的Options-C/C+Compiler-Optimizations 中的 Level 设置为 None11.问:蓝牙协议分层很多且比较复杂,该如何掌握呢?答:蓝牙协议从应用层到物理层一共分了 8 层,看上去比较复杂且 API 函数很多首先不必要知道每一层的具体实现,掌握与应用紧密关联 GAP/GATT(或者 GAPRole 和 GATTProfiles)层就可以满足大部分设计需要;每一层的软件都是通过 OSAL 来调用的,因此需要了解 OSAL 的基本原理:任务/事件/消息/定时器/动态分配内存;最后把蓝牙通讯过程理解,将有助于开发。

12.问:OSAL 是一个操作系统吗?答:OSAL(OperatingSystemAbstractionLayer)操作系统抽象层,它不是一个真正的操作系统(它没有ContextSwitch 上下文切换功能),但它巧妙地组织各任务,支持任务优先级,任务之间可以通过事件和消息来通信,为任务提供软定时器和动态内存分配要避免的陷阱是,应用任务的单个函数运行时间不能太长(如操作大批量数据的 Flash 写),否则它无法及时调度高优先级的 LL(LinkLayer)任务而导致蓝牙通信中断13.问:蓝牙节点是如何组成微微网的呢?答:蓝牙节点组网中,只能存在一个主节点(Central)和多个从节点(Peripheral),从节点是发出信号者,主节点是扫描且发起连接者14.问:主节点和从节点通信的过程是怎样的呢?答:当从节点发出广告信号(包括设备地址和设备名称之类的附加信息);主节点收到此广告信号后,向从节点发出扫描请求;当从节点回应扫描时,就完成了设备发现过程接着主节点向从节点发出连接请求(包括连接时隙、从节点待机次数、连接超时值),从节点回应连接,就完成了建立连接为了安全起见,一些数据的访问需要认证,它的完成是这样的:一方(可以是主节点,也可以是从节点)向另一方索要 6 位数字的密码,之后,两个节点彼此交换安全密钥用于加密和认证,此过程称为配对。

认证的过程比较繁琐,BLE 协议支持两节点保存认证的安全密钥(一般是非易失性存储器中),以便于两节点下次连接后快速认证,这就是绑定技术卩eripheralDevice15.问:蓝牙通信中两个节点如何交换数据?答:这是蓝牙通信中最让初学者迷惑的地方大部分通信,尤其是 TCP/IP,交换数据的婚介是数据包,但蓝牙通信中,工程师找不到数据包访问方式,于是就产生疑问其实蓝牙最底层也是基于无线数据包交换,只是通过层层封装,交付给工程师的 API 接口就变成了 Client 访问 Server 的方式16.问:Client 和 Server 节点是如何定义呢?答:通俗地说吧,Server(服务器)就是数据中心,Client(客户端)就是访问数据者特别说明,它与主/从设备是独立的概念:一个主设备既可以充当 Server,又可以充当 Client;从设备亦然17.问:Server 是如何提供数据呢?答:Server 首 先 将 一 个 服 务 按 属 性/句 柄/数 值/描 述 这 种 格 式 予 以 组 织,然 后 调 用 API 函 数GATTServApp_RegisterService 将服务数据进行注册。

举个实例吧,设提供一个电池电量服务字节,它允许Client 读取,数据为一个 8 比特无符号数(0100%),它的组织如下:022500192A,这 5 个数据(小端格式)分别是:0 x02=只读属性,0 x0025=句柄;0 x2A19=服务 UUID18.问:不明白 Server 提供服务中的 UUID?答:UUID(UniversalUniqueIdentifier)全球惟一标识符,本来是 SIC 组织分配给特定蓝牙服务的标识,如分配 0X2A25 为设备序列号的 UUID,这样任意蓝牙设备都可以通过它得到另一个设备的序列号打个类比,它就像书名,如现代操作系统,所有人一看就知道它是计算机大师 AndrewS.Tanenbaum写的书19.问:什么是 Server 提供服务中的句柄呢?答:句柄(Handle)就是服务数据在数据中心的地址,当所有的服务数据组织起来后,它总得有个先后顺序,某个服务的位置就是它的句柄还是上面的类比,如果想去图书馆借阅现代操作系统,需要查明该书在哪一层楼,哪个房间,这就是该书的 Hanle20.问:为什么 Server 提供的服务中有描述?答:有些服务是有描述(Descriptor)的,它是用于 Client 配置该服务的功能(通知或者显示)。

像某人没有借到现代操作系统该书(可能是被别人借光了),他(她)可以打个给图书馆工作人员,请求一旦该书可以借阅了给他一个通知,这个过程相当于配置该书的 Descriptor21.问:服务的属性与描述有区别吗?答:有区别,服务的属性是 Server 设置访问权限就像图书馆的工作人员可以设置现代操作系统仅能在阅览室看不能外借(只读),或者即可以看也可以外借(读/写)22.问:Client 如何访问 Server 的服务呢?答:大致分三类:读取服务的值,需要知道服务的 UUID 或者 Handle;写服务的值,需要知道服务的Hanle;写服务描述符,需要知道该 Descriptor 的 Hanle23问:如何知道一个服务的 Handle?答:根据服务的 UUID 调用 API 函数 GATT_ReadUsingCharUUID协议栈会返回该服务的 Handle特别注意的是,一个服务的 Descriptor 的 Handle 总是该服务的Handle+1,如电池电量服务的 Handle 是 0 x0025,那么它的 Descriptor 的 Handle 是 0 x002624.问:Server 可以访问 Client 吗?答:蓝牙通信中,Server 不能直接访问(读/写)Client,但是可以通知(Notification)Client,通知的前提是 Client 通过写 Descriptor 使能通知功能。

例如,某 Server 发现电池电量已经低于安全阀值,它可以调用GATT_Notification 通知所有已连接的 Client,但是 Client 接收后如果处理是它自己的事情25.问:如果得知电池容量?答:任何使用电池供电的设备都必须精确监控电池容量,否则设备可以突然断电而停止工作,它的基本原理是通过 ADC(模数转换器)计算电池电压以 CC2540 芯片用一钮扣电池为例,电池电压从 2.0v3.0v,即电量的 0%100%;CC2540 有一 10 比特的 ADC,量程范围为 0511,参考电压为 1.25v,最大测量电压为 3.75v,以上信息可以得知:(v/3)/1.25*511=adc,则 2.0v=273adc,3.0v=409adc,根据下图可以很容易得知 ADC 转换为电压的公式:Percentage/(X273)=100/136=25/34,变换后为:Percentage=(X-273)*25/34,为四舍五入提高计算精度则有:答:会,以 TI 公司的 CC2540 为例,它支持 4 种发射功率选择:4dBm、0dBm、-6dBm 和-23dBm,按无线电功率定义:=10lg(Pwr/1mW),以上 4 种分贝值换算成瓦特为:2.51mW、1mW、0.251mWdBm和 0.005mW,有效通信距离分别为:30 米、10 米、7 米和 3 米。

27.问:如何知道两个蓝牙通信节点之间的距离?答:要知道蓝牙通信节点(如和蓝牙设备)之间的距离,最容易实现的方法是通过读取接收 RSSIReceivedSignalStrengthIndication)值来计算无线通讯中功率与距离的关系如下:PrdBm)=10-Ti-lgr其中 A 可以看作是信号传输 1 米远时接收信号的功率,n是传播因子(它受障碍,温度和湿度等影响),r 是节点之间的距离当确定了常数 A 与 n 的值后,距离 r 就可以根据 P(dBm)计算出来R28问:如何获取蓝牙节点的接收 RSSI 值?答:具体的设备接收 RSSI 值的方法不一样,以 iPhone 为例,iOS 提供 API 函数获取 RSSI 值;TI公司的 CC2540 芯片的 BLE 协议栈中,首先将读取 RSSI 值回调函数挂载到 gapRolesRssiRead_t 类型的指针下,建立连接后,主设备调用 GAPCentralRole_StartRssi(),从设备调用GAPRole_SetParameter(GAPROLE_RSSI_REA_RATE这样就可以定时读取接收的 RSSI 值了29.问:如何开展读取 RSSI 值的实验?答:读取 RSSI 值的实验可以这样搭建,主设备固定位置,向从设备发送信号,从设备 LED 光和 Buzzer报警为通信成功,逐次移动从设备,而获取 RSSI 值随物理距离之间的关系。

下图是笔者做实验的数据:Distance(m)12345678910RSSI(dBm)-47-59-73-80-80-79-85-88-86Loss(p)091127250322249实验器材为 2 块 CC2540 芯片,主芯片发射功率为 4dBm(2.51mW),Loss 是通信节点中失败次数30.问:如何将接收 RSSI 实验数据得到距离计算公式呢?答:最好的工具是 EXCEL 软件,以上表中的实验数据和 EXCEL2007 为例首先选中 Distanee 和 RSSI两行,点击“插入-散列图”,软件会自动生成如下图:选取其中任意点,点右键,“添加趋势线-对数”,将会出现下图:可见 RSSI 与距离的关系是比较符合指数函数,再点击显示公式此时得到指数函数公式为:y=-49.5317.7In(x),再把自然对数换成 10 常用对数,则有:y=-49.5340.71lg(x)通过以上几步就轻松得到 RSSI 与距离之间的计算公式。

下载提示
相关文档
正为您匹配相似的精品文档