This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ZStack中怎样获取各个通道的能量值

Other Parts Discussed in Thread: CC2530

请问大家,谁知道在ZStack中怎样获取11到26通道的通道能量值呢?

谢谢!

  • 协议栈中有针对ED Scan的API函数

  • 可以看一下 协议栈安装文件夹内的 802.15.4 MAC API  第19页

  • SuSan and VV,

    谢谢你们的回复,使用这个函数MAC_MlmeScanReq(macMlmeScanReq_t *pData)就可以实现吧,scanType设置为:MAC_SCAN_ED?

  • NLME_EDScanRequest( MAX_CHANNELS_24GHZ, _NIB.scanDuration )

  • VV好,

    谢谢您的回复,NLME_EDScanRequest函数只是request,上层怎么知道什么时候扫描完成,并且得到通道ED值呢?

  • ZDNwkMgr_ProcessEDScanConfirm( ZDNwkMgr_EDScanConfirm_t *pEDScanConfirm )

    这个函数是可以看到的啊!

  • VV您好,

    static void ZDNwkMgr_ProcessEDScanConfirm( ZDNwkMgr_EDScanConfirm_t *pEDScanConfirm )这个函数应该是NwkMgr自己内部的函数,这个函数是通过ZDNwkMgr_EDScanConfirmCB函数发消息产生的调用,而ZDNwkMgr_EDScanConfirmCB函数应该是在协议栈内部调用的(并且我在该函数加打印信息测试,发现没有调用这个函数)。我在应用层是不能直接用这个函数的。

  • 你好,

    在协议栈里面关于ED Scan Request, 你直接使用NLME_EDScanRequest函数就可以了,在这个函数里面调用的是ZMacScanReq,在这个函数里面调用的是

    MAC_MlmeScanReq。所以你直接使用NLME_EDScanRequest就可以了。

    在扫描完成以后,首先调用的是 macScanComplete,这个函数里面会调用MAC_CbackEvent,这个函数里面会把扫描结果发到网络层去,在网络层里面会调用

    pNwkFreqAgilityScanCfg = NwkFreqAgilityScanCfg这个call back函数。在这个callback函数里面,会调用ZDNwkMgr_EDScanConfirmCB,在这个callback函数里面会把NM_ED_SCAN_CONFIRM消息发送给 ZDNwkMgr_TaskID,那么你只要去ZDNwkMgr_event_loop处理这个消息就可以了,处理这个消息的函数是

    ZDNwkMgr_ProcessEDScanConfirm( (ZDNwkMgr_EDScanConfirm_t *)msgPtr ) 之后调用ZDNwkMgr_BuildAndSendUpdateNotify,在这个函数里面你就可以获得扫描的结果了。

    下面是我调试的截图

  • VV您好,

    谢谢您的详细回复,我按照您的方法,用NLME_EDScanRequest(MAX_CHANNELS_24GHZ, 1);请求扫描ED值,用仿真器设置断点看返回的ED值,但是我扫描出来的ED值还是很多通道都是0,感觉是不正常的ED值,下面是我调试的截图。

    所以有几个问题想麻烦您帮忙确认:

    1、很多通道扫描返回的ED值都是0应该是不正常的吧?

    2、Zigbee协议里面ED值是属于phy层,表示通道检测到的能量值,这个值是会以一个8位数送给mac层,ED应该是越大越好吧?越大表示通道能接收或发送的能量越高?

    3、cc2530有没有寄存器直接能读ED值呢?我只看到RSSI值的寄存器。

    4、协调器创建网络时也会扫描ED,有时会扫描两到三次,并且串口会输出“Energy Level Scan Failed”,我将ED值打印出来发现这种情况下很多通道的ED值也都是0。协调器创建网络成功的最后一次ED扫描就不会打印“Energy Level Scan Failed”,并且通道的ED值也基本都是非0值。您能大概说下协议栈内部是怎么进行多次ED扫描最后得到一个正常值的吗?

    谢谢!

  • MAX_CHANNELS_24GHZ这个值你那边定义的是多少?

    ED值越大越不好,越大表明信道中正在进行无线通信,或者其他干扰信号,所以能量值会很高。

  • VV您好,

    MAX_CHANNELS_24GHZ的定义是默认的,没有改,表示扫描所有通道。

    #define MAX_CHANNELS_24GHZ    0x07FFF800

    我的网络默认使用11通道(f8wConfig.cfg中-DDEFAULT_CHANLIST=0x00000800),协调器创建网络时会扫描ED,有时会扫描两到三次,并且串口输出“Energy Level Scan Failed”,我将ED值打印出来发现这时11通道和其他很多通道的ED值都是0,如果ED值越小越好,那此时11通道的ED值是0,为什么还会打印“Energy Level Scan Failed”呢?这时通道11-26的ED值为:00 00 00 00 00 2D 80 00 00 26 00 FF 07 00 00 00

    当协调器创建网络成功的那一次ED扫描就不会再打印“Energy Level Scan Failed”,并且通道的ED值也基本都是非0值。为什么创建网络成功时所有通道的的ED值都不是0呢?这时通道11-26的ED值为:05 80 46 EC 24 FB F5 82 ED 34 FF F5 83 12 BF 6C

    还想请教下,ED值是怎么得出来的呢?cc2530有对应的寄存器吗?

  • 你好,我想请教一下ED值的物理含义是什么?功率还是能量呢?当我增大了信道扫描时间时,ED值并没有增大,代表他是功率吗?

  • 您好,我想问一下怎样才能调出二位用仿真器显示的图片,该如何操作IAR软件才可以?

  •     您好,请问可以把完成的程序发给我参考下吗?对于信道能量检测并返回结果有点困惑。谢谢您。