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.

[参考译文] CC2530:广播坐标模式下 MSA_McpsDataReq ()的 dstShortAddr 参数

Guru**** 2455560 points
Other Parts Discussed in Thread: TIMAC

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1500680/cc2530-dstshortaddr-parameter-of-msa_mcpsdatareq-on-broadcast-coordinate-mode

器件型号:CC2530
主题:TIMAC 中讨论的其他器件

工具/软件:

我使用的是 TIMAC v1.5.2 SDK。 原始代码如下。

if (msa_IsCoordinator)
      { //HAL_TURN_ON_LED2();//red
        if (MSA_PACKET_LENGTH >= MSA_HEADER_LENGTH)
        {
          /* Coordinator sending to devices. Use the associated list of device to send out msg */
          msa_Data1[0] = MSA_PACKET_LENGTH;
          msa_Data1[1] = HI_UINT16(msa_DeviceRecord[index].devShortAddr);
          msa_Data1[2] = LO_UINT16(msa_DeviceRecord[index].devShortAddr);
          msa_Data1[3] = sequence;
        }

        MSA_McpsDataReq((uint8*)msa_Data1,
                        MSA_PACKET_LENGTH,
                        msa_DeviceRecord[index].isDirectMsg,
                        msa_DeviceRecord[index].devShortAddr );
        

        /* Reset the index if it reaches the current number of associated devices */
        if (++index == msa_NumOfDevices)
        {
          index = 0;
        }

我修改后的编码是"MAC_SHORT_ADDR_BROADCAST"、而不是第15行的"MSA_DeviceRecord[index].devShortAddr"。

问题)这是广播通信、无需指定索引。
如何修改以下器件呢?

第7行:MSA_DATA1[1]= HI_UINT16(MSA_DeviceRecord[index].devShortAddr);
第8行: MSA_DATA1[2]= LO_UINT16(MSA_DeviceRecord[index].devShortAddr);
第14行: MSA_DeviceRecord[index].isDirectMsg、

您对此有何看法?  
第7行:MSA_DATA1[1]= HI_UINT16(MSA_PAN_ID);
第8行: MSA_DATA1[2]= LO_UINT16(MSA_PAN_ID);
第14行:真、

协调器和器件的操作与上述编码相同。

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

    您好、Edan、

    第7行和第8行是个人首选、因为它们涉及数据包、如果在应用中将这些字节用作筛选器、则在接收端进行处理时只需小心。  第14行(直接消息)应为 true、第15行应为  MAC_SHORT_ADDR_BROADCAST、因此您列出的内容乍一看听起来很合理。  这是否会导致在使用监听器时按预期显示广播消息并由目标器件接收?  请注意、休眠设备不会接收广播消息、因为它们的接收器在睡眠模式下关闭。

    此致、
    Ryan

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

    您好、Ryan

    我不知道是否进入睡眠模式。 如何强制它不进入睡眠模式?

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

    对于 msa.c、检查 msa_isDirectMsg 是 true 还是 false、因为这将  相应地确定 MAC_RX_ON_when_idle 的状态。

      /* This device is setup for Direct Message */
      if (msa_IsDirectMsg)
        MAC_MlmeSetReq(MAC_RX_ON_WHEN_IDLE, &msa_MACTrue);
      else
        MAC_MlmeSetReq(MAC_RX_ON_WHEN_IDLE, &msa_MACFalse);
        

    此致、
    Ryan

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

    30分钟后、我检查了 MSA_IsDirectMsg 的值。

        if (events & MSA_SEND_EVENT){
            if (msa_IsDirectMsg)
              debug(0,"msa_IsDirectMsg:TRUE",strlen("msa_IsDirectMsg:TRUE"));
            else
              debug(0,"msa_IsDirectMsg:FALSE",strlen("msa_IsDirectMsg:FALSE"));
             
        

    结果正确。 永不改变。

    这是什么意思?

     如何强制它不进入睡眠模式?

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

    TRUE 很正常、因为它也意味着 MAC_RX_ON_when_idle 为 TRUE、这是一个必要的过程、因为接收器必须处于开启状态才能接收广播(请注意、这会增加器件功耗、因为器件和无线电必须保持开启状态才能随时接收数据包)。

    此致、
    Ryan

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

    我是否可以使用以下代码阻止其进入睡眠模式?

    if (events & MSA_SEND_EVENT){ 
        MAC_MlmeSetReq(MAC_RX_ON_WHEN_IDLE, &msa_MACTrue);

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

    这就是其目的、最重要的是、它将在空闲状态期间使 RX 保持开启状态、以便它可以随时接收广播消息。  在应用程序启动期间、应只需要使用此函数一次、而不是每个 MSA_SEND_EVENT 一次。

    另外、请确保使用零参数值调用 MSA_PowerMgr、以使设备始终处于打开状态。  如果使用、请移除 power_saving 预定义。

    此致、
    Ryan

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

    好的。 非常感谢。