CC1310: RF模块关不上,卡在RF_close里

Part Number: CC1310

TI的工程师们你们好:在关断RF模块前,先调用了这个函数EasyLink_abort();,

EasyLink_Status EasyLink_abort(void)
{
    EasyLink_Status status = EasyLink_Status_Cmd_Error;

    if ( (!configured) || suspended)
    {
        return EasyLink_Status_Config_Error;
    }
    //check an Async command is running, if not return success
    if (!EasyLink_CmdHandle_isValid(asyncCmdHndl))
    {
        return EasyLink_Status_Aborted;
    }

    //force abort (gracefull param set to 0)
    if (RF_cancelCmd(rfHandle, asyncCmdHndl, 0) == RF_StatSuccess)
    {
        /* If command is cancelled immediately, callback may have set the cmd handle to invalid.
         * In that case, no need to pend.
         */
        if (EasyLink_CmdHandle_isValid(asyncCmdHndl))
        {
            /* Wait for Command to complete */
            RF_EventMask result = RF_pendCmd(rfHandle, asyncCmdHndl, (RF_EventLastCmdDone |
                    RF_EventCmdAborted | RF_EventCmdCancelled | RF_EventCmdStopped));
            if (result & RF_EventLastCmdDone)
            {
                status = EasyLink_Status_Success;
            }
        }
        else
        {
            /* Command already cancelled */
            status = EasyLink_Status_Success;
        }
    }
    else
    {
        status = EasyLink_Status_Cmd_Error;
    }

    return status;
}
但是该函数走到这个判断就返回了

//check an Async command is running, if not return success
if (!EasyLink_CmdHandle_isValid(asyncCmdHndl))
{
return EasyLink_Status_Aborted;
}。紧接这执行RF_close函数就会卡

  • 使用的是NoRTOS,希望大家帮帮解答,困扰很多天了,在这里感谢大家了,谢谢

  • 在调用RF_close前,又调用RF_cancelCmd(rfHandle, asyncCmdHndl, 0);函数,但是返回值是RF_StatInvalidParamsError,asyncCmdHndl的值为-1,rfHandle这个是rfObject (0x20000A90)

  • 已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好,

         使用EasyLink时,您不应该从应用程序访问射频API。 Easylink API使用RF驱动程序,而应用程序使用EasyLink API。如果您手动尝试从应用程序关闭RF驱动程序(应用程序甚至不应该访问rfHandle),那么EasyLink API将根本不会知道RF驱动程序已关闭。

       为什么需要关闭RF驱动程序呢?

        如果您需要从应用程序打开和关闭RF驱动程序,我建议您直接开始使用RF驱动程序,而不是使用easylink API。这样,应用程序可以完全控制射频。

  • 我现在在做低功耗,我在调用RF_close前,调用RF_flushCmd(rfHandle, RF_CMDHANDLE_FLUSH_ALL, 1); 发现电流下降3mA左右,这应该是关闭RF模块了吧。还有一个问题,我关闭了RF模块,串口模块,定时器模块。使用万用表测量发现电流还是有4.82mA。在没有关闭这些模块之前为8.5mA。使用的是官方开发板,跳线帽全都拆掉了,并且断开了USB的连接。这个电流正常吗?谢谢大佬帮忙解答,感谢感谢!!!

  • 您好,

        如前面回复,您不应该将RF驱动程序和EasyLink API混合使用。

         EasyLink是RF驱动程序的抽象层,因此使用时,EasyLink层应该访问RF驱动程序,而不是应用程序本身。

         如果发现EasyLink API不支持您想要的功能,您应该停止使用它,并仅使用RF驱动程序编写应用程序。

         我无法就如何组合使用EasyLink API和RF驱动程序提供建议,因为这不是推荐的用例。

         我不知道3 mA的电流下降表示什么。RF核心在空闲状态下耗电237微安,在接收(RX)状态下耗电5.5毫安,在发送(TX)状态下超过10毫安(来自数据手册)。

         在不知道运行的是什么软件以及进行了什么修改的情况下,我无法知道预期的电流消耗。

        为了验证您的测量方法是否一切正常,您应该先在未修改的情况下运行TI在CC1310 LP上的默认示例时测量电流。

         在运行rfPacketTX示例时锁定电流曲线,它将是这样的:

        

         该示例每500毫秒发送一个数据包,其余时间保持待机状态(您可以看到待机时的充电脉冲)。

  • simplelink_cc13x0_sdk_2_30_00_20\examples\nortos\CC1310_LAUNCHXL\drivers\rfPacketTx。您好,您说的那个示例路径是这个嘛。我把这个下载到开发板中,使用万用表观察,发现电流一直保持在5.59mA左右

  • 您好,    

         硬件:LAUNCHXL-CC1310 评估板 | 德州仪器 TI.com.cn

         软件:rfPacketTx

    发现电流一直保持在5.59mA左右

        此代码会让芯片以PACKET_INTERVAL 间隔sleep,电流不应该一直不变。     

  • 您好,

    我把 mainThread(NULL);函数放到while(1),发现和您之前说的现象一样,可是我把这个rfPacketTx下载到自己的板子发现电流又一直在5.9mA左右。

    这个问题困扰很久了,可以帮忙分析分析吗?十分感谢您抽出时间为我解答问题~

  • 您好,

    可是我把这个rfPacketTx下载到自己的板子发现电流又一直在5.9mA左右。

    对照LAUNCHXL-CC1310 评估板 | 德州仪器 TI.com.cn检查硬件设计,也可能外围电路有电流消耗的情况。