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.

[参考译文] CC1310:RF_runCmd 卡在等待 ACK 的位置

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1508142/cc1310-rf_runcmd-stuck-awaiting-for-ack

器件型号:CC1310

工具/软件:

我有一个带有 cc1310的设备、它在2次事件中将信号传输到另一个设备。 一个事件是检测到汽车时、另一个事件是每7秒触发一次的计时器、以提醒接收器设备其状态。 为了进行传输、我在两个事件中都使用以下函数:

static bool rf_send(const uint8_t data, rf_cmd_t cmd, RF_t *ack_payload) {
    if (!device.is_joined && cmd != RF_CMD_JOIN) return false;

    memcpy(&tx_payload.dst_addr, filter_address, sizeof(tx_payload.dst_addr));
//    tx_payload.dst_addr = *(uint64_t *)filter_address;
    tx_payload.cmd = cmd;
    tx_payload.data.raw = data;


    // Send packet with listen before talk
#if ACK_MODE == true
    RF_EventMask terminationReason = RF_runCmd(rf_handle, (RF_Op*) &RF_cmdNop, RF_PriorityNormal,
            rf_tx_done_cb, (RF_EventCmdDone | RF_EventRxEntryDone | RF_EventLastCmdDone));
#else
    RF_EventMask terminationReason = RF_runCmd(rf_handle, (RF_Op*) &RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
#endif

    // Command status
    uint32_t cmdStatus = ((volatile RF_Op*) &RF_cmdPropTx)->status;
    uint32_t cmdRXStatus = ((volatile RF_Op*) &RF_cmdPropRxAdv)->status;

    // Reset status
    RF_cmdNop.status = IDLE;
    RF_cmdPropCs.status = IDLE;
    RF_cmdCountBranch.status = IDLE;
    RF_cmdPropTx.status = IDLE;
    RF_cmdPropRxAdv.status = IDLE;
    RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;

    // If command terminate OK
    if (cmdStatus == PROP_DONE_OK && cmdRXStatus == PROP_DONE_OK && terminationReason == RF_EventLastCmdDone) {
        // If packet is from the type ACK
        if (rx_payload.cmd != RF_CMD_ACK) {
            return false;
        }

        *ack_payload = rx_payload;

        return true;
    }

    return false;
}

在7秒周期事件中调用函数时、它运行没有错误、当调用检测时、它会卡在 RF_runCmd、但会发送信号。 什么会导致此行为?

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

    恐怕除非我有办法再现问题、否则我无法回答正在发生的事情。

    请为我提供一个简化的示例程序、其中说明了错误、以便我可以在我们的 LP 上运行它。

    您应该使用 SDK 中我们的一个默认示例作为入门指南。

    如果您想自己调试它、则应在您卡住时监控所有命令的状态。 这可能会给你有用的信息,为什么你被卡住。

    BR

    Siri