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.

[参考译文] RTOS/CC1310:RTOS/CC1310

Guru**** 2540720 points
Other Parts Discussed in Thread: CC1310, TMP116

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/699544/rtos-cc1310-rtos-cc1310

器件型号:CC1310
Thread 中讨论的其他器件: TMP116SYSBIOS

工具/软件:TI-RTOS

您好!

我回来了、我找不到泄漏电流的来源、即129uA、我检查了可能是该电流源的参数。

(与 TMP116连接的 Custum PCB CC1310 4x4 RSM)

1 -我删除与 UART 相关的代码;

2 -我检查未使用的引脚

3-我用必要的建议重新编写了有关温度部分的代码;

您好、除此之外、 

在传感器打开之前、我的系统在传感器打开后进入待机模式、尽管在发送射频数据后、我添加了任务睡眠、如何返回待机模式以及传感器为何保持活动状态、但系统消耗的电流仍为129uA?

感谢帮助;  

是否还有其他参数要检查,请检查?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Abdelkader、
    您使用的是时钟还是计时器? 检查是否有任何其它外设处于打开状态。
    此致、
    Prashanth
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、PrashanthS
    我使用了时钟、并且没有其他处于活动状态的外设。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Abdelkader、
    在这种情况下、请尝试禁用时钟以检查是否是问题原因。 您可以使用 Clock_stop()将其关闭。  
    此致、
    Prashanth

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

    您能向我解释一下为什么以及如何在可能的情况下添加 Clock_stop 示例吗?

    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、再说一次、
    我将按照以下代码所示应用 Clock_stop、然后电流将增加到3mA。

    /*
    *版权所有(c) 2015-2016、德州仪器(TI)公司
    *保留所有权利。
    *
    *以源代码和二进制形式重新分发和使用、有无
    *如果满足以下条件、则允许进行修改
    符合*:
    *
    **源代码的重新分发必须保留上述版权
    *注意、此条件列表和以下免责声明。
    *
    **二进制形式的再发行必须复制上述版权
    *请注意、中的此条件列表和以下免责声明
    *随分发提供的文档和/或其他材料。
    *
    **德州仪器公司的名称和名称均不相同
    *其贡献者可用于认可或推广衍生产品
    *未经特定的事先书面许可。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *以及任何明示或暗示的保证、包括但不限于:
    *特定适销性和适用性的隐含保证
    *不承认目的。 在任何情况下、版权所有者不得或
    *派遣国应对任何直接、间接、偶然、特殊、
    *典型或必然的损害(包括但不限于
    *采购替代货物或服务;丧失使用、数据或利润;
    *或业务中断)、无论原因是什么以及任何责任理论、
    *无论是合同、严格责任还是侵权行为(包括疏忽或)
    *否则)因使用本软件而以任何方式产生、
    *即使被告知可能会发生此类损坏。
    *

    /*
    *==== rfEasyLinkTx.c ===
    *
    /* XDCtools 头文件*/
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include


    /* BIOS 头文件*/
    #include
    #include
    #include
    #include
    #include
    #include


    /* TI-RTOS 头文件*/
    #include
    #include

    #include
    #include
    #include
    #include
    #include
    #include

    /*板头文件*/
    #include "Board.h"

    /* EasyLink API 头文件*/
    #include "EasyLink/EasyLink.h"

    #include "sc/scif.h"

    #include "version.h"
    #include "../sonde_gw_FW/sys_intf.h"

    #include
    #include



    #define RFEASINKTX_TASK_STACK_SIZE 1024
    #define RFEASINKTX_TASK_PRIORITY 2.

    #define RFEASINKTX_BURST_SIZE 1

    Clock_Params clkParams;
    clock_handle clk2;

    Task_Structt txTask;//不是静态的,因此可以在 ROV 中看到*/
    静态 Task_Params txTaskParams;
    静态 uint8_t txTaskStack[RFEASINKTX_TASK_STACK_SIZE];

    Task_StructsensorTask;//不是静态的,因此可以在 ROV 中看到*/
    静态 Task_Params sensorTaskParams;
    静态 uint8_t sensorTaskStack[RFEASINKTX_TASK_STACK_SIZE];

    typedef 结构{
    uint8_t 原因;
    内部16_t TEMP_DEG_FRAC_8;
    uint8_t BAT_20mV;
    } opto_sonde_data_t;


    静态空 rfEasyLinkTxFnx (UArg0、UArgarg1)


    opto_sonde_data_t* optosonde_data =(opto_sonde_data_t*) arg0;
    // rtc_cmd_t* rtc_cmd = arg1;

    // EasyLink_init (EasyLink_Phy_625bpsLrm);
    // EasyLink_init (EasyLink_Phy_5kbpsSlLr);
    EasyLink_init (EasyLink_Phy_Custom);

    /*
    *如果您希望使用默认频率以外的频率、请使用
    *以下 API:
    * EasyLink_setFrequency (868000000);
    *

    /*将输出功率设置为12dBm */
    // EasyLink_setRfPwr (12);
    EasyLink_setRfPwr (10);

    EasyLink_TxPacket txPacket;

    //填充数据包数据
    uint8_t PAYLOAD_ptr = 0;
    //有效载荷版本
    txPacket.PAYLOAD[PAYLOAD_PTR++]=(uint8_t)(0x0);
    // src MAC
    EasyLink_getIeeAddr (&txPackage.PAYLOAD[PAYLOAD_PTR]);
    PAYLOAD_PTR += 8;

    //复制数据
    txPacket.PAYLOAD[PAYLOAD_PTR++]=(uint8_t)(optosonde_data->原因);
    txPacket.PAYLOAD[PAYLOAD_PTR++]=(uint8_t)(optosonde_data->temp_deg_FRAC_8 >> 8);
    txPacket.PAYLOAD[PAYLOAD_PTR++]=(uint8_t)(optosonde_data->temp_deg_FRAC_8);

    txPacket.PAYLOAD[PAYLOAD_PTR++]=(uint8_t)(optosonde_data->bat_20mV);

    //固件版本
    memcpy (&txPacket.PAYLOAD[PAYLOAD_PTR]、&version_hash、sizeof (version_hash));
    PAYLOAD_PTR += sizeof (version_hash);

    txPacket.len = PAYLOAD_PTR;
    txPacket.absTime = 0;
    txPacket.dstAddr[0]= OPTOSONDE_ADDR;

    EasyLink_Status 结果= EasyLink_transmit (&txPacket);

    if (结果=EasyLink_Status_Success)

    /*切换 LED1以指示 TX */
    // PIN_setOutputValue (pinHandle、Board_PIN_LED1、!PIN_getOutputValue (Board_PIN_LED1));

    其他

    /*切换 LED1和 LED2以指示错误*/
    // PIN_setOutputValue (pinHandle、Board_PIN_LED1、!PIN_getOutputValue (Board_PIN_LED1));
    // PIN_setOutputValue (pinHandle、Board_PIN_LED2、!PIN_getOutputValue (Board_PIN_LED2));


    //防止按钮重置过载
    //if (optosonde_data->reason = optosonde_reason_button){
    //Task_sleep (1000000 / Clock_tickPeriod);
    //}


    Clock_Params_init (clkParams);
    clkParams.period = 80000;
    clkParams.startFlag = true;
    clock_stop (clk2);
    //Task_sleep (30000 * 100);

    SysCtrlSystemReset();





    空 sendorTask (UArg0、UArgarg1)

    static opto_sonde_data_t optosonde_data;

    float 温度;
    I2C_Handle I2C;
    TMP116_handle tmp116Handle;
    I2C_Params i2cParams;
    TMP116_Params tmp116Params;
    I2C_Params_init (&i2cParams);
    i2cParams.transferMode = I2C_MODE_BLOCKING;
    i2cParams.bitrate = I2C_400kHz;
    I2C = I2C_open (Board_I2C_TMP、&i2cParams);
    if (i2c == NULL){


    否则{


    TMP116_Params_init (&tmp116Params);
    Task_sleep (30000 * 100);// 30 s

    tmp116Handle = TMP116_open (Board_I2C_TMP、i2c、&tmp116Params);


    if (tmp116Handle == NULL){ //验证器输出校正
    }否则



    Task_sleep (2000 * 100);//等待2s

    if (TMP116_getTemp (tmp116Handle、TMP116_Celsius、&temperature)){



    否则{


    TMP116_Close (tmp116Handle);

    I2C_Close (i2c);

    uint16_t MSB =(uint8_t)(温度);
    uint8_t LSB =(uint8_t)((温度- MSB)* 100);


    optosonde_data.temp_deg_FRAC_8 =(MSB<8)+LSB;

    while (!AONBatMonNewBatteryMeasureReady())

    //等待
    Task_sleep (100 * 100 / Clock_tickPeriod);

    optosonde_data.bat_20mV =(AONBatMonBatteryVoltageGet ()* 390625)/ 2000000;
    AONBatMonDisable();

    // Init Tx 任务
    Task_Params_init (&txTaskParams);
    TxTaskParams.STACKSIZE = RFEASYS LINKTX_TASK_STACK_SIZE;
    txTaskParams.priority = RFEASINKTX_TASK_priority + 1;
    txTaskParams.stack =&txTaskStack;
    txTaskParams.arg0 =(XDC_UArg) optosonde_data (&O);

    Task_construction (&txTask、rfEasyLinkTxFnx、&txTaskParams、NULL);



    /*
    *==== main ====
    *
    int opto_main (void)


    /*调用驱动程序初始化函数。 *
    Board_initGeneral();
    Board_initI2C();

    Task_Params_init (&sensorTaskParams);
    TxTaskParams.STACKSIZE = RFEASYS LINKTX_TASK_STACK_SIZE;
    txTaskParams.priority = RFEASINKTX_TASK_priority;
    txTaskParams.stack = sensorTaskStack;
    txTaskParams.arg0 = 0;
    txTaskParams.arg1 = 0;

    Task_construct(&sensorTask,sendorTask,&sensorTaskParams, NULL);

    /*启动 BIOS */
    BIOS_start();

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

    我不知道为什么在 clock_stop()之后有 SysCtrlSystemReset()。 由于系统会在 clock_stop()之后立即复位,因此听起来不像是在休眠。 尝试在 clock_stop()之后添加您的睡眠状态,并查看您测量的电流大小。

    此致、
    Prashanth
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PrashanthS、您好!
    非常感谢您的回复和支持、
    实施建议后、系统经历了三个阶段:
    1-在打开 TMP116传感器之前、系统电流为4uA、待机模式;
    传感器打开并发送射频数据后、电流变为135uA、持续一秒、这是有源传感器转换模式;
    3 -在停止时钟和任务睡眠后、系统电流将通过并保持在6mA。
    我希望我能解释一下。

    感谢您的支持。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PrashanthS、您好!
    很好、我找到了问题的答案、感谢您和您的团队的帮助、

    此致、