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.

[参考译文] CC2538:使用 Z-STACK HOME 1.2.0提取扩展地址

Guru**** 2559890 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/683539/cc2538-extract-extended-address-using-z-stack-home-1-2-0

器件型号:CC2538

我能够从 RF_Flash 编程器读取 ExtAddr、但当我使用 byte* addr = NLME_GetExtAddr ()或 osal_memcpy (addr、&aExtendedAddress、Z_EXTADDR_LEN)时、它返回0、即所有值为零。

什么地方出错了?

我有 NV_RESTORE = false

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试在 ZDProfile.c 中的 ZDP_EndDeviceBindReq()中引用 NLME_GetExtAddr 用法
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,您能告诉我,为什么直接连接到路由器的节点可以发送 af_datarequest?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我无法很好地理解您的问题。 您能详细说明吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    网络中有25个节点、一个协调器、其余节点为路由器。
    所有路由器使用 AF_DataRequest()将数据发送给协调器
    但是,远离协调器或不是协调器的直接邻居的路由器无法发送数据。 但它们位于与 ubiqua 协议分析器中所示相同的网络中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否可以附加监听器日志并在监听器日志中详细说明您的问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我当时没有监听器日志、但监听器没有捕获到数据包。
    问题是,不是协调者直接邻居的路由器无法向协调者发送数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果没有监听器日志、我无法判断任何内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    监听器上没有数据包、其仅表示 afStatus_NO_route 目标地址为0x0000 (协调器)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否可以附加监听器日志?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、YK、
    我还有一个问题网络上的多台路由器具有相同的短地址,这是怎么可能的?
    我的意思是 PAN 中的2输出4路由器具有0xEDBD 16bitAddress。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您如何知道2台路由器具有相同的短地址? 使用监听器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否不使用监听器当我在协调器上接收数据时,我将在控制台上打印它们的短地址,此外,我还将通过调用 NLME_GetShortAddr () API 函数在连接的 LCD 上打印路由器地址。
    我已经检查了具有相同 shortAddress 的两个节点的 IEEE 地址、它们的 IEEE 地址不同、它们的次要 IEEE 地址为0xFFFFFFFF。
    是否有任何想法、问题可能出在哪?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我相信您的步骤中有问题。 尝试详细说明如何打印这些信息、以便我可能知道问题所在。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    路由器固件中

    案例 ZDO_State_change:

    if (RFID_Router_NWKState =DEV_router)

          {

           uint8 *a= NLME_GetExtAddr();

           sprintf (buff、"DB.inf.txt=\"OK RTR 0x%X 0x%X%X%X%X%X%X%X%X%X%X\""、NLME_GetShortAddr ()、A[7]、A[6]、A[5]、A[4]、A[3]、A[2]、A[1]、A[0])注意到这两个设备的地址都是 IEEE /00000000  

           HMI_DISPLAY_Write (buff、strlen (buff));

           ZDP_IEEEAddrReq (0x0000、ZDP_ADDR_REQTYPE_SINGLE、0、0);

           NLME_RouteDiscoveryRequest (0x0000、0x00、0);

          }

    在协调器固件中:

    静态空 RFID_Coordinator_MessageMSGCB (afIncomingMSGPacket_t *pktt)

    char sData[70];
    交换机(pkt->clusterid)

    案例 RFID_clusterid:
    sprintf (sData、">%s;%d、(char*) pkt->cmd.Data、pkt->srcAddr.addr.shortAddr);
    HMI_UART_Write (USB_UART、sData、strlen (sData));

    //sprintf (sData、"DB.info.txt=\"%s\"",(char*)pkt->cmd.Data);
    //RFID_DISPLAY_Write (sData、strlen (sData));
    中断;

    我注意到的另一件事是、两个器件都将0x00000000打印为其 IEEE 地址  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还在调试器窗口(局部变量)中更改了它变量的位置为 R4、其中的值为0
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于 MAC 地址全部为0,因此您似乎无法获得正确的 MAC 地址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、问题可能出在哪呢?
    或者、我如何确定为什么这个引信会返回这个值的问题?
    供参考我已经使用调试器对其进行了测试、NLME_GetExtAddr ()返回的位置 oa 指针为 R2
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您可以查看、我可以向您发送项目文件。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试使用以下代码将 MAC 地址放入数组中。

    uint8 ieAddr[Z_EXTADDR_LEN];

    OSAL_cpyExtAddr ( eeeAddr,NLME_GetExtAddr());

    然后 、您可以在数组 IeeAddr 中具有 MAC 地址。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、是的
    e2e.ti.com/.../106892


    以上链接中的讨论解决了我的问题、但您能否详细说明问题是什么?
    为什么以下条件是错误的?
    if ((Success!= osal_nv_item_init (ZCD_nv_EXTADDR、Z_EXTADDR_LEN、NULL)))||
    (成功!= osal_nv_read (ZCD_nv_EXTADDR、0、Z_EXTADDR_LEN、扩展地址))||
    (OSAL_memcmp (aExtendedAddress、nullAddr、Z_EXTADDR_LEN)))

    感谢您的帮助、您总是能看到您的回复。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    pREQ->initiatorieAddr 什么是 pREQ?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉,这是拼写错误。 代码应该是

    uint8 ieAddr[Z_EXTADDR_LEN];

    OSAL_cpyExtAddr ( eeeAddr,NLME_GetExtAddr());