Zigbee 学习计划——第4天——基于CC2530 Basic RF的无线点灯

  就像Hellow world一样,无线点灯也是Zigbee的经典例子。根据《网蜂实战演练》中介绍,虽然还没有用到协议栈,但它体现出来的数据发送、接收和用协议栈是差不多的,而且TI公司的Basic RF的代码容易看懂,如果把这个实验掌握了(不要只是下载程序然后看试现象),到后面的协议栈就比较好入手了。基于这一点,这个还是很有必要学习了解一下。

  关键字:

CCM    - Counter with CBC-MAC (mode of operation)   

HAL      - Hardware Abstraction Layer           (硬件抽象层) 

PAN      - Personal Area Network            (个人局域网) 

RF       - Radio Frequency                  (射频) 

RSSI    - Received Signal Strength Indicator     (接收信号强度指示) 

 Basic RF的软件设计分层如下:

      Application

          |          |

          |        Baisc RF

          |             |

    Hardware Abstraction Layer

                        |

              Hardware


Basic RF layer 简介: 

Basic RF 由TI公司提供,它包含了IEEE 802.15.4 标准的数据包的收发功能但并没有使用到协议栈,它仅仅是是让两个结点进行简单的通信,也就是说Basic 
RF 仅仅是包含着IEEE 802.15.4 标准的一小部分而已。

其主要特点有: 
1、不会自动加入协议、也不会自动扫描其他节点也没有组网指示灯(LED3)。  
2、没有协议栈里面所说的协调器、路由器或者终端的区分,节点的地位都是相等的。 
3、没有自动重发的功能。 


Basic RF 的工作过程:启动、发射、接收  (请大家按照代码走) 
启动 
1、确保外围器件没有问题 
2、 创建一个basicRfCfg_t 的数据结构,并初始化其中的成员,在basic_rf.h代码中可以找到 
    typedef struct { 
            uint16 myAddr;            //16 位的短地址(就是节点的地址)  
           uint16 panId;              //节点的 PAN ID 
            uint8 channel;              //RF 通道(必须在 11-26之间) 
           uint8 ackRequest;         //目标确认就置 true 
              #ifdef SECURITY_CCM    //是否加密,预定义里取消了加密 
          uint8* securityKey;      
          uint8* securityNonce; 
           #endif 
} basicRfCfg_t; 
3、调用basicRfInit()函数进行协议的初始化,在basic_rf.c 代码中可以找到 
     uint8 basicRfInit(basicRfCfg_t* pRfConfig) 
     函数功能:对Basic RF的数据结构初始化,设置模块的传输通道,短地址,PAD ID。 

发送 

1、创建一个buffer,把payload 放入其中。Payload最大为103个字节 
2、调用basicRfSendPacket()函数发送,并查看其返回值 
    在basic_rf.c 中可以找到 
    uint8 basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length) 
    destAddr  目的短地址 
    pPayload  指向发送缓冲区的指针 
    length  发送数据长度 
    函数功能:给目的短地址发送指定长度的数据,发送成功刚返回 SUCCESS,失败则返回FAILED 


接收 
1、 上层通过basicRfPacketIsReady()函数来检查是否收到一个新数据包 
      在basic_rf.c 中可以找到 
      uint8 basicRfPacketIsReady(void) 
      函数功能:检查模块是否已经可以接收下一个数据,如果准备好刚返回 TRUE 
2、  调用basicRfReceive()函数,把收到的数据复制到buffer 中。 
      代码可以在basic_rf.c 中可以找到 
      uint8  basicRfReceive(uint8*  pRxData,  uint8  len,  int16* pRssi) 
      函数功能:接收来自Basic RF 层的数据包,并为所接收的数据和RSSI 值配缓冲区
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值