[菜农助学交流] 关于短距离、低功耗的无线通信技术---Zigbee

[复制链接]
4632|11
 楼主| kyzb001 发表于 2011-8-9 16:26 | 显示全部楼层 |阅读模式
本帖最后由 kyzb001 于 2011-8-10 16:32 编辑

11楼:  
上传一个非常好的资料
超级棒
Zigbee技术在无线传感器网络中的应用.pdf (279.5 KB)

先把贴发出去, 在慢慢编辑。
首先讲讲Zigbee
       Zigbee是IEEE 802.15.4协议的代名词。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。
       具体了解大家可以看百度百科:http://baike.baidu.com/view/117166.htm
       刚混进一家新公司(大概7月25号),试手了一个星期以后就接到这个玩意,之前都没听说过。不过古人说:不懂才有挑战性(不知道是不是古人说的)。所以拿着资料就看咯。
       废话不多说。根据大叔号召,开始写写我做了这么久得笔记。虽然这笔记芯片不是以M0的,不过如果大家需要, 我会把它转成M0的
硬件介绍:
      板子没什么资源,Zigbee芯片是CC2420,控制芯片是ATmega128(大家需要的话我可以考虑转成Nuc1xx的)。加上一个flash和外围电路就没了。说以说硬件很简单。
软件介绍:
      芯片初始化:
       1.打开VREG   
       2.使能复位
       3.关闭全局中断
       4.配置寄存器
       5.等待晶振起震
       代码部分我最后会贴出去。
       初始化完成,就可以进行接收和发送了。



继续编辑(2010年8月10日13点01分):先把资料弄上来






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| kyzb001 发表于 2011-8-9 16:58 | 显示全部楼层
本帖最后由 kyzb001 于 2011-8-9 17:00 编辑

2L贴代码
芯片初始化代码
  1. //打开VREG 使能复位 关闭全局中断 配置寄存器 等待晶振起震
  2. void CC2420Init()
  3. {
  4. unsigned char cc2420Mes[]="cc2420 init is success\n\0";
  5. unsigned char i;

  6. // Make sure that the voltage regulator is on, and that the reset pin is inactive
  7. SET_VREG_ACTIVE(); //open cc2420 power
  8. Delay5ms(2);
  9. SET_RESET_ACTIVE(); //enable reset
  10. Delay5ms(10);
  11. SET_RESET_INACTIVE(); //disable reset
  12. Delay5ms(2);

  13. // Turn off all interrupts while we're accessing the CC2420 registers
  14. DISABLE_GLOBAL_INT();// close all int

  15. // Register modifications
  16. WriteStrobeReg_spi(CC2420_SXOSCON); //turn on xtal
  17. WriteConfigReg_spi(CC2420_MDMCTRL0, 0x0AE2); // Turn off automatic packet acknowledgment
  18. WriteConfigReg_spi(CC2420_MDMCTRL1, 0x0500); // Set the correlation threshold = 20
  19. WriteConfigReg_spi(CC2420_IOCFG0, 0x007F); // Set the FIFOP threshold to maximum
  20. WriteConfigReg_spi(CC2420_SECCTRL0, 0x01C4); // Turn off "Security enable"

  21. // Wait for the crystal oscillator to become stable
  22. do
  23. {
  24. i = WriteStrobeReg_spi(CC2420_SXOSCON); // 开启晶体振荡
  25. DelayXms(100);
  26. }
  27. while((i&0x40)==0);
  28. Printf(cc2420Mes,23);
  29. }
 楼主| kyzb001 发表于 2011-8-9 17:00 | 显示全部楼层
本帖最后由 kyzb001 于 2011-8-9 17:02 编辑

发送模式
发送:
       发送主要是按照IEEE802.15.4协议规范发送格式

       发送分三种,信标发送,数据发送和确认帧发送
       数据格式分别如下。



      按照数据格式打包发送数据。我们只需设置PHR+PSDU。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| kyzb001 发表于 2011-8-9 17:03 | 显示全部楼层
发送代码
  1. /******************************************************************************
  2. * @fn cc2420Send
  3. *
  4. * @brief
  5. * 设置Address函数
  6. *
  7. * Parameters:
  8. *
  9. * @param uint ShortAddress
  10. *
  11. * @return void
  12. *
  13. ******************************************************************************/
  14. void SetAddress(unsigned char Number,unsigned int PanID,unsigned int DestAddress,unsigned int MyAddress)
  15. {
  16. rfSettings.txSeqNumber=Number;
  17. rfSettings.panId=PanID;
  18. rfSettings.destAddr=DestAddress;
  19. rfSettings.myAddr=MyAddress;
  20. }
  21. /******************************************************************************
  22. * @fn cc2420Send
  23. *
  24. * @brief
  25. * 发送数据
  26. *
  27. * Parameters:
  28. *
  29. * @param uint ShortAddress
  30. *
  31. * @return void
  32. *
  33. ******************************************************************************/

  34. void cc2420SendData(unsigned char ModeType)
  35. {

  36. unsigned char PackLenght,i;
  37. unsigned int frameControlField;

  38. // Wait until the transceiver is idle
  39. while (FIFOP_IN|| SFD_IN);

  40. // Turn off global interrupts to avoid interference on the SPI interface
  41. DISABLE_GLOBAL_INT();

  42. WriteStrobeReg_spi(CC2420_SFLUSHTX);
  43. WriteStrobeReg_spi(CC2420_SFLUSHTX);

  44. PackLenght=0;

  45. switch(ModeType)
  46. {
  47. case 0x01:
  48. {
  49. DataTxFIFO[PackLenght++]=PackLenght; //第一字节为帧长度,不包括长度域本身的字节,但包含帧校验序列2字节

  50. //帧控制域,无安全,确认要求,数据帧,包含16位的目标地址,源地址,目标PAN标识符,源PAN标识符

  51. frameControlField = CC2420_FCF_FRAMETYPE_DATA;
  52. frameControlField |= 0 ? CC2420_FCF_ACK_REQUEST : CC2420_FCF_NO_ACK_REQUEST;
  53. frameControlField |= CC2420_FCF_INTRAPAN;
  54. frameControlField |= CC2420_FCF_DESTADDR_16BIT;
  55. frameControlField |= CC2420_FCF_SOURCEADDR_16BIT;

  56. DataTxFIFO[PackLenght++]=frameControlField >> 8; ; //高字节
  57. DataTxFIFO[PackLenght++]=frameControlField & 0x00FF; //低字节

  58. DataTxFIFO[PackLenght++]=rfSettings.txSeqNumber;; //Sequence number

  59. DataTxFIFO[PackLenght++]=rfSettings.panId >> 8;
  60. DataTxFIFO[PackLenght++]=rfSettings.panId & 0x00FF; //目的PAN标识符

  61. DataTxFIFO[PackLenght++]=rfSettings.destAddr >> 8;
  62. DataTxFIFO[PackLenght++]=rfSettings.destAddr & 0x00FF; //目的地址

  63. DataTxFIFO[PackLenght++]=rfSettings.myAddr >> 8;
  64. DataTxFIFO[PackLenght++]=rfSettings.myAddr & 0x00FF; //源PAN标识符

  65. for (; PackLenght < 20 ;PackLenght++) //有效负载
  66. {
  67. DataTxFIFO[PackLenght]=20;
  68. }

  69. PackLenght++; //CRC

  70. DataTxFIFO[0]=PackLenght;
  71. break;
  72. }

  73. case 0x02:
  74. {
  75. DataTxFIFO[PackLenght++]=PackLenght; //第一字节为帧长度,不包括长度域本身的字节,但包含帧校验序列2字节

  76. //帧控制域,无安全,确认要求,数据帧,包含16位的目标地址,源地址,目标PAN标识符,源PAN标识符

  77. frameControlField = CC2420_FCF_FRAMETYPE_DATA;
  78. frameControlField |= 0 ? CC2420_FCF_ACK_REQUEST : CC2420_FCF_NO_ACK_REQUEST;
  79. frameControlField |= CC2420_FCF_INTRAPAN;
  80. frameControlField |= CC2420_FCF_DESTADDR_16BIT;
  81. frameControlField |= CC2420_FCF_SOURCEADDR_64BIT;

  82. DataTxFIFO[PackLenght++]=frameControlField >> 8; ; //高字节
  83. DataTxFIFO[PackLenght++]=frameControlField & 0x00FF; //低字节

  84. DataTxFIFO[PackLenght++]=rfSettings.txSeqNumber;; //Sequence number

  85. DataTxFIFO[PackLenght++]=rfSettings.panId >> 8;
  86. DataTxFIFO[PackLenght++]=rfSettings.panId & 0x00FF; //目的PAN标识符

  87. DataTxFIFO[PackLenght++]=rfSettings.destAddr >> 8;
  88. DataTxFIFO[PackLenght++]=rfSettings.destAddr & 0x00FF; //目的地址

  89. for( ; PackLenght < PackLenght + 8 ;PackLenght++) // Source address
  90. {
  91. DataTxFIFO[PackLenght] = rfSettings.myIEEE[PackLenght-8];
  92. }

  93. for (; PackLenght < 20 ;PackLenght++) //有效负载
  94. {
  95. DataTxFIFO[PackLenght]=20;
  96. }

  97. PackLenght++; //CRC

  98. DataTxFIFO[0]=PackLenght;
  99. break;
  100. }
  101. case 0x03:
  102. {
  103. DataTxFIFO[PackLenght++]=PackLenght; //第一字节为帧长度,不包括长度域本身的字节,但包含帧校验序列2字节

  104. //帧控制域,无安全,确认要求,数据帧,包含16位的目标地址,源地址,目标PAN标识符,源PAN标识符

  105. frameControlField = CC2420_FCF_FRAMETYPE_DATA;
  106. frameControlField |= 1 ? CC2420_FCF_ACK_REQUEST : CC2420_FCF_NO_ACK_REQUEST;
  107. frameControlField |= CC2420_FCF_INTRAPAN;
  108. frameControlField |= CC2420_FCF_DESTADDR_64BIT;
  109. frameControlField |= CC2420_FCF_SOURCEADDR_16BIT;

  110. DataTxFIFO[PackLenght++]=frameControlField >> 8; ; //高字节
  111. DataTxFIFO[PackLenght++]=frameControlField & 0x00FF; //低字节

  112. DataTxFIFO[PackLenght++]=rfSettings.txSeqNumber;; //Sequence number

  113. DataTxFIFO[PackLenght++]=rfSettings.panId >> 8;
  114. DataTxFIFO[PackLenght++]=rfSettings.panId & 0x00FF; //目的PAN标识符

  115. for( ; PackLenght < PackLenght + 8 ;PackLenght++) //目的地址
  116. {
  117. DataTxFIFO[PackLenght] = rfSettings.destIEEE[PackLenght-8];
  118. }

  119. DataTxFIFO[PackLenght++]=rfSettings.myAddr >> 8;
  120. DataTxFIFO[PackLenght++]=rfSettings.myAddr & 0x00FF; //源PAN标识符

  121. for (; PackLenght < 20 ;PackLenght++) //有效负载
  122. {
  123. DataTxFIFO[PackLenght]=20;
  124. }

  125. PackLenght++; //CRC

  126. DataTxFIFO[0]=PackLenght;
  127. break;
  128. }
  129. }
  130. Write_TXFIFO(DataTxFIFO,PackLenght);

  131. WriteStrobeReg_spi(CC2420_STXON);

  132. while (!SFD_IN);
  133. while (SFD_IN);

  134. // Turn interrupts back on
  135. ENABLE_GLOBAL_INT();


  136. }
 楼主| kyzb001 发表于 2011-8-9 17:04 | 显示全部楼层
实在是不知道怎么写笔记阿!郁闷+郁闷。现农到这里。
aihe 发表于 2011-8-10 06:26 | 显示全部楼层
顶一下楼主
正要研究这个东西呢
hotpower 发表于 2011-8-10 06:47 | 显示全部楼层
俺借用吴旭光教授的一对模块玩过一周时间,协议晕。

在家试了穿墙能力一般,感觉不如nrf905简单。

可能它组网方便吧。
 楼主| kyzb001 发表于 2011-8-10 12:50 | 显示全部楼层
貌似组网很方便。慢慢搞,总有一天搞死他。
cecwxf 发表于 2011-8-10 13:35 | 显示全部楼层
丫  关注楼主   今天开始弄老师的M0
sytu_chyq 发表于 2011-8-10 14:01 | 显示全部楼层
 楼主| kyzb001 发表于 2011-8-10 16:30 | 显示全部楼层
上传一个非常好的资料
超级棒

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
WJWQH 发表于 2011-9-17 18:05 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Is this my life

15

主题

624

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部