本示例以及 RF Studio 为我提供了两组设置。
以下操作完全正常:
// //由 SmartRF Studio 版本2.11.0 (内部版本号122)生成 //针对 SimpleLink SDK 版本进行了测试:CC13x0 SDK 2.20.xx.xx //器件:CC1310修订版本2.1 // ********* // //参数摘要 //地址:0 //地址0:0xAA //地址1:0xBB //频率:868.00000 MHz //数据格式:串行模式禁用 //偏差:25.000 kHz // pktLen:30 // 802.15.4g 模式:0 //选择传输 PSDU 八位位组的位顺序:1 //数据包长度: 可变 //最大数据包长度:255 //数据包长度:30 //数据包数据:255 // RX 滤波器带宽:98kHz //符号速率:50.0000 kBaud //同步字长度:32位 // TX 功率:14dBm (需要在 ccfg.c 中定义 CCFG_FORCE_VDDR_HH = 1,请参阅 CC13xx/CC26xx 技术参考手册 /白皮书) 无白化 #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_genfs.h) #include DeviceFamily_constructPath (rf_patches/rf_patch_rfe_genfs.h) #include "smartrf_settings.h" // TI-RTOS RF 模式对象 rf_mode_rf_prop = {.rff_patch_rf_rfe_rfe_prefs.h}#include "smartrf_rf_rf_regulations.h 和 rf_rf_peds_rf_rf_rf_rf_rf_rf_pet_rf_rf_rf_rf_rf_patchn_rf_ //覆盖 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)、 // override_synth_prop_863_930_div5.xml // Synth:将建议的 RRIM 设置为7 HW_REG_OVERRIDE (0、0、0、0、0、 0、0、0、0、0、0、0、0 、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0 配置精细校准设置 HW_REG_OVERRIDE (0x4064、0x0040)、 //合成:配置精细校准设置 (uint32_t) 0xB1070503、 //合成:配置精细校准设置 (uint32_t) 0x05330523、 //合成:将锁定后的环路带宽设置为20kHz (uint32_t)、0x80583 、设置为 uint/ 合成:0x480kHz 配置 VCO LDO (在 ADI1中、将 VCOLDOCFG=0x9F 设置为使用电压输入基准) ADI_REG_OVERRIDE (1、4、0x9F)、 //合成:配置合成 LDO (在 ADI1中、设置 SLDOCTL0.COMP_CAP=1) ADI_HALFREG_OVERRIDE (1、7、0x4、0x4、0x4)、 //合成:使用 合成 LDO (0x32) 0、INTRF_INTPL (0x40、0x403D_INTRIPH) 增加同步编程超时(0x04B0 RAT 节拍= 300us) (uint32_t) 0x04B00243、 // override_phy_rx_aaf_bw_0xd.xml // Rx:将抗混叠滤波器带宽设置为0xD (在 ADI0中、将 IFAMPCTL3[7:4]=0xD) ADI_HALFREG_TRIM (0、0x61、0xF、0x38D/Rx override_phy_gfsk_rx.xml )偏移:0x38t/ Rx (7:0x38t/ Rx 3、偏移:/Rx) 在找到 SYNC 事件 HW_REG_OVERRIDE (0x6084、0x35F1)上冻结 RSSI、 // 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 +5 dB (默认值:0)、针对外部偏置和差动配置( uint32_t)进行修整0x00FB88A3、 #DDR_FORCE (默认值:0)、针对外部偏置:tx5ddr_txFG/强制)/txf 将 PA 调整设置为最大值(在 ADI0中、设置 PACTL0=0xf8) ADI_REG_OVERRIDE (0、12、0xF8)、 #endif (uint32_t) 0xstartFFFF、 }; // CMD_PROP_RADIO_DIV_SETUP RF_DIV_SETUP_t RF_TRF_0 = 0xstart0* 、0x0000_0 = 0xtrigger_0 = 0xtrigger.trigger = 0xtrigger0=0x0000.0*、0xtrigger.trigger0=0x0000.0=0x0000.0=0xtrigger0=0x0000.0=.0=.0=.0=.0=.0=.000=0xtrigger0=.0=.0=.000_#.000_#.000=0xtrigger0=.000=.000=.000=. .condition.rule = 0x1、 .condition.nSkip = 0x0、 .modulate.modType = 0x1、 .modulation.deviation = 0x64、 .symbolRate.prescale = 0xF、 symbolRate.rate.rateWord = 0x8000、 .symbolRate.decimMode = 0x0、 .rxBw = 0x24、 .PreambBytes = 0x4、.PreambConf.PreambMode = 0x0、 .formatConf.nSwBits = 0x20、 .formatConf.bBitVersal = 0x0、 .formatConf.bMsbFirst = 0x1、 .formatConf.fecMode = 0x0、 .formatConf.whitenMode = 0x0、 .config.frontEndMode = 0x0、 .config.biasMode = 0x1、 .config.analogCfgMode = 0x0、 .config.bNoFsPowerUp = 0x0、 .txPower = 0xA73F、 .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 .triggerStartTime = 0x00000000、 .startTrigger.TrierType = 0x0、 .startTrigger.bEntrigg器= 0x0、.startTrigger = 0x0、.start0、.startTrigg.startTrigger.b.trigg器= 0x0 、.trigg.trigg.trigg器= .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、 .startpsertriggerType = 0xstartTrigger = 0x0 、.startTrigger.trigger = 0x0、.trigger.trigger = 0xb0.trigg.trigg.0.trigger.trigg器= 0x0 .condition.rule = 0x1、 .condition.nSkip = 0x0、 .pktConf.bFsOff = 0x0、 .pktConf.bUseCrc = 0x1、 .pktConf.bVarLen = 0x1、 .pktLen = 0x1E、//设置应用程序有效载荷长度 .syncWord = 0x930B51DE、 .pPKT = 0、//插入适用的 指针:(uint8_t*)&xxx};// CMD_PROP_RX RFC_CMD_PROP_RX_t RF_cmdPropRx ={.NOT_0000 = 0x3802、//插入适用的状态= 0x3802、.NOP = 0x0000 (uint8_t*)&xxx .StartTime = 0x00000000、 .startTrigger.triggerType = 0x0、 .startTrigger.bEnaCmd = 0x0、 .startTrigger.starter No = 0x0、.trigger.pastrigger = 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、 .endtriggerType = 0xendtrigger = 0x0、.endtrigger = 0xb0.ender0、.endtrigger = 0xb.ender0、.endtrigger = 0xb0.end.enderType = 0xb0.trigger = 0xb0.end. .endTrigger.PastTrig = 0x0、 .EndTime = 0x00000000、 .pQueue = 0、//插入适用的指针:(dataQueue_t*)&xxx .pOutput = 0、//插入适用的指针:(uint8_t*)&xxx };
但是、切换到我在 Smart RF Studio 中生成的另一个文件会导致错误 TX 下溢(PROP_ERROR_TXUNF):
// //由 SmartRF Studio 版本2.11.0 (内部版本号126)生成 //应用的模板与 CC13x0 SDK 2.20.xx.xx 兼容 //器件:CC1310修订版2.1 (修订版 B) // ********* // //参数摘要 //地址:0 //地址0:0xAA //地址1:0xBB //频率:868.00000 MHz //数据格式:串行模式禁用 //偏差:5.000 kHz // pktLen:30 // 802.15.4g 模式:0 //选择发送 PSDU 八位位组的位顺序:1 //数据包长度: 可变 //最大数据包长度:255 //数据包长度:20 //数据包数据:255 // RX 滤波器带宽:155kHz //符号速率:60.00061kBaud //同步字长度: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_sl_longrange.h) #include DeviceFamily_constructPath (rf_patches/rf_patch_rfe_sl_longrange.h) #include DeviceFamily_constructPath (rf_patches/rf_mc补丁_mce_sl_grange.h)#include "rf_rf_rf_rtmos" = rf_lon_mode.h)#include "rf_mode.rf_rf_rf_rf_mode. rfMode = RF_MODE_Proprietary"子模式1、 .cpePatchFxn =&rf_patch_cpe_sl_longrange、 .mcePatchFxn =&rf_patch_mce_sl_longrange、 .rfePatchFxn =&rf_patch_rfe_sl_longrange 、}; //覆盖 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)、 // override_synth_prop_863_930_div5_lbw60k.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、 //合成:将锁定后的环路带宽设置为60kHz (uint32_t) 0x40410583、 //合成:将锁定后的环路带宽设置为60kHz (uint32_t) 0x32CC0603、 //合成:将锁定后的环路带宽设置为60kHz (uint32_t) 0x00010623、 //合成:配置 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_synth_disable_bias_div5.xml //合成:将分频器偏置设置为禁用 HW32_array_override (0x405C、1)、 //合成:将分频器偏置设置为禁用(特定于 loder=5) (uint32_t) 0x18000200、 // 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_0x14.xml // Tx:配置 PA 斜升设置(0x41)。 RX:将 AGC 基准电平设置为0x14。 HW_REG_OVERRIDE (0x6088、0x4114)、 // Tx:配置 PA 斜升设置 HW_REG_OVERRIDE (0x608C、0x8213)、 // override_phy_long_range_dsss2.xml // PHY:配置 DSSS SF=2 HW_REG_OVERRIDE (0x505C、0x0100)、 // override_phy_rx_rssi_offset_5db.xml // Rx:设置 RSSI 偏移以将报告的 RSSI 调整+5dB (默认值:0)、针对外部偏置和差分配置进行了修整 (uint32_t) 0x00FB88A3、 // TX 功率覆盖 // 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、 symbolRate.prescale = 0xF、 symbolRate.rateWord = 0x999A、 .symbolRate.decimMode = 0x0、 .rxBw = 0x26、 .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 = 0xA73F、 .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、 syncWord = 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、 syncWord = 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 };
此外、我可以看到、通过使用 SmartRF Studio 程序、两者都可以成功地相互发送数据包。 当我的其中一个设备作为接收器时、我没有收到任何内容、当我将其中一个设备用作发送器时、我会在另一侧收到长度为 FF 的数据包和垃圾数据包(在更改之前、多个字节的数据包是相同的)。
我还注意到、在将修补指令更改为的第二组设置中
MCE_RFE_OVERRIDE (0、1、0、1、0、0)、而不是
MCE_RFE_OVERRIDE (1、0、0、1、0、0)、
删除了 TX_Underflow 错误、但仍然无法修复发送或接收的数据包。
我基于这些示例的示例是 rfWakeOnRadioRx 和 rfWakeOnRadioTx
我使用的是 NoRTOS 版本