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的zigbee发送选择广播模式的ACK问题

Other Parts Discussed in Thread: CC2530

  各位好,最近发现CC2530在进行广播发送数据时,发送选项选择需要ACK,在多个设备接收时,用sniffer抓包,发现虽然有多个设备接收,但是只有一个ACK,我能理解有ACK,可是这个ACK是谁发送的呢,两个接收设备为什么只有一个ACK,难道是两个接收设备之间有辨别?这个不应该吧,求人来解惑一下。

  • 你是用AF_DataRequest();这个函数发送数据么?

    函数里对广播进行了限制了,不能够使能ACK,如下:

    ...

    req.txOptions = 0;

    if ( ( options & AF_ACK_REQUEST ) &&
    ( req.dstAddr.addrMode != AddrBroadcast ) &&
    ( req.dstAddr.addrMode != AddrGroup ) )
    {
    req.txOptions |= APS_TX_OPTIONS_ACK;
    }

    ...

  • 我是用的是TIMIC的进行测试的,用的是MSA_McpsDataReq()函数进行发送的

  • 贴上函数的代码

    void MSA_McpsDataReq(uint8* data, uint8 dataLength, bool directMsg, uint16 dstShortAddr)
    {
      macMcpsDataReq_t  *pData;
      static uint8      handle = 0;

      if ((pData = MAC_McpsDataAlloc(dataLength, msa_securityLevel, msa_keyIdMode)) != NULL)
      {
        pData->mac.srcAddrMode = SADDR_MODE_SHORT;
        pData->mac.dstAddr.addrMode = SADDR_MODE_SHORT;
        pData->mac.dstAddr.addr.shortAddr = dstShortAddr;
        pData->mac.dstPanId = msa_PanId;
        pData->mac.msduHandle = handle++;
        pData->mac.txOptions = MAC_TXOPTION_ACK;

    //    pData->mac.txOptions = MAC_TXOPTION_NO_RETRANS;
        /* MAC security parametcers */
        osal_memcpy( pData->sec.keySource, msa_keySource, MAC_KEY_SOURCE_MAX_LEN );
        pData->sec.securityLevel = msa_securityLevel;
        pData->sec.keyIdMode = msa_keyIdMode;
        pData->sec.keyIndex = msa_keyIndex;

        /* If it's the coordinator and the device is in-direct message */
        if (msa_IsCoordinator)
        {
          if (!directMsg)
          {
            pData->mac.txOptions |= MAC_TXOPTION_INDIRECT;
          }
        }

        /* Copy data */
        osal_memcpy (pData->msdu.p, data, dataLength);

        /* Send out data request */
        MAC_McpsDataReq(pData);

      }

    }