现对z-stack里几个网络参数的设置以及如何获取总结一下。

信道配置:

Zigbee在3个频段定义了27个物理信道:868MHz频段中定义了1个信道,915MHz频段中定义了2个信道,信道间隔为2MHz,2.4GHz频段上定义了16个信道,信道间隔为5MHz.

信道编号

中心频率/MHz

信道间隔/MHz

频率上限/MHz

频率下限/MHz

k=0

868.3

--

868.6

868.0

k=1,2,…,10

906+2(k-1)

2

928.0

902.0

k=11,12,…,26

2401+5(k-11)

5

2483.5

2400.0

Z-stack中可以在f8wConfig.cfg里设置信道,相关部分如下:

/* Default channel is Channel 11 - 0x0B */

// Channels are defined in the following:

//         0      : 868 MHz     0x00000001

//         1 - 10 : 915 MHz     0x000007FE

//        11 - 26 : 2.4 GHz     0x07FFF800

//

//-DMAX_CHANNELS_868MHZ     0x00000001

//-DMAX_CHANNELS_915MHZ     0x000007FE

//-DMAX_CHANNELS_24GHZ      0x07FFF800

//-DDEFAULT_CHANLIST=0x04000000 // 26 - 0x1A

//-DDEFAULT_CHANLIST=0x02000000 // 25 - 0x19

//-DDEFAULT_CHANLIST=0x01000000 // 24 - 0x18

//-DDEFAULT_CHANLIST=0x00800000 // 23 - 0x17

//-DDEFAULT_CHANLIST=0x00400000 // 22 - 0x16

//-DDEFAULT_CHANLIST=0x00200000 // 21 - 0x15

//-DDEFAULT_CHANLIST=0x00100000 // 20 - 0x14

//-DDEFAULT_CHANLIST=0x00080000 // 19 - 0x13

//-DDEFAULT_CHANLIST=0x00040000 // 18 - 0x12

//-DDEFAULT_CHANLIST=0x00020000 // 17 - 0x11

//-DDEFAULT_CHANLIST=0x00010000 // 16 - 0x10

//-DDEFAULT_CHANLIST=0x00008000 // 15 - 0x0F

//-DDEFAULT_CHANLIST=0x00004000 // 14 - 0x0E

//-DDEFAULT_CHANLIST=0x00002000 // 13 - 0x0D

//-DDEFAULT_CHANLIST=0x00001000 // 12 - 0x0C

-DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B    这里默认使用的是编号为11的信道

当建网过程开始后,网络层将请求MAC层对规定的信道或由物理层默认的有效信道进行能量检测扫描,以检测可能的干扰。网络层管理实体对能量扫描的结果以递增的方式排序,丢弃那些能量值超出可允许能量水平的信道,然后再由网络层管理实体执行一次主动扫描,结合检查PAN描述符,对剩下的信道选择一个合适的建立网络。

若要在应用中查看信道,可以这样获得,_NIB.nwkLogicalChannel,读取这个就OK了。(NIB -NWK Information base-. 其中包含一些网络属性 PANID ,NETWORK ADDRESS 等等。其中_nib.nwkpanID是本网的ID标识,_NIB.extendedPANID按照字面意思是外网ID)

PANID:

在确定信道以后,下一步将是确定PANID,如果ZDAPP_CONFIG_PAN_ID被定义为0xFFFF,那么协调器将根据自身的IEEE地址建立一个随机的PANID(0~0x3FFF),如ZDAPP_CONFIG_PAN_ID没有被定义为0xFFFF,那么网络的PANID将由ZDAPP_CONFIG_PAN_ID确定。

“如果ZDAPP_CONFIG_PAN_ID被定义为0xFFFF,那么协调器将根据自身的IEEE地址建立一个随机的PANID(0~0x3FFF)”这句话怎么理解呢,我经过试验发现,这个随机的PANID并非完全随机,它有规律,与IEEE地址有一定的关系:要么就是IEEE地址的低16位,要么就是一个与IEEE地址低16位非常相似的值。如IEEE地址为0x8877665544332211,PANID很有可能就是2211,或相似的值;IEEE地址为0x8877665544337777,PANID很有可能就是3777,或其它相似的值;

Z-stack中相关部分代码如下:

/* Define the default PAN ID.

*

* Setting this to a value other than 0xFFFF causes

* ZDO_COORD to use this value as its PAN ID and

* Routers and end devices to join PAN with this ID

*/

-DZDAPP_CONFIG_PAN_ID=0xFFFF

若要在应用中查看PANID可以这样获得,_NIB.nwkPanId,读取这个就OK了。

发射功率:

传送范围的大小是和发射功率还有信道环境有关, 传送速率和传送范围之间没有直接联系。所以呢,适当的增大发射功率可增大传送范围。但也是有一定的限制的。具体详见datasheet。

在mac_radio_def.h里有可以设置:

#define MAC_RADIO_CHANNEL_DEFAULT               11

#define MAC_RADIO_TX_POWER_DEFAULT              0x1F

#define MAC_RADIO_TX_POWER_MAX_MINUS_DBM        25

这些只是举例说明一下,这些参数的意义,以及在z-stack里的什么地方修改。还有很多其它的参数,可以查看相关的源文件。

[mac_radio_def.h]

#define MAC_RADIO_SET_CHANNEL(x)            st( FSCTRLL = FREQ_2405MHZ + 5 * ((x) - 11); )

#define MAC_RADIO_SET_TX_POWER(x)            st( TXCTRLL = x; )

#define MAC_RADIO_SET_PAN_ID(x)              st( PANIDL = (x) & 0xFF; PANIDH = (x) >> 8; )

[mac_radio.c]

void macRadioInit(void)

{

/* variable initialization for this module */

reqChannel    = MAC_RADIO_CHANNEL_DEFAULT;

macPhyChannel = MAC_RADIO_CHANNEL_DEFAULT;

reqTxPower    = MAC_RADIO_TX_POWER_DEFAULT;

macPhyTxPower = MAC_RADIO_TX_POWER_DEFAULT;

}

[mac_low_level.h]

uint8 macRadioRandomByte(void);

void macRadioSetPanCoordinator(uint8 panCoordinator);

void macRadioSetPanID(uint16 panID);

void macRadioSetShortAddr(uint16 shortAddr);

void macRadioSetIEEEAddr(uint8 * pIEEEAddr);

void macRadioSetTxPower(uint8 txPower);

void macRadioSetChannel(uint8 channel);

void macRadioStartScan(uint8 scanType);

void macRadioStopScan(void);

void macRadioEnergyDetectStart(void);

uint8 macRadioEnergyDetectStop(void);

设置发射功率:

CC2530 设置RF的发送功率寄存器为TXPOWER,全局搜索一下可以看到以下代码

[csharp]  view plain copy
  1. #define MAC_RADIO_SET_PAN_COORDINATOR(b)              st( FRMFILT0 = (FRMFILT0 & ~PAN_COORDINATOR) | (PAN_COORDINATOR * (b!=0)); )
  2. #define MAC_RADIO_SET_CHANNEL(x)                      st( FREQCTRL = FREQ_2405MHZ + 5 * ((x) - 11); )
  3. #define MAC_RADIO_SET_TX_POWER(x)                     st( TXPOWER = x; )</font>
  4. #define MAC_RADIO_SET_PAN_ID(x)                       st( PAN_ID0 = (x) & 0xFF; PAN_ID1 = (x) >> 8; )
  5. #define MAC_RADIO_SET_SHORT_ADDR(x)                   st( SHORT_ADDR0 = (x) & 0xFF; SHORT_ADDR1 = (x) >> 8; )

继续跟踪 MAC_RADIO_SET_TX_POWER

[csharp]  view plain copy
  1. /**************************************************************************************************
  2. * @fn          macRadioUpdateTxPower
  3. *
  4. * @brief       Update the radio's transmit power if a new power level has been requested
  5. *
  6. * @param       reqTxPower - file scope variable that holds the last request power level
  7. *              macPhyTxPower - global variable that holds radio's set power level
  8. *
  9. * @return      none
  10. **************************************************************************************************
  11. */
  12. MAC_INTERNAL_API void macRadioUpdateTxPower(void)
  13. {
  14. halIntState_t  s;
  15. /*
  16. *  If the requested power setting is different from the actual radio setting,
  17. *  attempt to udpate to the new power setting.
  18. */
  19. HAL_ENTER_CRITICAL_SECTION(s);
  20. if (reqTxPower != macPhyTxPower)
  21. {
  22. /*
  23. *  Radio power cannot be updated when the radio is physically transmitting.
  24. *  If there is a possibility radio is transmitting, do not change the power
  25. *  setting.  This function will be called again after the current transmit
  26. *  completes.
  27. */
  28. if (!macRxOutgoingAckFlag && !MAC_TX_IS_PHYSICALLY_ACTIVE())
  29. {
  30. /*
  31. *  Set new power level;  update the shadow value and write
  32. *  the new value to the radio hardware.
  33. */
  34. macPhyTxPower = reqTxPower;
  35. <font color="#ff0000">      MAC_RADIO_SET_TX_POWER(macPhyTxPower);</font>
  36. }
  37. }
  38. HAL_EXIT_CRITICAL_SECTION(s);
  39. }

在这里我们可以看到TXPOWER的设置值实际上应该是reqTxOower,让我看一下reqTxOower在哪里设置吧,继续跟踪可以发现reqTxPower在函数MAC_INTERNAL_API uint8 macRadioSetTxPower(uint8 txPower)中得到更新,一路跟踪下去可以在函数uint8 MAC_MlmeSetReq(uint8 pibAttribute, void *pValue)看到以下代码

[csharp]  view plain copy
  1. case MAC_PHY_TRANSMIT_POWER:
  2. /* Legacy transmit power attribute */
  3. #if !defined HAL_MAC_USE_REGISTER_POWER_VALUES && \
  4. !defined HAL_PA_LNA && !defined HAL_PA_LNA_CC2590
  5. /* Legacy transmit power attribute value for CC2530 alone,
  6. * or runtime selection support build means a negative absolute value.
  7. * However, when used as register power values or
  8. * with HAL_PA_LNAxxx definition (without runtime selection)
  9. * the attribute value is not a negative absolute value. */
  10. macPib.phyTransmitPower = (uint8)(-(int8)macPib.phyTransmitPower);
  11. #endif /* !defined HAL_MAC_USE_REGISTER_POWER_VALUES && ... */
  12. /* pass through to next case -- do not break*/
  13. #endif /* MAC_OBSOLETE_PHY_TRANSMIT_POWER */
  14. case MAC_PHY_TRANSMIT_POWER_SIGNED:
  15. (void)macRadioSetTxPower(macPib.phyTransmitPower);
  16. break;

到这里为止Z-Stack发送功率的设置流程已经明确,但是我找遍Z-Stack的工程也没有找到调用uint8 MAC_MlmeSetReq(uint8 pibAttribute, void *pValue)的地方想来应该是封装在TI提供的LIB文件中了,
修改TXPOWER的方法有两种:一、在uint8 macRadioSetTxPower(uint8 txPower)函数中通过修改 macPib.phyTransmitPower = (uint8)(-(int8)macPib.phyTransmitPower);的值来修改TXPOWER参数,系统复位后将使用调用该函数设置发送功率。修改 macPib.phyTransmitPower = (uint8)(-(int8)macPib.phyTransmitPower);可以通过修改以下结构体中的红色部分来修改

[csharp]  view plain copy
  1. static CODE const macPib_t macPibDefaults =
  2. {
  3. 54,                                         /* ackWaitDuration */
  4. FALSE,                                      /* associationPermit */
  5. TRUE,                                       /* autoRequest */
  6. FALSE,                                      /* battLifeExt */
  7. 6,                                          /* battLifeExtPeriods */
  8. NULL,                                       /* *pMacBeaconPayload */
  9. 0,                                          /* beaconPayloadLength */
  10. MAC_BO_NON_BEACON,                          /* beaconOrder */
  11. 0,                                          /* beaconTxTime */
  12. 0,                                          /* bsn */
  13. {0, SADDR_MODE_EXT},                        /* coordExtendedAddress */
  14. MAC_SHORT_ADDR_NONE,                        /* coordShortAddress */
  15. 0,                                          /* dsn */
  16. FALSE,                                      /* gtsPermit */
  17. 4,                                          /* maxCsmaBackoffs */
  18. 3,                                          /* minBe */
  19. 0xFFFF,                                     /* panId */
  20. FALSE,                                      /* promiscuousMode */
  21. FALSE,                                      /* rxOnWhenIdle */
  22. MAC_SHORT_ADDR_NONE,                        /* shortAddress */
  23. MAC_SO_NONE,                                /* superframeOrder */
  24. 0x01F4,                                     /* transactionPersistenceTime */
  25. FALSE,                                      /* assocciatedPanCoord */
  26. 5,                                          /* maxBe */
  27. 1220,                                       /* maxFrameTotalWaitTime */
  28. 3,                                          /* maxFrameRetries */
  29. 32,                                         /* ResponseWaitTime */
  30. 0,                                          /* syncSymbolOffset */
  31. TRUE,                                       /* timeStampSupported */
  32. FALSE,                                      /* securityEnabled */
  33. /* Proprietary */
  34. #if defined (HAL_PA_LNA)
  35. 19,                                         /* phyTransmitPower for CC2591 */
  36. #elif defined (HAL_PA_LNA_CC2590)
  37. 11,                                         /* phyTransmitPower for CC2590 */
  38. #else
  39. <span style="color:#ff0000;">0,                                          /* phyTransmitPower without frontend */</span>
  40. #endif
  41. MAC_CHAN_11,                                /* logicalChannel */
  42. {0, SADDR_MODE_EXT},                        /* extendedAddress */
  43. 1,                                          /* altBe */
  44. MAC_BO_NON_BEACON,                          /* deviceBeaconOrder */
  45. };

该值可以再-22到3之间变化具体可以参考

[csharp]  view plain copy
  1. const uint8 CODE macRadioDefsTxPwrBare[] =
  2. {
  3. 3,  /* tramsmit power level of the first entry */
  4. (uint8)(int8)-22, /* transmit power level of the last entry */
  5. /*   3 dBm */   0xF5,   /* characterized as  4.5 dBm in datasheet */    //0
  6. /*   2 dBm */   0xE5,   /* characterized as  2.5 dBm in datasheet */
  7. /*   1 dBm */   0xD5,   /* characterized as  1   dBm in datasheet */
  8. /*   0 dBm */   0xD5,   /* characterized as  1   dBm in datasheet */
  9. /*  -1 dBm */   0xC5,   /* characterized as -0.5 dBm in datasheet */
  10. /*  -2 dBm */   0xB5,   /* characterized as -1.5 dBm in datasheet */
  11. /*  -3 dBm */   0xA5,   /* characterized as -3   dBm in datasheet */
  12. /*  -4 dBm */   0x95,   /* characterized as -4   dBm in datasheet */
  13. /*  -5 dBm */   0x95,
  14. /*  -6 dBm */   0x85,   /* characterized as -6   dBm in datasheet */
  15. /*  -7 dBm */   0x85,
  16. /*  -8 dBm */   0x75,   /* characterized as -8   dBm in datasheet */
  17. /*  -9 dBm */   0x75,
  18. /* -10 dBm */   0x65,   /* characterized as -10  dBm in datasheet */
  19. /* -11 dBm */   0x65,
  20. /* -12 dBm */   0x55,   /* characterized as -12  dBm in datasheet */
  21. /* -13 dBm */   0x55,
  22. /* -14 dBm */   0x45,   /* characterized as -14  dBm in datasheet */
  23. /* -15 dBm */   0x45,
  24. /* -16 dBm */   0x35,   /* characterized as -16  dBm in datasheet */
  25. /* -17 dBm */   0x35,
  26. /* -18 dBm */   0x25,   /* characterized as -18  dBm in datasheet */
  27. /* -19 dBm */   0x25,
  28. /* -20 dBm */   0x15,   /* characterized as -20  dBm in datasheet */
  29. /* -21 dBm */   0x15,
  30. /* -22 dBm */   0x05    /* characterized as -22  dBm in datasheet */
  31. };

二、就是使用MT功能

[csharp]  view plain copy
  1. void MT_SysSetTxPower(uint8 *pBuf)
  2. {
  3. /* A local variable to hold the signed dBm value of TxPower that is being requested. */
  4. uint8 signed_dBm_of_TxPower_requeseted;
  5. /*
  6. * A local variable to hold the signed dBm value of TxPower that can be set which is closest to
  7. * the requested dBm value of TxPower, but which is also valid according to a complex set of
  8. * compile-time and run-time configuration which is interpreted by the macRadioSetTxPower()
  9. * function.
  10. */
  11. uint8 signed_dBm_of_TxPower_range_corrected;
  12. /* Parse the requested dBm from the RPC message. */
  13. signed_dBm_of_TxPower_requeseted = pBuf[MT_RPC_POS_DAT0];
  14. /*
  15. * MAC_MlmeSetReq() will store an out-of-range dBm parameter value into the NIB. So it is not
  16. * possible to learn the actual dBm value that will be set by invoking MACMlmeGetReq().
  17. * But this actual dBm value is a required return value in the SRSP to this SREQ. Therefore,
  18. * it is necessary to make this redundant pre-call to macRadioSetTxPower() here in order to run
  19. * the code that will properly constrain the requested dBm to a valid range based on both the
  20. * compile-time and the run-time configurations that affect the available valid ranges
  21. * (i.e. MAC_MlmeSetReq() itself will invoke for a second time the macRadioSetTxPower() function).
  22. */
  23. <font color="#ff0000">  signed_dBm_of_TxPower_range_corrected = macRadioSetTxPower(signed_dBm_of_TxPower_requeseted);</font>
  24. /*
  25. * Call the function to store the requested dBm in the MAC PIB and to set the TxPower as closely
  26. * as possible within the TxPower range that is valid for the compile-time and run-time
  27. * configuration.
  28. */
  29. (void)MAC_MlmeSetReq(MAC_PHY_TRANSMIT_POWER_SIGNED, &signed_dBm_of_TxPower_requeseted);
  30. /* Build and send back the response that includes the actual dBm TxPower that can be set. */
  31. MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
  32. MT_SYS_SET_TX_POWER, 1,
  33. &signed_dBm_of_TxPower_range_corrected);
  34. }

转载:http://bbs.leekie.net/thread-5-1-1.html

Zigbee 设置信道,PANID,发射功率相关推荐

  1. Zigbee 设置信道,PANID,发射功率现对z-stack里几个网络参数的设置以及如何获取总结一下。

    Zigbee 设置信道,PANID,发射功率现对z-stack里几个网络参数的设置以及如何获取总结一下. 信道配置: Zigbee在3个频段定义了27个物理信道:868MHz频段中定义了1个信道,91 ...

  2. ZigBee 设置信道、PANID、发射功率

    现对z-stack里几个网络参数的设置以及如何获取总结一下. 信道配置: Zigbee在3个频段定义了27个物理信道:868MHz频段中定义了1个信道,915MHz频段中定义了10个信道,信道间隔为2 ...

  3. 【sdx12】QCA6174 WiFi 5G信道auto时屏蔽DFS信道,手动设置信道检测到雷达信号之后,跳转到指定信道方法

    需求描述 QCA6174 WiFi信道自动选择屏蔽DFS信道,手动设置信道检测到雷达信号之后,跳转到指定信道方法 Hostapd版本 / # hostapd hostapd v2.10-devel U ...

  4. 宝峰uv5r怎么设置信道_极蜂D301对讲机和宝峰UV5R 半月评

    最近受小汪老师带动,对无线电兴趣高涨,已报名考试.前阵子专门买了俩手台,一台神级UV5R,一台极蜂D301使用半月后有如下体验分享给大家. 宝峰和极蜂的天线换着用了下 先来个天线测试对比 宝峰UV5R ...

  5. 宝峰uv5r怎么设置信道_30、堂堂华为企业级AP怎么还不如家用TP的速度”快“呢?(科普篇)...

    介绍 <带你学习华为企业无线网络应用>是博主原创的针对常见华为厂商无线AC AP组网系列应用部署为主的文章课程,结合实际环境出发,加上博主部署经验以及会遇到哪些问题等,做到学以致用,给各位 ...

  6. 宝峰uv5r怎么设置信道_宝峰UV-5R对讲机怎么操作?

    展开全部 宝峰UV-5R对讲机2113操作步骤如下:5261 1.首先拿到对讲机要4102安1653装天内线.切记对讲机在容没有安装天线的情况下切勿按动PTT键发射,这样做很容易烧毁对讲机的功放模块. ...

  7. 宝峰uv5r怎么设置信道_【对讲机的那点事】宝峰UV-5R对讲机上中继台的信道存储设置方法...

    ④重新输入439.110: ⑤按Menu键找到第27项信道存储,按menu键进入并按上下键找到CH001,再次按Menu键保存,系统提示发射存储. 设置完毕!此方法是分别存储接收和发射,所以不用理会频 ...

  8. [计算机网络]无线路由器设置信道提高网速

    无线路由器信道怎么设置?无线路由器信道选择哪个好?无线路由器的信道设置是否合理,在一定程度上会影响到无线传输的性能,会间接的影响到用户的无线上网速度,因此合理的设置无线路由器的信道还是十分必要的. 无 ...

  9. ZigBee中PANID的修改

    信道配置: Zigbee在3个频段定义了27个物理信道:868MHz频段中定义了1个20Kb/s信道,915MHz频段中定义了10个40Kb/s信道,信道间隔为2MHz,2.4GHz频段上定义了16个 ...

最新文章

  1. ​kdevelop用法_weixin_44594953的博客-CSDN博客_kdevelop​
  2. ASP.NET MVC 防止 CSRF 的方法
  3. 认证概述散列函数数字签名
  4. 消费升级,彩屏或将成为家电行业市场新风口
  5. Go sycn.Map知识点
  6. 戴口罩也能刷门禁?疫情下AnalyticDB亮出社区管理的宝藏神器!
  7. Weka java.lang.reflect.InvocationTargetException
  8. Python Mixin技术介绍
  9. cad卸载_怎么把CAD卸载干净,老司机来教你
  10. leetcode100. 相同的树(dfs)
  11. python中continue只结束本次循环_循环(while,break,continue),转义字符
  12. 新星计划·第三季【博文流量密码公开课】
  13. 上线随想之2011-03-30
  14. 毕设日志5.12凌晨
  15. 接手一手机android app维护 如何快速进入,快速上手Android开发,学会这三点就够了!...
  16. 常用python内置函数_python常用内置函数
  17. Charles 手机https抓包
  18. 论文趋势分析-作者关系图谱
  19. 湿敏电阻HR202L使用记录
  20. mysql 5.5 slow log_mysql5.5开启慢日志slowlog的方法(log_slow_queries)_MySQL

热门文章

  1. The Shawshank Redemption-3
  2. 物联网ARM开发- 5协议 FSMC控制器外扩SRAM存储器
  3. new和delete与内存分配
  4. yum配置代理proxy
  5. Linux 文件系统(2)sda sdb 和 SATA IDE SCSI
  6. 软件研发的项目经理都在用哪些好的设计和管理的软件工具?
  7. Linux的chmod命令
  8. chmod 命令详细用法
  9. 2020年河南高考--各高校在河南录取分数线预测(本科二批——文科)
  10. 思科模拟器CISCO/华为模拟器ENSP配置一个完整的校园网(网络安全、数据冗余)