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 挂起

Guru**** 2484615 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/1194329/cc1310-rf_runcmd-hangs

器件型号:CC1310

您好!

CC1310 TX 存在问题。

如标题中所述、 RF_runCmd 将仅运行一次。

第二次、它只是挂起、从不退出。

什么地方出错了?

空 RF_TASK (UARg arg0、UARg arg1)

rf_params rfParams;
rf_params_init (&rfParams);

rfpacket_t rf_packet_tx ={.pkgcntr=0};
sensordata_t sensordata;

/*打开 LED 引脚*/
ledPinHandle = PIN_OPEN (&ledPinState、LEDGpioInitTable);
if (ledPinHandle ==空)

while (1);


rf_cmdPropTx.pkt=(uint8_t*)&rf_packet_tx;
rf_cmdPropTx.startTrigger.triggerType = trig_now;

/*请求对讲机的访问*/
rfHandle = RF_OPEN (&rfObject、&RF_prop、(RF_RadioSetup*)&RF_cmdPropRadioDivSetup、&rfParams);

/*设置频率*/
rf_postCmd (rfHandle、(rf_Op*)&rf_cmdf、rf_PriorityNormal、NULL、0);

while (1)

PIN_setOutputValue (ledPinHandle、LED_blue_PIN、1);

Task_sleep (1000);

PIN_setOutputValue (ledPinHandle、LED_blue_PIN、0);


//将数据复制到有效载荷
rf_cmdPropTx.pktLen = rf_protocol_pack (&rf_packet_TX、&sensordata);
rf_packet_tx.pkgcntr++;
rf_cmdPropTx.pktLen += 1;// pkgcntr

/*发送数据包*/
RF_EventMask terminationReason = RF_runCmd (rfHandle、(RF_OP*)&RF_cmdPropTx、RF_PriorityNormal、NULL、0);

switch (terminationReason)

案例 RF_EventLastCmdDone:
//独立无线电操作命令或最后一个无线电
//链中的操作命令已完成。
中断;
案例 RF_EventCmd 取消:
//命令在启动前被取消;这可能是导致的
//按 RF_cancelCmd ()或 RF_flushCmd ()。
中断;
案例 RF_EventCmdAborted:
//由 RF_cancelCmd ()或导致命令终止突然
// rf_flushCmd ()。
中断;
案例 RF_EventCmdStopped:
// RF_cancelCmd ()或导致正常命令终止
// rf_flushCmd ()。
中断;
默认值:
//未捕捉错误事件
PIN_setOutputValue (ledPinHandle、LED_RED_PIN、0);
while (1);

uint32_t cmdStatus =(volatile rf_Op*)&rf_cmdPropTx)-> status;
switch (cmdStatus)

案例 PROP_DONE_OK:
//数据包传输成功
中断;
案例 PROP_DONE_STOPPED:
//在发送数据包并完成时接收到 CMD_STOP
//传输数据包
中断;
案例 PROP_DONE_ABORT:
//发送数据包时接收到 CMD_ABORT
中断;
案例 PROP_ERROR_PAR:
//观察到非法参数
中断;
PROP_ERROR_NO_SETUP 案例:
//在受支持的中未设置无线电的情况下发送命令
//模式使用 CMD_PROP_RADIO_SETUP 或 CMD_RADIO_SETUP
中断;
案例 PROP_ERROR_NO_FS:
//发送命令而不对合成器进行编程
中断;
PROP_ERROR_TXUNF 案例:
//运行期间观察到 TX 下溢
中断;
默认值:
//未捕获的错误事件-这些可能来自
// rf_mailbox.h 中定义的状态池
PIN_setOutputValue (ledPinHandle、LED_RED_PIN、0);
while (1);

/*关闭无线电*/
RF_Yield (rfHandle);

Task_sleep (10);


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

    您好、Jakob、

    您是否以任何方式修改了对讲机设置?

    此致、

    Arthur

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

    尊敬的 Arthur:

    不、我不这么认为。
    它仅从 SmartRF Studio 输出。
    但奇怪的是、它是第一次工作。

    此致

    Jakob

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

    您好!

    您能否检查 RF_cmdPropTx 的状态字段?

    此外、您是否也可以在其中发布对讲机设置文件?

    此致、

    Arthur

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

    您好!

    cmdStatus 为0x3400。 我认为这是可以的。

    设置:

    //
    //由 SmartRF Studio 版本2.22.0生成(构建号295)
    //应用的模板与 CC13x0 SDK 版本2.10.xx.xx 或更高版本兼容。
    //器件:CC1310 Rev. B (2.1)。
    //
    //


    //
    //参数摘要
    // RX 地址0:0xAA
    // RX 地址1:0xBB
    // RX 地址模式:无地址检查
    //频率:868.00000 MHz
    //数据格式:串行模式禁用
    //偏差:25.000kHz
    //数据包长度配置:变量
    //最大包长度:255
    //数据包长度:20
    //数据包数据:255
    // RX 滤波器带宽:98kHz
    //符号速率:25.00000 kBaud
    //同步字长度:32位
    // TX 功率:10dBm
    //白化:PN9白化

    #include "smartrf_settings.h"

    #include DeviceFamily_constructPath (rf_patches/rf_patch_cpe_genfsk.h)
    #include DeviceFamily_constructPath (rf_patches/rf_patche_rfe_genfsk.h)

    // TI-RTOS 射频模式对象
    RF_Mode RF_PROP =

    rfMode = RF_MODE_Proprietary"子模式1、
    .cpePatchFxn =&rf_patch_cpe_genfsk、
    .mcePatchFxn = 0、
    .rfePatchFxn =&rf_patch_rfe_genfsk
    };


    //覆盖 CMD_PROP_RADIO_DIV_SETUP
    uint32_t pOverrides[]=

    // override_use_patch_prop_genfsk.xml
    // PHY:使用 MCE ROM 组4、RFE RAM 补丁
    MCE_RFE_OVERRIDE (0、4、0、1、0、0)、
    // override_synth_prop_863_930_div5.xml
    //合成:将推荐的 RTRIM 设置为7
    HW_REG_OVERRIDE (0x4038、0x0037)、
    //合成:将频率设置为4MHz
    (uint32_t) 0x000684A3、
    //合成:配置精细校准设置
    HW_REG_OVERRIDE (0x4020、0x7F00)、
    //合成:配置精细校准设置
    HW_REG_OVERRIDE (0x4064、0x0040)、
    //合成:配置精细校准设置
    (uint32_t) 0xB1070503、
    //合成:配置精细校准设置
    (uint32_t) 0x05330523、
    //合成:将锁定后的环路带宽设置为20kHz
    (uint32_t) 0x0A480583、
    //合成:将锁定后的环路带宽设置为20kHz
    (uint32_t) 0x7AB80603、
    //合成:配置 VCO LDO (在 ADI1中、设置 VCOLDOCFG=0x9F 以使用电压输入基准)
    ADI_REG_OVERRIDE (1、4、0x9F)、
    //合成:配置同步 LDO (在 ADI1中、设置 SLDOCTL0.COMP_CAP=1)
    ADI_HALFREG_OVERRIDE (1、7、0x4、0x4)、
    //合成:使用24MHz XOSC 作为同步时钟、启用额外的 PLL 滤波
    (uint32_t) 0x02010403、
    //合成:配置额外的 PLL 滤波
    (uint32_t) 0x00108463、
    //合成:增加同步编程超时(0x04B0 RAT 节拍= 300us)
    (uint32_t) 0x04B00243、
    // override_phy_rx_aaf_bw_0xd.xml
    // Rx:将抗混叠滤波器带宽设置为0xD (在 ADI0中、设置 IFAMPCTL3[7:4]=0xD)
    ADI_HALFREG_OVERRIDE (0、61、0xF、0xD)、
    // override_phy_gfsk_rx.xml
    // Rx:将 LNA 偏置电流修整偏移设置为3
    (uint32_t) 0x00038883、
    // Rx:在发现同步事件时冻结 RSSI
    HW_REG_OVERRIDE (0x6084、0x35F1)、
    // override_phy_gfsk_pa_ramp_agc_reflevel_0x1a.xml
    // Tx:配置 PA 斜升设置(0x41)。 RX:将 AGC 基准电平设置为0x1A。
    HW_REG_OVERRIDE (0x6088、0x411A)、
    // Tx:配置 PA 斜升设置
    HW_REG_OVERRIDE (0x608C、0x8213)、
    // override_phy_rx_rssi_offset_5db.xml
    // Rx:设置 RSSI 偏移以将报告的 RSSI 调整+5dB (默认值:0)、针对外部偏置和差分配置进行了修整
    (uint32_t) 0x00FB88A3、
    (uint32_t) 0xFFFFFFFF
    };


    // CMD_PROP_RADIO_DIV_SETUP
    //针对所有频段的专有模式无线电设置命令
    RFC_CMD_PROP_RADIO_DIV_SETUP_t RF_cmdPropRadioDivSetup =

    .commandNo = 0x3807、
    .status = 0x0000、
    .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx
    .StartTime = 0x00000000、
    .startTrigger.triggerType = 0x0、
    .startTrigger.bEnaCmd = 0x0、
    .startTrigger.triggerNo = 0x0、
    .startTrigger.PastTrig = 0x0、
    .condition.rule = 0x1、
    .condition.nSkip = 0x0、
    modulation .modType = 0x1、
    .modulation.deviation = 0x64、
    symbolRate.prescale = 0xF、
    symbolRate.rateWord = 0x4000、
    .symbolRate.decimMode = 0x0、
    .rxBw = 0x24、
    .PreambBytes = 0x4、
    .Conf.前置 放大器模式= 0x0、
    .formatConf.nSwBits = 0x20、
    .formatConf.bBitVersal = 0x0、
    .formatConf.bMsbFirst = 0x1、
    formatConf.fecMode = 0x0、
    formatConf.whitenMode = 0x2、
    .config.frontEndMode = 0x0、
    config.biasMode = 0x1、
    config.analogCfgMode = 0x0、
    config.bNoFsPowerUp = 0x0、
    TxPower = 0x38D3、
    .pRegOverride = pOverrides、
    .centerFreq = 0x0364、
    .intFreq = 0x8000、
    .loDivider = 0x05
    };


    // CMD_FS
    //频率合成器编程命令
    RFC_CMD_FS_t RF_cmdF =

    .commandNo = 0x0803、
    .status = 0x0000、
    .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx
    .StartTime = 0x00000000、
    .startTrigger.triggerType = 0x0、
    .startTrigger.bEnaCmd = 0x0、
    .startTrigger.triggerNo = 0x0、
    .startTrigger.PastTrig = 0x0、
    .condition.rule = 0x1、
    .condition.nSkip = 0x0、
    .frequency = 0x0364、
    fractFreq = 0x0000、
    synthConf.bTxMode = 0x0、
    .synthConf.refFreq = 0x0、
    .__dummy0 = 0x00、
    .__dummy1 = 0x00、
    .__dummy2=0x00,
    .__dummy3=0x0000
    };


    // CMD_PROP_TX
    //专有模式发送命令
    RFC_CMD_PROP_TX_t RF_cmdPropTx =

    .commandNo = 0x3801、
    .status = 0x0000、
    .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx
    .StartTime = 0x00000000、
    .startTrigger.triggerType = 0x0、
    .startTrigger.bEnaCmd = 0x0、
    .startTrigger.triggerNo = 0x0、
    .startTrigger.PastTrig = 0x0、
    .condition.rule = 0x1、
    .condition.nSkip = 0x0、
    .pktConf.bFsOff = 0x0、
    .pktConf.bUseCrc = 0x1、
    .pktConf.bVarLen = 0x1、
    .pktLen = 0x14、
    syncdWord = 0x930B51DE、
    .pPKT = 0 //插入适用的指针:(UINT8_t*)&xxx
    };


    // CMD_PROP_RX
    //专有模式接收命令
    RFC_CMD_PROP_RX_t RF_cmdPropRx =

    .commandNo = 0x3802、
    .status = 0x0000、
    .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx
    .StartTime = 0x00000000、
    .startTrigger.triggerType = 0x0、
    .startTrigger.bEnaCmd = 0x0、
    .startTrigger.triggerNo = 0x0、
    .startTrigger.PastTrig = 0x0、
    .condition.rule = 0x1、
    .condition.nSkip = 0x0、
    .pktConf.bFsOff = 0x0、
    .pktConf.bRepeatOk = 0x0、
    .pktConf.bRepeatNok = 0x0、
    .pktConf.bUseCrc = 0x1、
    .pktConf.bVarLen = 0x1、
    .pktConf.bChkAddress = 0x0、
    .pktConf.endType = 0x0、
    .pktConf.filterOp = 0x0、
    rxConf.bAutoFlushIgnored = 0x0、
    rxConf.bAutoFlushCrcErr = 0x0、
    rxConf.bIncludeHdr = 0x1、
    rxConf.bIncludeCrc = 0x0、
    rxConf.bAppendRssi = 0x0、
    rxConf.bAppendTimestamp = 0x0、
    rxConf.bAppendStatus = 0x1、
    syncdWord = 0x930B51DE、
    .maxPktLen = 0xFF、
    .address0 = 0xAA、
    .address1 = 0xBB、
    endTrigger.triggerType = 0x1、
    .endTrigger.bEnaCmd = 0x0、
    .endTrigger.triggerNo = 0x0、
    .endTrigger.PastTrig = 0x0、
    .EndTime = 0x00000000、
    .pQueue = 0、//插入适用的指针:(dataQueue_t*)&xxx
    .pOutput = 0 //插入适用的指针:(uint8_t*)&xxx
    };

    RFC_CMD_TX_TEST_t RF_cmdTxTest =

    .commandNo = 0x0808、
    .status = 0x0000、
    .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx
    .StartTime = 0x00000000、
    .startTrigger.triggerType = 0x0、
    .startTrigger.bEnaCmd = 0x0、
    .startTrigger.triggerNo = 0x0、
    .startTrigger.PastTrig = 0x0、
    .condition.rule = 0x1、
    .condition.nSkip = 0x0、
    config.bUseCw = 0x0、
    config.bFsOff = 0x1、
    config.whitenMode = 0x0、
    .__dummy0 = 0x00、
    txWord = 0xAAAA、
    .__dummy1 = 0x00、
    endTrigger.triggerType = 0x1、
    .endTrigger.bEnaCmd = 0x0、
    .endTrigger.triggerNo = 0x0、
    .endTrigger.PastTrig = 0x0、
    syncdWord = 0x930B51DE、
    .EndTime = 0x00000000
    };

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

    谢谢、除了无线电设置之外、您还没有更改默认 rfPacketTx 固件中的任何内容? 它是否也是定制硬件?

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

    它是自定义硬件、但问题也出现在 Launch eval 板上。

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

    好的、发现问题:

    在另一个任务中、我有 :GPIO_setConfig (I2C_PWR_EN_PIN、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH);

    当我将其更改为 PIN_Open 和 PIN_setOutputValue 时、它可以正常工作。

    我完全不明白为什么使用 GPIO 时出现问题,为什么使用 PIN 模块可以解决问题?

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

    您好、Jakob、

    我认为这里的错误是使用 GPIO 驱动程序。 GPIO_setConfig 用于配置给定的 GPIO、而不是更改其输出状态。

    如果要执行此操作、则必须在使用 GPIO_setConfig 配置 GPIO 后使用 GPIO_write 方法。

    但是、如果您已经使用了 PIN 驱动程序、我建议不要同时使用 PIN 和 GPIO 调用。 最好选择其中一个、并在应用中始终如一地使用它。

    此致、

    Arthur

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

    尊敬的 Arthur:
    感谢你的答复。
    我对 PIN 驱动程序与 GPIO 驱动程序有点困惑,是否可以使用它们中的任何一个?
    为什么有两个不同的模块用于控制 GPIO?

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

    您好、Jakob、

    您确实可以使用其中的任何一个、这完全取决于偏好、尽管我个人会使用 GPIO、因为这是我们在最新器件上支持的 GPIO。

    有两个驱动程序的主要原因是 PIN 驱动程序仅为 cc13xx/ccc26xx 器件编写。 然后、所有 SimpleLink 器件上的驱动程序进行了标准化工作、从而产生了 GPIO 驱动程序。 因此、在整个 SimpleLink 系列中、API 是相同的。

    以下是一些总结不同之处的主题:

    此致、

    Arthur