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/CC1312R:CC1312频率变化问题

Guru**** 2422370 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/778992/rtos-cc1312r-cc1312-freqeuncy-change-issue

器件型号:CC1312R

工具/软件:TI-RTOS

我们目前正在进行 CC1312项目。

这是使用[节点集中器]基本示例进行的。

我希望在使用节点和集中器时动态更改频率。 (921MHz、922MHz、923MHz)

为此、我继续执行以下设置。

首先、我使用 Smart RF Studio 设置价值。

//
//由 SmartRF Studio 版本2.11.0 (内部版本号126)生成
//应用的模板与 CC13x2 SDK 2.20.xx.xx 兼容
//器件:CC1312R 修订版1.1
//
*********


//
//参数摘要
//地址:0
//地址0:0xAA
//地址1:0xBB
//地址模式:无地址检查
//频率:921.00000 MHz
//数据格式:串行模式禁用
//偏差:5.000 kHz
// IEEE 802.15.4数据包长度:30
// 802.15.4g 模式:0
//选择发送 PSDU 八位字节的位顺序: 1
//数据包长度配置:变量
//最大数据包长度:255
//数据包长度:30
//数据包数据:255
//前导码计数:2字节
//前导码模式:发送0作为第一个前导码位
// RX 滤波器带宽:34.1kHz
//符号速率:19.99969 kBaud
//同步字: 0x930b51de
//同步字长度:32位
// TX 功率:14dBm (需要在 ccfg.c 中定义 CCFG_FORCE_VDDR_HH = 1、请参阅 CC13xx/CC26xx 技术参考手册)
//提示:CC1101/CC2500兼容

#include 
#include DeviceFamily_constructPath (driverlib/rf_mailbox.h)
#include DeviceFamily_constructPath (driverlib/rf_common_cmd.h)
#include DeviceFamily_constructPath (driverlib/rf_prop_cmd.h)
#include 
#include DeviceFamily_constructPath (rf_patches/rf_patch_cpe_prop.h)
#include DeviceFamily_constructPath (rf_patches/rf_patch_rfe_genfsk.h)
#include DeviceFamily_constructPath (rf_patches/rf_patch_mce_sl_longrprop.h)
#include "smartrf_mode_rf_rf_rf_mware/rf_rth



)#include "rf_mode.h = rf_rf_rtos"= rf_

rfMode = RF_MODE_AUTO、
.cpePatchFxn =&rf_patch_cpe_prop、
.mcePatchFxn =&rf_patch_mce_sl_longrange、
.rfePatchFxn =&rf_patch_rfe_genfsk
、};


//覆盖 CMD_PROP_RADIO_DIV_SETUP
UINT32_t pOverrides[]=
{
// override_use_patch_simplelink_long_range.xml
// PHY:使用 MCE RAM 补丁、RFE RAM 补丁
MCE_RFE_OVERRIDE (1、0、0、1、0、0)、
// PHY:仅对 Rx (0xE)使用 MCE RAM 补丁、对 Tx (0x6)使用 MCE ROM 组6
(uint32_t) 0x006E88E3、
// override_synth_prop_863_930_div5.xml
//合成:使用48MHz 晶体作为同步时钟、启用额外的 PLL 滤波
(uint32_t) 0x02400403、
//合成:将最小 RTRIM 设置为6
(uint32_t) 0x00068793、
//合成:配置额外的 PLL 滤波
(uint32_t) 0x001C8473、
//合成:配置额外的 PLL 滤波
(uint32_t) 0x00088433、
//合成:将频率设置为4MHz
(uint32_t) 0x000684A3、
//合成:配置更快的校准
HW32_array_override (0x4004、1)、
//合成:配置更快的校准
(uint32_t) 0x180C0618、
//合成:配置更快的校准
(uint32_t) 0xC00401A1、
//合成:配置更快的校准
(uint32_t) 0x00010101、
//合成:配置更快的校准
(uint32_t) 0xC0040141、
//合成:配置更快的校准
(uint32_t) 0x00214AD3、
//合成:将同步编程超时从默认值减少90us (0x0298 RAT 节拍= 166us)
(uint32_t) 0x02980243、
//合成:将锁定后的环路带宽设置为20kHz
(uint32_t) 0x0A480583、
//合成:将锁定后的环路带宽设置为20kHz
(uint32_t) 0x7AB80603、
//合成:将锁定后的环路带宽设置为20kHz
(uint32_t) 0x00000623、
// override_phy_simplelink_long_range_dsss2.xml
// PHY:为有效载荷数据配置 DSSS SF=2
HW_REG_OVERRIDE (0x5068、0x0100)、
// PHY:设置 SimpleLink 远距离位反转同步字模式(未编码、在扩展到固定大小的64位模式之前):0x146F
HW_REG_OVERRIDE (0x5128、0x146F)、
// PHY:设置 SimpleLink 远距离同步字模式(未编码、在扩展到固定大小的64位模式之前):0xEB90
HW_REG_OVERRIDE (0x512C、0xEB90)、
// PHY:降低解调器相关器阈值以提高 Rx 灵敏度
HW_REG_OVERRIDE (0x5124、0x362E)、
// PHY:降低解调器相关器阈值以提高 Rx 灵敏度
HW_REG_OVERRIDE (0x5118、0x004C)、
// PHY:配置频率偏移补偿跟踪器的限制
HW_REG_OVERRIDE (0x5140、0x3E05)、
// override_phy_rx_frontend_simplelink_long_range.xml
// Rx:设置 RSSI 偏移以将报告的 RSSI 调整-2dB (默认值:0)、针对外部偏置和差分配置进行了修整
(uint32_t) 0x000288A3、
// override_phy_rx_aaf_bw_0xd.xml
// Rx:将抗混叠滤波器带宽设置为0xD (在 ADI0中、设置 IFAMPCTL3[7:4]=0xD)
ADI_HALFREG_OVERRIDE (0、61、0xF、0xD)、
// TX 功率覆盖
//直流/直流稳压器:在具有14dBm PA 设置的 Tx 中、使用 DCDCCTL5[3:0]= 0xF (DITHER _EN = 1和 IPEAK = 7)。 在 Rx 中、使用 DCDCCTL5[3:0]=0xC (DITHER _EN=1和 IPEAK_=4)。
(uint32_t) 0xFFFC08C3、
// Tx:将 PA 修整设置为最大值以最大化其输出功率(在 ADI0中、设置 PACTL0=0xf8)
ADI_REG_OVERRIDE (0、12、0xF8)、
(uint32_t) 0xFFFFFFFF
};


// CMD_PROP_RADIO_DIV_SETUP
//针对所有频带的专有模式无线电设置命令
RFC_CMD_PROP_RADIO_DIV_SETUP_t RF_PropcmdletRadioDivSetup =
{
.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 = 0x14、
.modulation.deviationStepSz = 0x0、
symbolRate.prescale = 0xF、
symbolRate.rateWord = 0x3333、
.symbolRate.decimMode = 0x0、
.rxBw = 0x4C、
.PreambBytes = 0x2、
.Conf.前置 放大器模式= 0x0、
.formatConf.nSwBits = 0x20、
.formatConf.bBitVersal = 0x0、
.formatConf.bMsbFirst = 0x0、
formatConf.fecMode = 0x8、
formatConf.whitenMode = 0x1、
.config.frontEndMode = 0x0、
config.biasMode = 0x1、
config.analogCfgMode = 0x0、
config.bNoFsPowerUp = 0x0、
TxPower = 0x9F3F、
.pRegOverride = pOverrides、
.centerFreq = 0x0399、
.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 = 0x0399、
fractFreq = 0x0000、
synthConf.bTxMode = 0x0、
.synthConf.refFreq = 0x0、
.__dummy0 = 0x00、
.__dummy1 = 0x00、
.__dummy2=0x00,
.__dummy3 = 0x0000
};


// 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
};


// 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 = 0x1E、
syncdWord = 0x930B51DE、
.pPKT = 0 //插入适用的指针:(UINT8_t*)&xxx
};

然后、我使用以下函数在程序中动态更改频率。

-EasyLink_setFrequency (921000000); //设置频率(921Mhz)

-EasyLink_setFrequency (922000000); //设置频率(922Mhz)

-EasyLink_setFrequency (923000000); //设置频率(923Mhz)

 

1.我在 SmartRF Studio (settings、c files)中的设置是否有问题?

2.只需调用 EasyLink_setFrequency、使用3个频率是否有任何问题?  这是正确的使用方式吗?

是否有用于对射频内核进行去初始化的函数? (我想使用  EasyLink_deinit()/ EasyLink_Close 等功能)

谢谢

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

    关于设置、我不能直接说它是否有任何不良或好的地方。 我建议您按原样简单使用 SmartRF 生成的设置。

    对于更改频率、这种方法是可以的、因为您不会执行这么大的步长。

    我不确定您在这里关注的是什么、您能否详细说明您为什么要"取消初始化"射频内核?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定您在这里关注的是什么、您能否详细说明您为什么要"取消初始化"射频内核?
    =>我考虑了另一种改变频率的方法、
    (1. RF DEINIT => 2. 更改频率设置=> 3.RF 初始化)

    ​​在​​​​基本示例(集中器、节点示例)提供的射频设置值中、SmartRF Studio 的设置值与 EasyLink_PHY_5kbpsSlLr (5kpbs)的设置值相同。
    (唯一的区别是频率值:868->921、922.923)

    但是、集中器和节点之间的通信有时会失败。
    (看起来集中器不接收)

    示例中提供的5kbps 设置值是否存在通信故障问题?

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

    您不需要"重新初始化"即可执行这些频率更改、使用 EasyLink API 就足够了。
    对于通信故障、单个节点还是仅在使用多个节点时也是如此?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果我将其设置为5kbps、868MHz 和921Mhz 都将出现通信问题。

    恢复到基本示例的射频设置值后、即使通过[EasyLink_params.ui32ModType = EasyLink_Phy_5kbpsSllr;]设置5kbsp、也会出现通信问题。

    默认示例中的[RF_cmdPropRxAdv_predef]设置是否默认设置为50kbps、这会导致问题?

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

    RxAdv 设置不包含符号速率信息、这是"RF_cmdPropRadioDivSetup_SL_LR"命令的一部分。

    当您看到问题时、您连接到器件的节点有多少个?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    目前、两个节点使用计时器定期传输数据。
    从 UART 日志中、我注意到我无法接收数据包或 rxDoneCallback 的状态值为6 (EasyLink_Status_Rx_Error)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kim:

    我建议您将两个节点上的 PA 使能信号路由出去、并将这两个节点示波在一起、以查看是否发生了时间冲突:

    dev.ti.com/.../

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "PA 使能信号"是什么意思?
    您能详细说明吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Kim:

    请参阅以下章节、了解如何将门铃信号路由到 GPIO:

    dev.ti.com/.../signal-routing.html

    您感兴趣的信号是 RFC_GPO1 (CPE_GPO1)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我进行了以下设置、但射频通信仍然失败。


    uint32_t pOverrides[]=


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

    添加该覆盖不会产生任何影响、它与射频内核信号的路由相关。

    您应该查看"将门铃信号路由到 GPIO 引脚"一章、了解如何将 RFC_GPO1 (CPE_GPO1)绑定到 GPIO、以便可以对其进行范围控制。 然后、您可以使用此 GPIO 检查两个节点是否同时发送。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我解决了通信问题。

    在 SmartRF Studio 中进行测试时、我更改了[CAP-ARRAY-Tuning]值并确认通信正常。

    即使在修改了项目中的[cap 阵列调整]值后,我也确认射频通信良好。

    此主题现在将终止。