TI-Light_switch学习
来源:互联网 发布:免费的群发软件 编辑:程序博客网 时间:2024/05/03 17:23
CCM
HAL
PAN
RF
RSSI
实现平台:两块WeBee 功能底板及两块WeBee无线模块
实验现象:
实验讲解:
本实现讲解的主要内容有分三部分:
1、工程文件介绍
2、Basic RF layer介绍及其工作过程
3、light_switch.c代码详解
一、工程文件介绍:
解压后打开文件夹:CC2530 BasicRF 然后你会发现还有三个文件夹,然后你下意识地点进source文件夹,再进去后会发现,还有两个文件夹,然后你很自然地会再点入app文件夹(吐血,还有三个文件夹)……在这茫茫的文件夹里哪个才是我无线点灯的工程呢!
好吧,在讲解实验代码之前,还是先来看看这些看到有点头晕的文件夹吧!
文件夹结构大至如下,仅列出CC2530 BasicRF目录一些相关的的文件夹:每个文件夹里面放着什么东西,如果缺少其中某些,我们的灯还是否可以点亮呢?我们来一一探讨:
docs文件夹:
打开文件夹里面仅有一个名为CC2530_Software_Examples的PDF文档,文档的主要内容是介绍BasicRF的特点、结构及使用,如果读者有TI的开发板的话阅读这个文档就可以做Basic RF里面的实验了,从中我们可以知道,里面Basic RF包含三个实验例程:无线点灯、传输质量检测、谱分析应用。下面讲解的内容中也有部分内容是从这个文档中翻译所得,是一份相当有价值的参考资料。
Ide文件夹:
打开文件夹后会有三个文件夹,及一个cc2530_sw_examples.eww工程,其中这个工程是上面提及的三个实验例程工程的集合,当然也包含了我们无线点灯的实验工程!在IAR环境中打开,在workspace看到
Ide\Settings文件夹:
是在每个基础实验的文件夹里面都会有的,它主要保存有读者自己的IAR环境里面的设置。
Ide\srf05_CC2530文件夹:
里面放有三个工程,light_switch.eww、per_test.eww、spectrum_analyzer.eww
source文件夹:
打开文件夹里面有apps文件夹和components文件夹
Source\apps文件夹:
存放BasicRF三个实验的应用实现的源代码
Source\components文件夹:
包含着BasicRF的应用程序使用不同组件的源代码
打开实验工程:
打开文件夹WeBee CC2530BasicRF\ide\srf05_cc2530\iar路径里面的工程light_switch.eww(无线点灯)。我们的实验就是对它进行修改的。并点击application的light_switch.c用户的应用程序就是在里面的了
二、Basic RF layer介绍及其工作过程:
在介绍Basic RF之前,来看看这个实验例程设计的大体结构,如图5所示Basic RF例程的软件设计框图就如一座建筑物。
放在最底,肯定是你实现数据传输的基础了。
HardwareAbstraction layer
它提供了一种接口来访问TIMER,GPIO,UART,ADC等。这些接口都通过相应的函数进行实现。
Basic RF layer
为双向无线传输提供一种简单的协议
Application layer
是用户应用层,它相当于用户使用Basic RF层和HAL的接口,也就是说我们通过在Application layer就可以使用到封装好的Basic RF和HAL的函数。
本例程的要求就是读者理解掌握Basic RF
Basic RF layer简介
BasicRF由TI公司提供,它包含了IEEE 802.15.4标准的数据包的收发功能但并没有使用到协议栈,它仅仅是是让两个结点进行简单的通信,也就是说Basic RF仅仅是包含着IEEE 802.15.4标准的一小部分而已。其主要特点有:
1、不会自动加入协议、也不会自动扫描其他节点也没有组网指示灯(LED3)。
2、没有协议栈里面所说的协调器、路由器或者终端的区分,节点的地位都是相
3、没有自动重发的功能。
BasicRF layer为双向无线通信提供了一个简单的协议,通过这个协议能够进行数据的发送和接收。Basic RF还提供了安全通信所使用的CCM-64身份验证和数据加密,它的安全性读者可以通过在工程文件里面定义SECURITY_CCM
在Project->Option里面就可以选择,本次实验并不是什么高度机密,所以在SECURITY_CCM前面带X了。
Basic RF的工作过程:启动、发射、接收 (请大家按照代码走)
启动
1、确保外围器件没有问题
2、创建一个basicRfCfg_t的数据结构,并初始化其中的成员,在basic_rf.h代码中可以找到
} basicRfCfg_t;
3、调用basicRfInit()函数进行协议的初始化,在basic_rf.c代码中可以找到
函数功能:对Basic RF的数据结构初始化,设置模块的传输通道,短地址,PAD ID。
发送
1、创建一个buffer,把payload放入其中。Payload最大为103个字节
2、调用basicRfSendPacket()函数发送,并查看其返回值
uint8basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length)
destAddr 目的短地址
pPayload 指向发送缓冲区的指针
函数功能:给目的短地址发送指定长度的数据,发送成功刚返回SUCCESS,失败则返回FAILED
接收
1、上层通过basicRfPacketIsReady()函数来检查是否收到一个新数据包
在basic_rf.c中可以找到
函数功能:检查模块是否已经可以接收下一个数据,如果准备好刚返回
TRUE
2、 调用basicRfReceive()函数,把收到的数据复制到buffer中。
代码可以在basic_rf.c中可以找到
配缓冲区
如果能看懂启动、发射、接收就可以说你基本上能使用这个无线模块了。
看到这里大家就会觉得无线传输怎么会那么简单,真的只调用那几个函数就可以实现了吗? 是的,使用Basic RF实现无线传输只要学会使用这些函数就可以了。
但是具体的实现过程远没有那么简单的,大家可以到….\CC2530 BasicRF\docs里面查看CC2530_Software_Examples中的5.2.4 Basic RF operation这个章节的内容,里面详细介绍了Basic RF的初始化过程、Basic RF的发射过程、Basic RF的接收过程,具体到每个层的功能函数。WeBee本来想将这部分的内容也详细的和读者们讲解清楚,但后来再仔细考虑还是不放上来了。因为它的具体实现过程大家看文档的那个章节就可以大概明白的了,另一方面,实验例程的模块化编程做得很好,大家只需要明白函数的作用,学会使用它就行了,至于它内部是怎么样一层一层的实现,我们也不用太过关心。
三、light_switch.c代码详解:
无论你看哪个实验的代码,首先要找的就是main函数。
从main函数开始:(部分已经屏蔽的代码并未贴出,详细的代码请看打开工程)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
第22~23行:关闭WeBee底板的LED2,开LED1。由于WeBee设计的LED电路是低电平点亮的,与TI不同,更符合以前大家学习单片机的习惯,所以halLedSet()置1是使灯熄灭,不过这个没关系,关键是掌握怎么使用就可以了。
第26~27行:选择其中的一行,并把另外一行屏蔽掉;这两行重要啦,一个是实现发射按键信息的功能,另一个是接收按键信息并改变LED状态的功能。分别为Basic RF发射和接收。不同模块在烧写程序时选择不同功能。
注意:
接下来看看appSwitch()函数,它是如何实现数据发送的呢?
1.
2.
3.
4.
5.