初次接触Zigbee

来源:互联网 发布:张民弢 知乎 编辑:程序博客网 时间:2024/06/05 06:31

        最近刚接触Zigbee,以前在我印象中Zigbee就是一种类似于蓝牙,wifi的无线传输技术。就在我刚翻开一本有关Zigbee的书,迎面就是Zigbee,协议,协议栈,TI,IAR,CC2530等等这些名词,搞得我一头雾水。在一一查询之后才理清了思路。

        主角:Zigbee一种无线传输技术,Zigbee协议是它传输过程的规则,像以太网有以太网协议。而Zigbee协议栈则是Zigbee协议的具体实现。要想具体实现Zigbee不仅需要Zigbee协议栈这个软件上的支持还要有一个支持这一协议栈的硬件才行。

        TI:一家超有名的半导体公司,它不仅开发了一个协议栈ZSTACK而且还开发了一款支持Zigbee底层协议的芯片,当然型号有好多,我用的是CC2530。

        IAR的话就是一款集成开发环境,也是由TI公司开发的。

        初学这个,所以在淘宝上买了一套网蜂的开发套件。计划开始先找着实验手册做起来,每做一个实验完成后把过程写下来。一来作为以后复习的笔记,二来在写笔记是可以再理一遍思路,第三也可以自己检测自己到底有没有弄懂手册上讲的东西。下面就记录一下第一次实验:对IO口的操作。

        手册上前面的基础实验都不涉及到无线部分,只是在一个开发套件上做实验,为了是熟悉CC2530的操作方式,手册上讲到由于是不带协议的程序所以在工程里需要进行一些配置,照着手册做就可以了,感觉类似于Keil里的一些设置:仿真器、库、设备类型这些。

        CC2530有21个IO口,共分成3组,P0,P1,P2。其中P0和P1口有8个引脚,P2口只有5个。对每个IO的控制涉及到三种寄存器PxSEL、PxDIR、PxINP。举例说明:如果我想把P0_0口设为普通输出,由于CC2530的IO既可以作为普通IO也可以作为片上外设IO,所以在配置IO口的时候首先要选择它是作为普通IO还是片上外设IO,然后再是设置这个IO口是输出还是输入。三种寄存器的解释见下表。PxSEL           Px[7:0]功能设置寄存器,默认设置为普通I/O口PxINPPx[7:0]作输入口时的电路模式寄存器PxDIRPx口输入输出设置寄存器,0:输入,1:输出PxPx[7:0]可位寻址的I/O寄存器        现在利用这些内容就可以写一个简单的电灯程序来,代码和原理图如下:

#include <ioCC2530.h>#define LED1 P1_0void main(void){  P1SEL &= ~0x01;  P1DIR |= 0x01;  P1INP &= ~0x01;//可写可不写    while(1)  {    P1_0 = 0;  }}

        在网蜂的手册里讲到各寄存器的初始值都为0,所以P1SEL&=~0x01可以省略。但我自己不是很喜欢。通过查看CC2530 datasheet可以看到有关IO口的更加详细的内容。下面讲两点。

        这21个IO中其中P1_0和P1_1有20mA的驱动能力,但同时也没有上/下拉功能而其他IO口只有4mA的驱动能力。如果某个IO口被设置成了输入功能,PxINP为0时表示为上/下拉模式,1为三态。那么这个IO口到底是上拉还是下拉呢,通过CC2530 datasheet手册可以知道,P2INP寄存器它的第5位控制了P2的5个端口,但是这个8位寄存器还有3位空下来了,这3位就是用来控制P0,P1,P2这三个端口上/下拉模式的默认值,0表示上拉,1表示下拉。

        手册上涉及的数据还有很多,一一列举出来就没意思了,还是等具体用到的时候再详细分析吧。

0 0