如何拯救割裂的蓝牙2.0和4.0的区别4.0

如何拯救割裂的蓝牙4.0_百度知道
如何拯救割裂的蓝牙4.0
提问者采纳
主角是最后的逃亡皇帝。这个呢是明末清初的小说,很不错,和鞑子们周旋,还真有一本符合您的问题这个呀,跑到缅甸建立了流亡政府,永历大帝
网络时代,智领未来
男性泌尿科
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
360防丢卫士会重蹈智键的覆辙吗?
关于,我们已经讨论得足够多了。尤其在2013年,同类产品层出不穷,仿佛大家一时找到了通往未来的风口。但一年多的时间过去了,这个市场并没有像人们预期的那样全面推广开来。360此时推出“防丢卫士”,难道蓝牙防丢器的春天就要来了吗?
这样一类产品,的确是有存在的必要。因为我们经常会有找不到东西的情况发生。就在昨天,宅客君(微信公众号:letshome)还在为找不到钥匙而抓狂,最后发现是被夹在一本书里,要不是晚上回去翻了一下书,怕是如何也找不到了。
需求是存在的,但解决方法并没有那样尽如人意。一方面是,主要是Android手机蓝牙4.0普及率不高,而且标准不统一,需要做大量兼容适配工作;另外一方面,这种依靠接收蓝牙信号的强弱来判定相隔距离的做法受干扰因素很多,很容易出现误报或者不报的情况。比如,你用防丢器绑定了一个钥匙,回家后就放在桌子上,很有可能你去一趟洗手间,手机就会发出警报。类似这样糟糕的体验只会让用户越来越感觉到厌烦。
360为什么要做防丢卫士
防丢卫士的负责人张章告诉宅客君,一是看到用户有这个需求,另外他们预计在接下来半年到一年的时间里,蓝牙4.0的普及将有实质性的突破。“但又不能等到时机完全成熟以后再去做”,因为硬件产品的更新迭代会有一个比较长的周期。
团队十几个人都是第一次做硬件产品,从设计到最终量产这中间经历了各种各样的“坑”。而且很多问题事先无法预料,只能等到模具做出来以后才会发现。比如,产品的结构容易影响到信号,比如薄厚程度会影响实际的观感等,一环一环的流程下来,有时候只能全部推倒重来。
即便如此,张章认为,他们的进度还是很快的,从5月份真正开始做这个产品,到7月中旬内测,不到三个月的时间。内测期间,他们招募了360个用户,从内测到正式销售中间也仅隔了几周的时间,内测期间“主要是为了验证市场,看用户对这类产品的认识程度怎么样,以及有哪些使用上的障碍”。但是产品上基本没有什么改进(要想改进也要等几个月后的下一版)。
培育用户仍是个难题
不知道我们会有多少次找不到某个东西的情况出现,每到这个时候,我们就会想,要是能给它打个电话问它躲在哪里就好了。所以,蓝牙防丢器的使用场景肯定是有的,关键是,如何让更大范围的用户接受它。
在这之前,已经有那么多家公司在培育市场了,但它仍是一个小众产品。除了等待蓝牙4.0标准的普及之外,360还能做什么?
实际上,让用户打开蓝牙这个功能就是一个很大的门槛,需要整个行业一起来努力。具体地说,就是给用户一个可解决实际问题的产品。为适应更多的场景需求,防丢卫士被设计成小巧的圆形,再加上附赠的挂件,可以用于钥匙、公交卡、遥控器、钱包等常用物品。
在初期用户场景需求不明的情况下,做一款通用的标准版也是一种很稳妥的策略,张章说道,以后可能会推出专用于宠物等特定场景的版本。
除此之外,防丢卫士还有一个远大的规划:搭建一个寻物的公益平台。通过拥有4到5亿装机量的卫士激活更多的蓝牙热点,然后提供互助查找的功能。如果你丢了东西,可以将它标记为“丢失”,如果有人感知到设备的存在,系统将会把物品的地址发送给你。
这当然是个很好的概念,而且已经有其他团队在做了。但要想真正达到实质的效果,还得等到用户数量达到一定规模才行,否则,那就只能停留在概念阶段。
产品体验不好一切免谈
目前,防丢卫士还仅提供Android客户端的下载,iOS版本暂未推出。是不是很奇怪?在苹果手机基本全部支持蓝牙4.0的情况下,居然不优先支持苹果用户。张章解释道,这是因为苹果系统应用审核机制的问题,他们需要把硬件寄过去给苹果方面做测试,“不过也快了”。
事实上,一定会有用户没留意到它支持什么机型,而一旦买回去发现用不了就开始吐槽。宅客君此前经常在其它产品的评论页面看到这种情况,这是短期内无法避免的。另外,其他同类产品曾遇到的信号连接问题,防丢卫士也同样会遇到。张章表示,他们也会引入场景模式,以减少误报的次数,但他们考虑到用户的接受程度,初期并不会引导用户去设置这些场景,还有一个过程。
宅客君翻看了这款产品的论坛,发现很多的内测用户都写了详细的体验报告。有几个用户都指出了蓝牙连接不顺畅、警报声音过小、定位不够精确的问题。这其中有的属于行业性难题,有的则是考虑不周所致,还得更新迭代,只能通过下一个硬件版本的改进才能逐渐完善。
低价推广,行业“蝗虫”?
防丢卫士售价29.9元,符合条件的360会员用户只要24.9元。跟市面上已有的90块钱起价的产品相比,自是便宜了不少。这当然是360一贯推行的策略,宅客君首先想到的是会否打压在这领域长期耕耘的创业团队。
张章表达了他的看法:这个市场还远没有被拓展开来,如果360通过低价的方式“把用户群做多几十倍几百倍”,让用户养成了打开蓝牙的习惯,那今后一定会有更多的应用场景出现,会有更多的可能,会产生更大的实际价值。首先打出免费旗号的360杀毒软件就是个很好的例子。
实际上,360公司一直在谋求在领域的突破,但是几次尝试都没能如愿。本次借势切入蓝牙防丢器领域,他们自己对销量也没有一个预期,还得看市场的反馈。即将销售的第一批也只有不到10万台,而且需要分批次供货。
整个行业的现状基本是很萧条的景象,国内外都有很多家创业公司在做,通过平台或者自家网站小批量的销售。蓝牙的低功耗特性有着很多的应用空间,人们对于防丢设备也很有需求,但至少在现今看来,这或许不是完美的解决方案。正如智键这类产品,能解决一部分需求,却又无法全面应用,大部分情况下只能沦为鸡肋。
本文转载请注明来源:
【搜索公众号“雷锋网”关注雷锋网微信,新鲜酷炫科技资讯即时掌握。本文版权归雷锋网所有,转载请注明作者与原文链接】
同步到新浪微博
keen on smart home.欢迎一道交流探讨。微信ID:tengfeibai(添加请作简短自我介绍)
合作伙伴:
Copyright (C)
雷锋网-移动互联网智能终端第一媒体 All Rights Reserved 粤ICP备号-1您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
从Noke蓝牙挂锁,看经不住现实考验的先进技术
蓝牙防丢器,当已配对的手机与之超出一定距离(通常是10米左右)时,手机会发出报警;
蓝牙挂锁,当已配对的手机与之靠近时,按一下挂锁即可“解开”。
这两种产品都声称,可以给常常面临“找钥匙之苦”的同学带来帮助:一个防止用户丢钥匙,一个鼓励用户干脆用手机当钥匙。
听起来也确实如此。但实际上,以蓝牙4.0低功耗(Bluetooth Low Energy)技术为核心的防丢器和“智能”挂锁,很难经得住真实生活场景的考验,至少宅客君(letshome)对防丢器的体验是这样的——该响的时候不响,不该响的时候乱响。
带着偏见,宅客君说说为啥不看好 Noke 蓝牙挂锁。最近,这款产品,而且势头相当不错。
换个顺序,先扬后抑。Noke 蓝牙挂锁处理了一个基本的问题:如果手机没电了,可以通过类似电报的密码开锁,“滴[短按]……滴滴[长按]……滴滴……滴”;如果挂锁的电池耗尽,可以换电池,但仍然无法开锁。
先不说,也就是讲你的手机很可能用不了这个产品,这是历史遗留问题,向前方看,主流手机都支持是没问题的。
真正的问题是:
手机配套app需要始终在后台运行。再加上蓝牙开关需要始终打开,所以它会给人一种耗电的感觉。大部分人不喜欢为每天只用一次半次的app,付出这么大的代价。
手机和挂锁配对的速度不够快。如果等待配对的时间超过10秒,人就会感觉烦躁。
贵。基本款就要59美元,近400块人民币,大概也相当于一辆二手自行车的价格了。
慢。2015年2月才量产,海淘到中国,少不了 600 块吧。
其实,之前一款叫同样使用蓝牙4.0技术,可以快速解锁 MacBook 笔记本。它也面临着前两个问题,后台运行耗电(尽管不多,但感觉不好),配对的速度不够快。后两个问题则没有,售价只要 25 元人民币。
解锁小米手机也是基于同样的低功耗蓝牙技术方案,但实际体验如何,未来还有待观察。功夫在细节。
总结:低功耗的蓝牙4.0 BLE技术让很多开发者看到了技术应用空间,但技术可以实现,并不意味着可以经得起现实场景的考验。就连苹果都面临着一个问题,怎么让 iPhone 用户愿意始终打开蓝牙开关 —— 因为iBeacon和 AirDrop 都是基于蓝牙技术的,所以每次iOS系统更新后,蓝牙默认都会自动打开。但大部分人为了节电,使用 iPhone 时又会关掉它,或许只是习惯性的。
本文转载请注明来源:
【搜索公众号“雷锋网”关注雷锋网微信,新鲜酷炫科技资讯即时掌握。本文版权归雷锋网所有,转载请注明作者与原文链接】
同步到新浪微博
手机号 44f5c96f4 ,请自行转码
合作伙伴:
Copyright (C)
雷锋网-移动互联网智能终端第一媒体 All Rights Reserved 粤ICP备号-1EAFo智能工业创新应用论坛
ETFo4G/LTE技术与应用论坛/p>
ETFo无线充电技术与系统设计论坛
上海·汽车电子与零组件技术论坛
第二届 无线通信技术论坛
移入鼠标可放大二维码
由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(5) - 全文
来源:本站整理
作者:ONeal日 19:37
[导读] 本系列教程将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。教程共分为六部分,本文为第五部分。
  本系列教程将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。教程共分为六部分,本文为第五部分:
  第五部分知识点:
  第二十一节 DHT11温湿度传感器
  第二十二节 蓝牙协议栈之从机通讯
  第二十三节 蓝牙协议栈主从一体之主机通讯
  第二十四节 OAD空中升级
  第二十五节 SBL串口升级
  有关TI 的CC254x芯片介绍,可点击下面链接查看:
  同系列资料推荐:
  有关本文的工具下载,大家可以到以下这个地址:
  第二十一节 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 数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由 5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11 的数据格式为:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和。其中校验和数据为前四个字节相加。传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。例如,某次从 DHT11 读到的数据如图所示:
  协议栈DHT11测试
  打开DHT11Example工程,我们在启动事件中对DHT11进行初始化。如果初始化失败则说明没有接传感器。
  然后在定时事件中定时的读取温湿度的值。并将结果通过UART显示到PC端。
  从其中可以看到当前的温度为29摄氏度,湿度为30%,往传感器器哈一口气可以看到温湿度都上升了。
  第二十二节 蓝牙协议栈之从机通讯
  之前都是外围模块的驱动程序,这一节开始,我们进入蓝牙4.0协议栈的核心部分,从机通讯的程序设计。接下来的章节是蓝牙4.0协议栈最为核心的程序设计部分。
  前面的大都是外围器件的实验,这节我们介绍蓝牙通讯中从机的角色,从机的主要工作是对外广播,接受主机的连接,并且接受主机发送过来的数据。这里介绍两个函数:
  bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void *pValue );
  这个函数主要是用来配置从机的一些参数,第一个参数表示需要配置哪个参数,例如我们需要时能从机广播,则需要这样调用:
  uint8 initial_advertising_enable = TRUE;
  GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
  第二个函数是特征值改变时的回调函数,当主机给从机发送数据时,从机就会回调这个函数来告知应用层有数据送达。
  static void simpleProfileChangeCB( uint8 paramID );
  在低功耗蓝牙中,数据的传输是通过特征值的读写来实现的。
  BLE协议栈的GATT层用于应用程序在两个连接设备之间的数据通信的。从GATT层的角度看,当设备连接后,将充当一下两种角色中的一个:
  GATT Client && 从GATT服务器读/写数据的设备。
  GATT Server && 包含客户端需要读/写的数据的设备。
  重要的是要注意,GATTClient和Server 的角色完全独立于BLE的链路层的 slave和master的角色,或GAP层peripheral和central的角色。一个slave 可以是GATT Client或GATT Server,一个master同样可以是GATT Client或GATT Server。 一个GATT Server可以有多个完成一个特定的功能或特性GATT Server组成。
  在SimpleBLEPeripheral应用程序中有三个GATT服务:
  Mandatory GAP Service:这个服务包含设备和访问信息,比如设备名称、供应商和产品标识。
  Mandatory GATT Service :这个服务包含有关服务UUID相关信息。
  SimpleGATTProfile Service&&这个服务是一个示例配置文件,供测试和演示。
  Profile简介
  为了更容易的保持Bluetooth 设备之间的兼容,Bluetooth规范中定义了 Profile。Profile 定义了设备如何实现一种连接或者应用,你可以把 Profile 理解为连接层或者应用层协议。Bluetooth 的一个很重要特性,就是所有的 Bluetooth 产品都无须实现全部的 Bluetooth 规范,你可根据所需要的产品实现需要的Profile,不必给开发带来更大的开销。这就是说当需要利用蓝牙提供数据传输功能时就必须建立对应的 Profile,TI的BLE协议栈为我们提供了部分Profile,其中一部分是非标准的Profile。其中非标准的有 SimpleGATTProfile和SimpleKeysProfile,我们将通过对这两个Profile的介绍及实验来了解Profile的特性和 使用。每个 Profile 初始化其响应的服务和内部寄存器。GATT 服务器将整个服务加到属性表中,并为每个属性分配唯一的句柄。 GATTProfile用于存储和处理GATT服务器中的数据。在下面的实验中需要用到的都是我们自己新建的Profile,即非标准的Profile。 其中主要要注意Profile、UUID、handle、CharacteristicValues。
  SimpleGATTProfile及Btool的使用
  SimpleGATTProfile中包含5个特征值,每一个的属性都不同:
  SimpleGATTProfile 特征值属性:
  Btool是PC端工具,使用特定的HCI命令与CC2540通信,PC端需要通过串口或 USB 连接 CC2540,CC2540 使用 HostTestRelease 工程,硬件可以使用 USBDongle(对应CC2540USB)或我们提供的USBDongle。
  USBDongle连接从机
  使用馒头科技有限公司的USBDongle,烧写HostTestRelease固件,连接电脑后就可以用Btool软件来连接从机设备。
  将从机工程编译下载到开发板,连接串口到PC端,我们通过串口来观察设备的运行,运行后可以看到设备处于广播。
  这是我们插入USBDongle到电脑,可以看到识别到一个串口插入,如图,这就是USBDongle用CDC的方式实现的串口。
  打开Btool,按左图配置,可以看到右图的信息,这是说明Btool已经识别到了USBDongle。
  Btool的界面可以分为4个区:
  1. 设备信息展示
  2. 历史记录
  3. 设备控制
  4. 连接信息
  确保周围存在设备可发现,点击Discover/Connect标签的scan按钮,CC2540 就会进行10s的扫描过程,在这期间可通过Cancle按钮停止扫描。
  可以看到,我们周边有两个设备,其中一个就是我们的开发板,根据串口输出的信息我们知道我们设备的地址是0X7C669D9F6297,下面我们点击establish来连接我们的开发板。
  连接后可以看到两边都同时显示了连接信息。
  开发板输出连接:
  Btool连接的设备信息:
  特征值的读写
  接下来我们用Btool对SimpleProfile 进行使用操作。刚刚我们已经列出了SimpleProfile中的各个特征值。
  使用UUID读取特征值,CHAR1具有读写属性,这里对 SimpleProfile 的第一特征值 CHAR1进行读取操作,UUID 为0xfff1。选择 Read/Write 选项页并选择 ReadUsing Characteristic UUID 功能,在Characteristic UUID选项填入f1:ff(高字节在前),点击Read按钮。
  读取特征值成功:
  下面对此特征值进行写入操作,写入操作必须使用Handle值进行,而无法使用UUID来操作,那CHAR1的Handle值的什么呢?其实刚刚在我们读取CHAR1的值的时候就已经获取到了它的Handle。如图,CHAR1的Handle为0x0025。
  CHAR1的Handle值:
  下面我们通过这个Handle对CHAR1写入十进制的10,如图,我们写入成功了。
  写入成功:
  在SimpleBLEPeripheral设备的串口输出中可以看到设备提示CHAR1的值变为了10。
  下面来验证我们是否成功的将CHAR1改为了10,按照刚刚读取CHAR1的步骤,重新读取CHAR1的值。
  CHAR1的值改为了10:
第二十二节 蓝牙协议栈之从机通讯(下)#e#
  蓝牙点灯
  上面我们已经能够成功的改写一个特征值,那我们是不是可以通过发送特定的值来控制一个灯的亮灭呢?答案是肯定的。下面我们来实现这个功能。
  从机工程已经有5个特征值了,我们现在增加一个特征值来控制灯的亮灭。那我们该如何来添加特征值呢?特征值的管理是在profile中实现的。所以我们需要对profile进行修改。
  (1)修改simpleGATTProfile.h
  在simpleGATTProfile.h中可以看到现在定义的5个特征值的标示符和UUID,我们添加一个1Byte的特征值来控制灯的亮灭。
  因为simpleGATTProfile是共用的文件,为了不影响其它工程,我们使用一个宏来控制新增加的属性。
  接下来我们需要修改simpleGATTProfile.c,这个文件需要修改的地方较多,下面我们一步一步来修改。
  (2)添加UUID
  (3)添加属性
  (4)属性表
  (5)属性设置操作
  (6)属性获取操作
  (7)属性读操作
  (8)属性写操作
  Profile的改造完成后,我们将这个宏打开,配置工程。
  接着我们在staticvoid simpleProfileChangeCB( uint8 paramID )函数的switch中加入CHAR6的判断即可。
  编译烧录后,按照我们前面说的在Btool中对FFF6的UUID进行读写操作即可实现对LED的控制。
  第二十三节 蓝牙协议栈之主机通讯
  随着蓝牙4.0模块的大量使用,为了很多从未接触过蓝牙的工程师也能快速便捷地开发蓝牙项目或者使用蓝牙,主从一体、远控IO等等特性也成为蓝牙模块必 备的条件。其实,联合第二十一节和本节(第二十二节),我们就能将一个本无固件的裸片蓝牙,使其开发为具备主从一体功能的蓝牙模块。这两节的内容,也是本 连载篇的重点部分之一。
  上一节我们对从机的工作流程有了一个整体的把握。我们现在接着来看主机的工作流程。
  主机的工作主要是扫描设备,对发现的设备发起连接,然后就是对特征值的读写操作了。
  手动连接
  从机的对外广播是在初始化的时候完成的,那主机的扫描是在哪里开始的呢?阅读源码可以发现主机的操作都在按键处理中完成的。主机通过五向按键中的五个按键实现不同的功能。
  static void simpleBLECentral_HandleKeys( uint8 shift, uint8 keys )
  (void) // Intentionally unreferenced parameter
  if ( keys & HAL_KEY_UP ) // 向上
  // Start or stop discovery
  if ( simpleBLEState != BLE_STATE_CONNECTED ) // 如果没有连接,开始扫描
  if ( !simpleBLEScanning )
  simpleBLEScanning = TRUE;
  simpleBLEScanRes = 0;
  LCD_WRITE_STRING( &Discovering.。。&, HAL_LCD_LINE_1 );
  LCD_WRITE_STRING( &&, HAL_LCD_LINE_2 );
  GAPCentralRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,
  DEFAULT_DISCOVERY_ACTIVE_SCAN,
  DEFAULT_DISCOVERY_WHITE_LIST );
  GAPCentralRole_CancelDiscovery();
  else if ( simpleBLEState == BLE_STATE_CONNECTED && // 如果连接并且发现Handle进行读写操作
  simpleBLECharHdl != 0 &&
  simpleBLEProcedureInProgress == FALSE )
  // Do a read or write as long as no other read or write is in progress
  if ( simpleBLEDoWrite )
  // Do a write
  attWriteReq_
  req.handle = simpleBLECharH
  req.len = 1;
  req.value[0] = simpleBLECharV
  req.sig = 0;
  req.cmd = 0;
  status = GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );
  // Do a read
  attReadReq_
  req.handle = simpleBLECharH
  status = GATT_ReadCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );
  if ( status == SUCCESS )
  simpleBLEProcedureInProgress = TRUE;
  simpleBLEDoWrite = !simpleBLEDoW
  if ( keys & HAL_KEY_LEFT ) // 左
  // Display discovery results
  if ( !simpleBLEScanning && simpleBLEScanRes & 0 ) // 显示扫描到的设备
  // Increment index of current result (with wraparound)
  simpleBLEScanIdx++;
  if ( simpleBLEScanIdx &= simpleBLEScanRes )
  simpleBLEScanIdx = 0;
  LCD_WRITE_STRING_VALUE( &Device&, simpleBLEScanIdx + 1,
  10, HAL_LCD_LINE_1 );
  LCD_WRITE_STRING( bdAddr2Str( simpleBLEDevList[simpleBLEScanIdx].addr ),
  HAL_LCD_LINE_2 );
  if ( keys & HAL_KEY_RIGHT ) // 右
  // Connection update
  if ( simpleBLEState == BLE_STATE_CONNECTED ) // 如果连接,则更新连接
  GAPCentralRole_UpdateLink( simpleBLEConnHandle,
  DEFAULT_UPDATE_MIN_CONN_INTERVAL,
  DEFAULT_UPDATE_MAX_CONN_INTERVAL,
  DEFAULT_UPDATE_SLAVE_LATENCY,
  DEFAULT_UPDATE_CONN_TIMEOUT );
  if ( keys & HAL_KEY_CENTER ) // 中间键
  uint8 addrT
  uint8 *peerA
  // Connect or disconnect
  if ( simpleBLEState == BLE_STATE_IDLE ) // 空闲则连接
  // if there is a scan result
  if ( simpleBLEScanRes & 0 )
  // connect to current device in scan result
  peerAddr = simpleBLEDevList[simpleBLEScanIdx].
  addrType = simpleBLEDevList[simpleBLEScanIdx].addrT
  simpleBLEState = BLE_STATE_CONNECTING;
  GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,
  DEFAULT_LINK_WHITE_LIST,
  addrType, peerAddr );
  LCD_WRITE_STRING( &Connecting&, HAL_LCD_LINE_1 );
  LCD_WRITE_STRING( bdAddr2Str( peerAddr ), HAL_LCD_LINE_2 );
  else if ( simpleBLEState == BLE_STATE_CONNECTING || // 连接则断开连接
  simpleBLEState == BLE_STATE_CONNECTED )
  // disconnect
  simpleBLEState = BLE_STATE_DISCONNECTING;
  gStatus = GAPCentralRole_TerminateLink( simpleBLEConnHandle );
  LCD_WRITE_STRING( &Disconnecting&, HAL_LCD_LINE_1 );
  if ( keys & HAL_KEY_DOWN ) // 下
  // Start or cancel RSSI polling
  if ( simpleBLEState == BLE_STATE_CONNECTED ) // 连接则读取RSSi的值
  if ( !simpleBLERssi )
  simpleBLERssi = TRUE;
  GAPCentralRole_StartRssi( simpleBLEConnHandle, DEFAULT_RSSI_PERIOD );
  simpleBLERssi = FALSE;
  GAPCentralRole_CancelRssi( simpleBLEConnHandle );
  LCD_WRITE_STRING( &RSSI Cancelled&, HAL_LCD_LINE_1 );
  因为从机一直处于广播状态,所以秩序将上一节中的从机程序烧录进开发板即可,然后将主机程序烧录到另外一快开发板,通过五向按键来实现和从机的连接和读写功能。
  (1) 上电提示
  从机上电提示:
  主机上电提示:
  (2)根据主机的按键功能,我们按&UP&键,开始搜索周边设备。搜索完成后,可以看到,扫描到了一个设备。
  (3)接着我们查看扫描到的设备地址,按左键。可以看到扫描到的设备地址为0x7C669D9F638A。这个地址正是我们的从机地址。
  (4)按中间键连接从机,可以看到主机提示连接成功,从机也提示连接成功。
  (5)接着我们开始读取从机的RSSI值,按下键。
  (6)再次按下键,取消RSSI值的读取。
  (7)对从机的CHAR1进行读写,再次按上键读取到CHAR1的值为1。
  (8)接着按上键,对CHAR1写入0,同时看到从机提示CHAR1的值被修改为0。
  主机写入成功:
  从机提示CHAR1被改变:
  上电自动连接
  上一节中我们通过五向按键实现了主机连接从机的功能,这一节中们来实现主机上电后自动搜索连接从机。
  要实现连接,从机必须处于广播状态,剩下的工作全部由主机完成,扫描、发起连接。
  主机的状态也有回调函数,主机启动后,第一个状态是初始化,所以我们在初始化完成时开始扫描,
  这样开机后主机就会开始扫描周边设备,接下来我们在扫描完成后对扫描到的设备发起连接。
  将工程编译下载后通过串口助手观察主机和从机的输出可以发现主机上电后自动的完成了一系列的操作。
  第二十四节 OAD空中升级
  通过仿真器更新程序或者通过USB更新固件那都是一般人都可以实现的操作,但是要想实现OAD空中升级,这还是需要一定的技术能力。这一节我就带着大家完善这一能力。
  OADn air download,指空中下载模式。当我们的产品发布以后,有时需要对固件进行升级,OAD是升级方式中的一种。
  配置BIM(Boot Image Manger)
  打开IAR,打开BLE-CC254x-1.4.0下的工程C:\TexasInstruments\BLE-CC254x-1.4.0\Projects\ble\util\BIM\cc254x\BIM.eww,然后编译,下载到开发板中。
  配置Image A
  打开OADExample工程,配置工程,添加如下几个宏
  FEATURE_OAD_BIM
  HAL_IMAGE_A
  FEATURE_OAD
  OAD_KEEP_NV_PAGES
  (1) 打开simplePeripheral.c找到宏定义DEFAULT_ENABLE_UPDATE_REQUEST,将其改为FLASE。否则会影响BLEDevice Monitor对其进行空中升级,到时可以再改回来。
  (2) IAR左侧导航中找到Profile文件夹,点击右键添加oad_target.c和oad_target.h两个文件,二文件位于 C:\TexasInstruments\BLE- CC254x-1.4.0\Projects\ble\Profiles\OAD中。
  (3) 在IAR导航中找到 HAL&Target&MT254xboard&Driver,右键添加文件hal_crc.c,该文件位于C:\TexasInstruments \BLE-CC254x-1.4.0\Components\hal\target\MT254xboard中。
  (4) 在刚才的simplePeripheral.c文件中,找到simplePeripheral_Init()函数,在里面添加OADTarget_AddService()函数。
  (5) 在simplePeripheral.c的前面,添加引用OAD的头文件,OAD.h和OAD_target.h。
  (6) 点击Project&Option&,或直接按Alt+F7,选择BuildActions,在Post-buildcommand line中添加:
  &$PROJ_DIR$\。。\。。\common\cc2540\cc254x_ubl_pp.bat&&$PROJ_DIR$& & rodUBL&&$PROJ_DIR$\CC2540-OAD-ImgA\Exe\OADExample&
  注意,各双引号之间只有一个空格。注意图中红框标的部分,Image_A是和之前第1步对应的。
  (7) 点击Project&Option&,或直接按Alt+F7,选择Linker,选择Config,Linker Configurationfile中勾选Override default,添加C:\TexasInstruments\BLE-CC254x-1.4.0\Projects\ble\common \cc2540\cc254x_f256_imgA.xcl。
  (8) 点击Project&Option&,或直接按Alt+F7,选择Linker,选择Extra Output。
  (9) Extra Option添加Hex文件的输出。
  (10) 点击OK,编译下载,如果出现如下错误,是因为我们使用的是IAR版本,如果你使用的是IAR8.20版本就没有这问题。
  (11) 这个问题是因为使用了虚拟寄存器导致的,我们找到如下文件。
  (12) 对文件的115行进行如下修改,将虚拟寄存器注释掉。
  (13) 编译后,可以看到我们生成的文件
  (14) 我们将hex文件叠加到BIM后面
  这样ImageA就成功烧录进开发板了。
  配置Image B
  (1) 方法如Image A,其它要注意的几个地方:点击Project&Option&,或直接按Alt+F7,选择C/C++Compiler,选择Preprocessor,将Defined symbols中的HAL_IMAGE_A改成B。
  (2) 点击Project&Option&,或直接按Alt+F7,选择Linker,选择Config,将Linker Configuration file中的文件改为B。
  (3) 保存后编译,同样的可以看到生成的文件。
  (4) 为了区分A和B镜像,我们将最终结果改名。
  空中升级
  有了bin文件就可以进行空中升级了,打开BLE Device Monitor(没有安装的需要安装),打开后软件会自动扫描设备,如图,我们扫描到了开发板。
  (2) 连接后,打开OAD
  (3) 点击file,选择Progame(OAD),选择生成的bin文件,可以看到我们当前运行的是A固件
  (4) 点击start,当进行到100%,就完成了固件空中升级。
  (5) 升级后再次打开OAD选项,可以看到选择运行的固件已经是B版本的了。
  注意:
  要把 BLE协议栈BLE-CC254x-1.4.0 安装在C盘,在其他盘符下没有生成bin文件。
  第二十五节 SBL串口升级
  SBL升级和OAD升级的配置步骤都是一样的,主要是配置的参数不一样,下面我们来配置一个SBL升级的固件。
  配置SBL
  打开IAR,打开BLE-CC254x-1.4.0下的工程C:\TexasInstruments\BLE-CC254x-1.4.0\Projects\ble\util\SBL\iar\cc254x\sbl.eww,然后编译,下载到开发板中。
  配置Bin文件
  (1) 添加宏
  MAKE_CRC_SHDW
  FEATURE_SBL
  OAD_KEEP_NV_PAGES
  (2) 添加build选项
  &$PROJ_DIR$\。。\。。\common\cc2540\cc254x_ubl_pp.bat&&$PROJ_DIR$& &ProdUBL& &$PROJ_DIR$\MT254xboard\Exe\SBLExample&
  (3) Config选项
  (4) Extra Output选项
  (5) 保存编译
  (6) 打开串口升级软件SerialBootTool.exe,选择SBLExample.bin文件。
  (7) Load Image
  这样我们的SBL固件就制作完毕了。
蓝牙BLE相关文章
蓝牙BLE相关下载
协议栈相关文章
协议栈相关下载
TI公司相关文章
TI公司相关下载
据相关机构预言,5G在2020年开始将成为下一代的移动通信标准,拥有一千倍数据速率的提升,与此同时也会有更多的联网设备加入5G通信系统,这对系统的...
姚远强调,下一代无线测试系统至少要满足以下几种需求,首先要能在测试速度进行优化的无线测试仪器,其次要能够提供待测设备控制和并行测试更容易...
创新实用技术专题
Copyright &
.All Rights Reserved

我要回帖

更多关于 蓝牙4.0传输速度 的文章

 

随机推荐