就像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 值配缓冲区

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

  1. Zigbee 学习计划——第3天——熟悉CC2530的基本例程(续)

    在昨天的基础上,今天学习了CC2530的串口通讯,并由串口控制LED:以及自带的温度计:睡眠唤醒:看门狗等基本功能. CC2530的这些特性和其它单片机是类似的.现在还有个实验睡眠唤醒-定时器方式还没 ...

  2. Zigbee 学习计划——第2天——熟悉CC2530的基本例程

    今天熟悉了CC2530的一些基础例程,用来熟悉该芯片的外围使用,包括: ①中断 ②定时器 ③串口通讯 例程虽然写得不完美,但好在简单易懂,方便新手掌握真正的重点! 哈欠,太困了,学东西得一步步来,一口 ...

  3. ZigBee学习计划

    光棍节那天出手买了网蜂的ZigBee开发板,资料也下了,这几天泡在蜂群里,听着大家在热烈的讨论学习,感觉着年轻人那种渴望知识的冲劲,失去已久的劲头似乎又回来了.于是自己白纸黑字的在今天给自己定下约定, ...

  4. Zigbee学习计划暂停

    公司开了MID的项目,所以现在全部精力切入Android,Zigbee暂停,以后再学习.

  5. Zigbee 学习计划——第5天——无线传输质量检测

    周日在家做实验,测试了无线传输质量检测这一块.实测发现10米距离就会有丢包现象发生,而且RSSI会变成-80左右.不知道为什么会这样,难道是跟LAYOUT或是天线有关?或是说由于信号受墙壁影响?(发送 ...

  6. Zigbee 学习计划——第1天——第一个程序

    今晚处理完一些事情后,在家里的本本上又装了一遍IAR和Z-stack环境.并试验了一下第一个点灯的例子. 在debug时,设置断点出现以下问题: ①不能双击代码行首快速设置断点 ②设置断点后,点击do ...

  7. 【IoT】基于 CC2530 的 ZigBee 物联网系统设计

    1.1设计背景 无线传感器网络是目前研究的热门领域,它集成 了多门学科的知识,应用领域广泛,因此深受国际社会 的关注. 在 21 世纪里,无线传感器网络技术是具有 较大影响力技术中的一个热门技术,也是 ...

  8. 物联网竞赛-基于CC2530寄存器开发-基础知识学习

    基于CC2530寄存器开发-基础知识学习 一.C语言基础知识学习 二.单片机基础知识学习 三.CC2530数据手册的使用 四.常用到的寄存器或函数 1.常用到的寄存器 2.常需要用到的宏.自定义的函数 ...

  9. 基于 CC2530 的温度采集系统(未定稿)

    前言 最近在自学 Zigbee,每天的主要是任务是:看博客,看 CC2530 的 datasheet 和实践,熟悉片上的 SFR 以及控制板子. 学和做内容包括:IO.外部中断.Timer1/3/4. ...

最新文章

  1. 绝招消除电脑自动弹出垃圾广告和网页
  2. 基于近距离的测距感知传感器调研以及扩展介绍
  3. 微软研究院开源编程语言Verona,借鉴Rust、Cyclone等特性
  4. 2017年含金量最高的机器学习技能或知识有哪些? 翻译 2017年10月20日 14:22:44 标签: 机器学习 / quora 7504 原文:As of 2017, what set of
  5. 日语编程语言抚子 - 第三版特色初探
  6. jeesite的junit,数据没有插入?
  7. LeetCode 576. 出界的路径数(动态规划)
  8. 无人驾驶之入门(开篇)
  9. Linux下安装mongodb详细过程
  10. 想要升级Big Sur?你的Mac与Big Sur兼容吗?
  11. 19.docker attach
  12. Filter动态代理敏感词汇过滤
  13. 大数据用户画像方法与实践(干货 转帖)
  14. CSS diaplay=“grid“未生效与display:block
  15. 第一阶段:2014年10月13日-12月14日,36天完成。每周5天,8周完成。
  16. tidyverse及其子包
  17. 为什么大部分企业面试官都会问GMV,GMV是什么?
  18. linux暂停进程运行的按键组合是,Linux基础命令(五):进程——ps、top、jobs、bg、fg、kill、killall、shutdown...
  19. 基于C++和OpenGL (GLUT) 实现太阳系行星系统
  20. 【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用

热门文章

  1. Python 爬取 42 年高考数据,告诉你高考为什么这么难?
  2. Google 产品的消亡史!
  3. 撕破币圈交易惊天骗局:超 30 亿美金成交量完全是虚假编造
  4. 程序员,有什么资格去谈佛系?
  5. python 图形模块_Python图形模块
  6. 一次redis集群连接数占满问题的排查
  7. select * from什么意思_SQL入门教程第15课:什么是内连接
  8. 构造java_Java构造方法
  9. mysqlgbk不支持中文吗_【转载】mysql 不支持中文解决办法
  10. echarts java动态数据_[ASP.net教程]ECharts Java 动态加载数据,echartsjava