NXP MCU 技术论坛
直播中

刘刚

8年用户 1120经验值
私信 关注
[问答]

求助,关于JN5168路由器Mac可见性问题求解

我当时正在开发一个 Zigbee 3.0 网络。我从未在我的系统中使用过路由器,但我知道我需要使用它来增加信号的覆盖范围。当 SleepingEndDevices 将数据发送到协调器时,它们会显示 macs 0x0000000000000000。协调器的序列号如下:

(11:12:53.380) APP: APP_taskEndPoint: ZPS_EVENT_AF_DATA_INDICAtiON(11:12:53.380)     Data Indication:(11:12:53.380)         Profile :101(11:12:53.380)         Status  :0(11:12:53.380)         Cluster :ffff(11:12:53.380)         EndPoint:1(11:12:53.380)         LQI     : 57(11:12:53.380)         MAC Address: 0000000000000000 (4853)(11:12:53.380) APP: byteCount  = 1 - idByte = *(11:12:53.380) APP: payloadSize  = 803(11:12:53.380)     Payload:(11:12:53.380) 723,0,3360,36,...
来自路由器的序列号如下:

APP: Network discovery failed with error 234APP: Exhausted channels to scanAPP: No event to process!APP: Network discovery completeAPP: Found 1 networksAPP: Unscanned channels 00000000        APP: Ext PAN ID = 00158d000230996e        APP: Channel = 11        APP: Stack Profile = 2        APP: Zigbee Version = 2        APP: Permit Joining = 1        APP: Router Capacity = 1        APP: End Device Capacity = 1APP: Trying Joining networkAPP: Joining networkAPP: No event to process!APP: Node joined network with Addr 0x50f4APP: No event to process!APP: vCheckStackEvent: vCheckStackEvent: ZPS_EVENT_NEW_NODE_HAS_JOINED, Nwk Addr=0xeb46 External Address=00158d0000554c7cAPP: No event to process!APP: vCheckStackEvent: ZPS_EVENT_AF_DATA_INDICATION        Profile :0        Cluster :13        EndPoint:0        LQI     : 30        MAC Address: 00158d0000554c7c (eb46)APP: No event to process!APP: vCheckStackEvent: vCheckStackEvent: ZPS_EVENT_NEW_NODE_HAS_JOINED, Nwk Addr=0xf41c External Address=00158d0000554c44APP: No event to process!APP: vCheckStackEvent: ZPS_EVENT_AF_DATA_INDICATION        Profile :0        Cluster :13        EndPoint:0        LQI     : 33        MAC Address: 00158d0000554c44 (f41c)APP: No event to process!APP: vCheckStackEvent: ZPS_EVENT_AF_DATA_INDICATION        Profile :0        Cluster :13        EndPoint:0        LQI     : 30        MAC Address: 00158d0000554c9e (4853)APP: No event to process!APP: vCheckStackEvent: vCheckStackEvent: ZPS_EVENT_NEW_NODE_HAS_JOINED, Nwk Addr=0x4853 External Address=00158d0000554c9eAPP: No event to process!APP: vCheckStackEvent: ZPS_EVENT_AF_DATA_INDICATION        Profile :0        Cluster :13        EndPoint:0        LQI     : 30        MAC Address: 00158d0000554c9e (4853)
我想知道为什么 MAC 可见性会出现此问题。什么原因?

回帖(1)

王刚

2025-3-19 18:41:18

根据你描述的问题,Sleeping End Device(SED)发送数据到协调器时源MAC地址显示为全零(0x0000000000000000),这可能是由以下原因导致的:




1. 数据转发机制问题




  • 现象本质

    在Zigbee协议中,SED默认通过父节点(父路由器或协调器)转发数据。当父节点转发数据时,网络层可能会将源地址替换为父节点的地址(短地址或MAC),导致协调器无法直接看到SED的真实MAC地址。




  • 验证方法

    检查数据包的 Network Frame Header 中的源地址字段。如果源地址是父节点的短地址(而非SED的MAC),说明协议栈未透传原始MAC地址。






2. 协议栈配置问题




  • 关键配置项

    在JN5168的协议栈(如JN-AN-1171 Zigbee 3.0协议栈)中,需确认是否启用了 APS Indirect AddressingSource Routing 功能。如果未启用,父节点可能不会转发SED的完整地址信息。




  • 解决方法

    在协调器和路由器中配置以下参数:


    // 启用APS层间接寻址
    ZPS_teAplZdoSetZdoConfiguration(ZPS_ZDO_CONFIG_INDIRECT_MSG_INDICATION, TRUE);





3. MAC地址可见性限制




  • Zigbee协议规范

    Zigbee 3.0 默认在应用层(APS层)隐藏终端设备的MAC地址以提高安全性。协调器只能看到直接子设备的MAC地址,而无法直接看到通过多跳路由的设备的MAC地址。




  • 强制透传MAC地址

    在SED的代码中,显式设置数据包的源地址为MAC地址(而非短地址):


    // 发送数据时显式指定源地址类型
    PDUM_thAPduInstance hAPdu = PDUM_hAPduAllocateAPduInstance(psHandle, u8ClusterId);
    PDUM_pvAPduSetMacSrcAddr(hAPdu, sDeviceContext.u64MacAddress);





4. 协调器日志解析问题




  • 日志输出误导

    协调器日志中显示的MAC地址 0x0000000000000000 可能是由于解析代码错误(例如未正确解析网络层源地址)。




  • 调试建议

    在协调器的数据接收回调函数中,打印完整的网络层数据包信息:


    void APP_cbHandleDataIndication(ZPS_tsAfDataIndication* psDataInd) {
      printf("Source MAC: %016llxn", psDataInd->uMacSrcAddr);
      printf("Network Source Short Addr: 0x%04xn", psDataInd->uNwkSrcAddr);
    }





5. 添加路由器的正确姿势




  • 强制SED通过路由器连接

    在现有网络中部署至少一个路由器,并强制SED选择路由器作为父节点(而非直接连接协调器):


    // 在SED的代码中设置父节点选择策略
    ZPS_teStatus status = ZPS_eAplZdoSetJoinKeyDeviceMask(
      ZPS_ZDO_JOIN_KEY_MASK_ROUTER // 只允许通过路由器入网
    );



  • 验证网络拓扑

    使用工具(如Ubiqua)抓包,确认SED是否通过路由器转发数据,并检查路由器是否透传了SED的MAC地址。






6. Zigbee安全模式干扰



  • 加密与地址隐藏

    如果启用了Zigbee标准安全(如Z3.0 Standard Security),网络层可能会加密或混淆MAC地址。尝试临时关闭安全模式:
    // 在协调器中禁用安全
    ZPS_teAplZdoSetInitialSecurityState(0);




总结步骤



  1. 部署路由器:确保SED通过路由器入网。

  2. 检查协议栈配置:启用间接寻址和MAC地址透传。

  3. 修改协调器日志代码:直接打印原始网络层和MAC地址。

  4. 验证安全模式:临时关闭安全功能测试。


如果问题仍未解决,建议提供完整的网络抓包(使用Ubiqua或Wireshark)和协议栈配置代码片段。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分