BLE之CC2541做低功耗智能硬件
介绍
最近由于项目需要,使用CC2541做一款类似于蓝牙手环的智能硬件,可实现采集人体的温度,设备的电量,蓝牙信号强度(防丢器),等简单的功能。虽然说基于TI提供的SDK来做开发,难度不是很大,但是这中间依然遇到了一些比较令人头大的问题,记录下来,以便以后查阅,也给以后的新手一个提示。
开发环境
(1)软件
整个开发是在TI提供的BLE-CC254x-1.3.2协议栈基础上进行的,要想运行这一套协议栈和里面提供的例程,必须要IAR Assembler for 8051 9.30.1.3056 (9.30.1.3056)以上的开发环境,这个现在晚上已经有和谐版本的,需要安装之后自行破解。按照教程一步一步来就没有多大的问题。
另外还需要安装几款TI提供的BLE开发调试软件:BLE Device Monitor ,BTool ,SmartRF Flash Programmer,SmartRF Packet Sniffer ,SmartRF Studio 7 。我已经把这些个软件打包整理好了。
(2)CC2541开发板
设备没有下载调试接口,这个也是最坑的,以至于开发效率太低下了。以后开发设备,设备上面一定要留出调试接口,等产品迭代稳定之后,再去掉调试接口我前期所有的开发全是在开发板上面进行的。
(3)CC Debugger
(4)USB Dongle
(5)IOS端的BLE sensor Tag 和Android端的device monitor也是不错的调试助手。
安装完成以上的软件,你可以打开TI提供的一个简单的例程,编译并烧录到板子里面,然后打开BTOOL软件,利用USB Dongle来 scan -> load seeting -> establish 之后就可以抓到蓝牙的设备发送的数据包了。
如果你已经完成了以上的步骤,那么恭喜你,你已经入门BLE的开发了。
蓝牙协议栈的理解
(1)OSAL
要理解TI的蓝牙协议栈,OSAL是绕不开的,如果对嵌入式操作系统或者Linux比较熟悉朋友,应该理解起来非常快。
(2)Profile
具体的开发
开发工作是在TI提供的例程KeyFob Demo的基础上进行的。利用了里面提供的基本服务,Generic Access Service ,Generic Attributes Service,Device information Service ,Simple Profile Service,自己根据需要添加了两个服务:Simple Key Service, OAD service。在TI提供的额例程基础之上进行应用层的开发,其实非常简单,主要就是理解一下一下几个概念。
(1)任务
(2)事件
(3)消息机制
(4)回调函数
(5)HAL
hal是TI提供的一个硬件驱动,里面含有所有的CC2541内部模块的驱动,一般来说我们都不需要直接对这个硬件抽象层进行操作。我们只需要在框架之上
Power Saving机制
说道低功耗,这个是现在的智能硬件的一个趋势。为了提高用户体验,TI官方宣称CC2541在一颗纽扣电池供电的情况下,可以实现待机一年。那是在设备进入超低功耗PM3的情况下实现的。正常情况下,我们的设备需要频繁的唤醒,说道低功耗就要研究一下协议栈里面是如何实现设备的休眠与唤醒的哪?
在实际的开发过程中,功耗的多少是和设备执行的具体的任务挂钩的,当OSAL检测到没有定时任务在进行的时候,系统会从active模式进入PM2模式,在该模式下,系统的睡眠定时器是在计时,当time out之后,系统会自动的唤醒。如果程序没有定时任务需要执行,系统会进入到最低功耗PM3的模式。这个时候就只有复位操作或外部中断才能唤醒系统。
OAD (空中升级)
不得不说这是一个非常有用的功能,特别是在现在的智能硬件需要不断迭代的情况下。可以直接通过我们的软件包或者专门的APP就可以实现无线升级固件,免去了下载接口,大大缩小了产品的尺寸空间。
本来想简单的总结一下,发现很多东西无法说的太细,还是在重新看一篇,将一些实质的细节问题。
|