[原创] Z-stack中,添加MAC地址过滤

罗菜鸟   2014-1-29 17:05 楼主
大家在用z-stack做应用产品,特别是消费电子产品时,在组网时会很头疼。
通常大家的做法是在程序里设置PANID和信道,来让产品实现组网。比如你卖了1个协调器,10个节点给客户,你要在程序里,把他们的PANID设置好,再发过去。如果客户需要增加一个节点,你需要翻看备忘录,查询他们的PANID是多少,再烧写。
而且,PANID不能重复,比如一个客户在新疆,一个客户在上海,你大可放心的使用同一个PANID。但是如果两个客户都在重庆,比如A客户在牛角沱,B客户在李子坝,从客户服务表中看开车都要几分钟,但是两地实际距离不到100米(几分钟的盘山公路),就会出大事。

下面介绍一种方便的办法。

首先,就是所有设备,都烧写hex文件。用IAR生成好hex文件后,所有产品都烧写同一个程序,不要为每一个产品修改一次代码。因为你可能会请一个只有小学文化的小工来烧写程序加快你的产能,但是小工看不懂代码的。

在烧写程序的时候,可以把CC2530的物理地址读出来,你可以做一个批处理工具,操作TI的SmartRF Flash Programmer软件,并把物理地址打印在产品外壳上。

然后你再把协调器,路由器,节点卖给客户。客户有多少钱,你就推荐他买多少,千万不要嫌客户买的多。

然后,你在协调器上做个输入装置,对着路由器和节点上面的物理地址,照一下,路由器和节点就入网了。

MAC地址过滤.zip (1.08 MB)
(下载次数: 620, 2014-1-29 17:05 上传)

回复评论 (14)

实际中确实会有这个,不过用permit jion不是更好么?
点赞  2014-2-11 09:40
领教了,期待楼主的下一步大作。
点赞  2014-2-24 22:39
ZDE_AcceptListInput和ZDE_JoinAcceptReq ,怎么用加不上网

  ZDE_JoinAcceptReq_t *mac;
  zAddrType_t *shortAddr_extAddr_byte_addrMode; //短地址+扩展+地址类型
                                             //  AddrNotPresent = 0,
                                             //  AddrGroup = 1,
                                             //  Addr16Bit = 2,
                                             //  Addr64Bit = 3,
                                             //  AddrBroadcast = 15
   
                               //当 addrMode= Addr16Bit 时,对应点播方式;
                               //   Addr64Bit = 3, MAC高级点对点
                               //当 addrMode= AddrGroup 时,对应组播方式;
                               //当 addrMode= AddrBroadcast 时,对应广播方式;


   
   
    uint8 Security;//ZSecNoKey      0xa1
                                      // ZSecOldFrmCount       0xa2
                                      // ZSecMaxFrmCount       0xa3
                                      // ZSecCcmFail           0xa4

      
   Security=0xa2;
   
      uint8 i;  //列表编号
      i=0;
   
   
  
  
  //输入mac
  mac->count=i;
  mac->extAddrs[i][0]=0x00;
  mac->extAddrs[i][1]=0x12;
  mac->extAddrs[i][2]=0x4B;
  mac->extAddrs[i][3]=0x00;
  mac->extAddrs[i][4]=0x03;
  mac->extAddrs[i][5]=0x98;
  mac->extAddrs[i][6]=0xA1;
  mac->extAddrs[i][7]=0xAB;
  i++;
  //00 12 4B 00 03 98 A1 AB//00124B000398A1AB
  //输入安全绑定
  shortAddr_extAddr_byte_addrMode->addrMode=15;//15广播
  shortAddr_extAddr_byte_addrMode->addr.shortAddr=0xFFFF;
                                                            //mac输入
  shortAddr_extAddr_byte_addrMode->addr.extAddr[0]=0x00;
  shortAddr_extAddr_byte_addrMode->addr.extAddr[1]=0x12;
  shortAddr_extAddr_byte_addrMode->addr.extAddr[2]=0x4b;
  shortAddr_extAddr_byte_addrMode->addr.extAddr[3]=0x00;
  shortAddr_extAddr_byte_addrMode->addr.extAddr[4]=0x03;
  shortAddr_extAddr_byte_addrMode->addr.extAddr[5]=0x98;
  shortAddr_extAddr_byte_addrMode->addr.extAddr[6]=0xa1;
  shortAddr_extAddr_byte_addrMode->addr.extAddr[7]=0xab;
   
   
  //允许  
  ZDE_AcceptListInput(mac);
  ZDE_JoinAcceptReq(shortAddr_extAddr_byte_addrMode,mac,Security);
点赞  2014-3-31 13:14
引用: ppwxkk 发表于 2014-3-31 13:14
ZDE_AcceptListInput和ZDE_JoinAcceptReq ,怎么用加不上网

  ZDE_JoinAcceptReq_t *mac;


ZDE_AcceptListInput函数,mac.count填1,因为你就只有1个MAC
点赞  2014-3-31 15:29
引用: ppwxkk 发表于 2014-3-31 13:14
ZDE_AcceptListInput和ZDE_JoinAcceptReq ,怎么用加不上网

  ZDE_JoinAcceptReq_t *mac;


另外,添加MAC地址,只有1分钟的时间,1分钟后,MAC白名单会清空,要重新添加。
点赞  2014-3-31 15:31
多谢指教。
点赞  2014-3-31 17:55
引用: 罗菜鸟 发表于 2014-3-31 15:31
另外,添加MAC地址,只有1分钟的时间,1分钟后,MAC白名单会清空,要重新添加。

多谢指教。

点赞  2014-4-1 12:11
好东西,才入门,正相着怎么区别了。
点赞  2014-8-14 17:15
学习中
点赞  2014-11-11 10:29
虽然不是很懂,但还是点赞
点赞  2016-5-6 11:35
你这样做输入MAC地址好麻烦哦,我看到好多人的做法是。协调器和终端设备同时按一个按钮才出发绑定组网。
点赞  2016-5-6 14:57
引用: lijianfeng11 发表于 2016-5-6 14:57
你这样做输入MAC地址好麻烦哦,我看到好多人的做法是。协调器和终端设备同时按一个按钮才出发绑定组网。

有些产品你根本无法做按钮上去
点赞  2016-5-24 15:16
真是个聪明的做法,赞。。。。话说我还真是烧写不同的PAN,受教了,谢谢
点赞  2016-10-28 10:15
厉害,学到了,感谢楼主
点赞  2016-11-14 18:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复