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.

[参考译文] CC2650:能够#39;t 在 IEEE 802.15.4模式下运行

Guru**** 2609895 points
Other Parts Discussed in Thread: CC2650, TIMAC

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/883587/cc2650-can-t-operate-in-ieee-802-15-4-mode

器件型号:CC2650
主题中讨论的其他器件: TIMAC

我有一个在 CC2650 MCU 上构建的定制板、并已将其中的两个板分别设置为发送器和接收器。 我已经成功地使用 IEEE 802.15.4通过 SmartRF Studio 在它们之间建立了通信。 但当我尝试从应用软件执行相同的操作时、代码卡在 RF_runCmd (rfHandle、(RF_OP*)&RF_cmdIeeeTx、RF_PriorityNormal、NULL、0)上。  它被写入射频驱动器头文件中、它不支持      IEEE 802.15.4 模式所需的 IRQ_FG 和 IRQ_BG。

下面 分别是 SmartRF_settings.c 和 rf_patch_cpe_ieee.h

smartrf_settings.c

//
//由 SmartRF Studio 版本2.12.0 (内部版本#147)生成
//应用的模板与 tirtos_simplelink_2_21_00兼容
//器件:CC2650修订版 C (2.2)
//
//*********


//
//参数摘要
// IEEE 通道:11
//频率:2405MHz
// SFD:0
//数据包数据:255
//前导码 (32位):01010101...
// TX 功率:5dBm

#include 
#include 
#include 
#include 
#include 
#include "smartrf_settings.h"


// TI-RTOS 射频模式对象
rf_Mode rf_prop =
{
rfMode = RF_MODE_IEEE_15_4、
.cpePatchFxn =&rf_patch_cpe_IEEE、
.mcePatchFxn = 0、
.rfePatchFxn = 0
};


//覆盖 CMD_RADIO_SETUP
UINT32_t 覆盖[]=
{
// override_synth_ieee_15_4.xml
//合成:将建议的 RTRIM 设置为5
HW_REG_OVERRIDE (0x4038、0x0035)、
//合成:将频率设置为3.43MHz
(uint32_t) 0x000784A3、
//合成:将锁定后的环路带宽设置为80kHz
(uint32_t) 0xA47E0583、
//合成:将锁定后的环路带宽设置为80kHz
(uint32_t) 0xAE00603、
//合成:将锁定后的环路带宽设置为80kHz
(uint32_t) 0x00010623、
//合成:配置 PLL 偏置
HW32_array_override (0x405C、1)、
//合成:配置 PLL 偏置
(uint32_t) 0x1801F800、
//合成:配置 PLL 延迟
HW32_array_override (0x402C、1)、
//合成:配置 PLL 延迟
(uint32_t) 0x00608402、
//合成:使用24MHz XOSC 作为同步时钟、启用额外的 PLL 滤波
(uint32_t) 0x02010403、
//合成:配置额外的 PLL 滤波
HW32_array_override (0x4034、1)、
//合成:配置额外的 PLL 滤波
(uint32_t) 0x177F0408、
//合成:配置额外的 PLL 滤波
(uint32_t) 0x38000463、
// override_phy_ieee_15_4.xml
//合成:增加合成编程超时
(uint32_t) 0x05000243、
// Rx:调整 Rx FIFO 阈值以避免溢出
(uint32_t) 0x002082C3、
// override_frontend_xd.xml
// Rx:设置 RSSI 偏移以将报告的 RSSI 调整-3dB
(uint32_t) 0x000388A3、
// Rx:配置 LNA 偏置电流修整偏移
(uint32_t) 0x000F8883、
// Rx:调整 AGC DC 滤波器
HW_REG_OVERRIDE (0x50DC、0x002B)、
(uint32_t) 0xFFFFFFFF
};


// CMD_RADIO_SETUP
//预定义方案的无线电设置命令
RFC_CMD_RADIO_SETUP_t RF_RadiocmdSetup =
{
.commandNo = 0x0802、
.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、
.mode = 0x01、
.__dummy0 = 0x00、
.config.frontEndMode = 0x0、
config.biasMode = 0x1、
config.analogCfgMode = 0x0、
config.bNoFsPowerUp = 0x0、
TxPower = 0x9330、
.pRegOverride = pOverrides
};


// 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 = 0x0965、
fractFreq = 0x0000、
synthConf.bTxMode = 0x1、
.synthConf.refFreq = 0x0、
.__dummy0 = 0x00、
.__dummy1 = 0x00、
.__dummy2=0x00,
.__dummy3=0x0000
};


// CMD_IEEE_TX
//命令 ID 号0x2C1
RFC_CMD_IEEE_TX_t RF_cmdieeTx =
{
.commandNo = 0x20001、
.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、
txOpt.bIncludePhyHdr = 0x0、
txOpt.bIncludeCrc = 0x0、
TxOpt.payloadLenMSb = 0x0、
.payloadLen = 0x1E、
.pPayload = 0、//插入适用的指针:(uint8_t*)&xxx
时间戳= 0x00000000
};


// CMD_IEEE_RX
//命令 ID 号0x2801
RFC_CMD_IEEE_RX_t RF_cmdieeRx =
{
.commandNo = 0x2801、
.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、
.channel = 0x00、
rxConfig.bAutoFlushCrc = 0x0、
rxConfig.bAutoFlushIgn = 0x0、
rxConfig.bIncludePhyHdr = 0x0、
rxConfig.bIncludeCrc = 0x0、
rxConfig.bAppendRssi = 0x1、
rxConfig.bAppendCORCrc = 0x1、
rxConfig.bAppendSrcInd = 0x0、
rxConfig.bAppendTimestamp = 0x0、
.pRxQ = 0、//插入适用的指针:(dataQueue_t*)&xxx
.pOutput = 0、//插入适用的指针:(uint8_t*)&xxx
.frameFiltOpt.frameFiltEn = 0x0、
.frameFiltOpt.frameFiltStop = 0x0、
.frameFiltOpt.autoAckEn = 0x0、
.frameFiltOpt.slotedAckEn = 0x0、
.frameFiltOpt.autoPendEn = 0x0、
.frameFiltOpt.defaultPend = 0x0、
.frameFiltOpt.bPendDataReqOnly = 0x0、
.frameFiltOpt.bPanCoord = 0x0、
.frameFiltOpt.maxFrameVersion = 0x3、
.frameFiltOpt.fcfReservedMask = 0x0、
.frameFiltOpt.modifyFtFilter = 0x0、
.frameFiltOpt.bStrictLenFilter = 0x0、
.frametypes.bAcceptFt0Beacon = 0x1、
.frametypes.bAcceptFt1数据= 0x1、
.frametypes.bAccint2Ack = 0x1、
.frametypes.bAcceptFt3MacCmd = 0x1、
.frametypes.bAccint4保留= 0x1、
.frametypes.bAcceptFt5保留= 0x1、
.frametypes.bAcceptFt6保留= 0x1、
.frametypes.bAccint7保留= 0x1、
ccaOpt.ccaEnEnergy = 0x0、
ccaOpt.ccaEnCorr = 0x0、
ccaOpt.ccaEnSync = 0x0、
ccaOpt.ccaCorrOp = 0x1、
ccaOpt.ccaSyncOp = 0x1、
ccaOpt.ccaCorrThr = 0x0、
ccaRssiThr = 0x64、
.__dummy0 = 0x00、
.numExtEntry = 0x00、
.numShortEndries = 0x00、
.pExtEntryList = 0、//插入适用的指针:(uint32_t*)&xxx
.pShortEntryList = 0、//插入适用的指针:(uint32_t*)&xxx
.localExtAddr = 0x000012345678、
.localShortAddr = 0xABBA、
.localPanID = 0x0000、
.__dummy1 = 0x000000,
endTrigger.triggerType = 0x1、
.endTrigger.bEnaCmd = 0x0、
.endTrigger.triggerNo = 0x0、
.endTrigger.PastTrig = 0x0、
.EndTime = 0x00000000
}; 

rf_patch_cpe_ieee.h
 
/*********
*文件名: rf_patch_cpe_ieee.h
*已修订: $Date:2017-08-24 11:43:33 +0200 (Thu、2017年8月24日)$
*修订版: $修订版:17889 $
*
说明:CC26xx IEEE 802.15.4 PHY 的射频内核补丁文件
*
版权所有(c) 2015、德州仪器(TI)公司
*保留所有权利。
*
*
只要符合以下条件、就允许以源代码和二进制形式重新分发和使用(无论是否进行*修改):
*
* 1)源代码的重新分发必须保留上述版权声明
、* 此条件列表和以下免责声明。
*
* 2)二进制形式的再发行必须复制上述版权声明
* 本条件列表和文档中的以下免责声明
* 和/或随分发提供的其他材料。
*
* 3)本组织的名称及其捐助者的名称均不得
* 用于认可或推广从本软件衍生的产品、但不
含* 特定的事先书面许可。
*
本软件由版权所有者和贡献者"按原样"提供
*、

不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权持有人或贡献者
都不对任何直接、间接、偶然、特殊、模范、 或
*相应的损害(包括但不限于采购
*替代产品或服务;丧失使用、数据或利润; 或业务
*中断)、但出于

任何责任理论、无论是在*合同中、严格责任还是在使用本软件时以任何方式产生的侵权行为(包括疏忽或其他原因)*、即使已告知
*可能会发生此类损坏。
*
* /

#ifndef _rf_patch_cpe_IEEE_H
#define _rf_patch_cpe_IEEE_H

//*********
//
//如果使用 C++编译
器进行编译,请使此头文件中的所有定义//具有 C 绑定。
////
*****************
#ifdef __cplusplus
extern "C"
{
#endif

#include 
#include 

#ifndef cpe_patch_type
#define cpe_patch_type static const uint32_t
#endif

#ifndef SYS_patch_type
#define SYS_patch_type static const uint32_t
#endif #ifndef patch_fe_spec


#define patche_spec static inline #ifnf_patche_type 0x2000419[_cap







、0x10002119_cap、_cap = 0x210001b_cap、0x2cap = 0x2cot_cap、0x2cot_cap、0x2t_cap = 0x2cap、0x20001_cot_cot_cot_cap = 0x





0x22024823、
0x421a7dc3、
0xd0034472、
0x1dc04678、
b5f84686、
0x4c1f4710、
0x200834ae、
0x490347a0、
0x60082008、
0x3cec6008、
bbdf847a0、
0x40045004、
0x4c17b5f0、
0x18612140、
0x280278c8、
0x4809d005、
0x60012100、
0x47884908、
0x6e25bdf0、
0x60354e07、
0x43280760、
0x68276620、
0x480e6024、
0x60274780、
dbbf06035、
0x4004112c、
0x000065a5、
0x40044028、
0x4c07b510、
0x29007da1、
0x2101d105、
0x024875a1、
0x393e4904、
0x68204788、
0xd0002800、
0xbd104780、
0x21000254、
0x0000398b、
0x6a034807、
0x46784907、
0x46861dc0、
0x4788b5f8、
0x009b089b、
0x6a014802、
0xd10007c9、
bdf86203、
0x40045040、
0x0000f1ab、
0x6a00480b、
0xd00407c0、
0x2201480a、
0x43117801、
0x48097001、
0x72c84700、
0xd006280d、
0x00802285、
0x18800252、
0x60486840、
0x48044770、
0x0000e7fb、
0x40045040、
0x21000268、
0x0000ff39、
0x210004d9、
0x4e1ab5f8、
0x6b314605、
0x09cc4819、
0x2d0001e4、
0x4918d011、
0x29027809、
0x7b00d00f、
0xb6724304、
0x4f152001、
0x47b80240、
0x38204811、
0x09c18800、
0xd00407c9、
0x7ac0e016、
0x7b40e7f0、
0x490fe7ee、
0x61cc6334、
0x07c00a40、
0x2001d00c、
0x6af10380、
0xd0012d00、
0xe0004301、
0x46084381、
0x490762F1、
0x63483940、
0x47b82000、
bbdf8b662、
0x21000280、
0x21000088、
0x21000296、
0x00003cdf、
0x40044040、
0x28004907、
0x2004d000、
0xb6724a06、
0x07c97809、
0x5810d001、
0x2080e000、
0xb240b662、
0x00004770、
0x2100026b、
0x40046058、
};
#define _NWORD_PATCHIMAGE_IEEE 111

#define _NWORD_PATCHSYS_IEEE 0

#define _IRQ_PATCH_0 0x21000449
#define _IRQ_PATCH_1 0x21000489


#ifndef _SYSRAM_START
0x20000000 #define _INTRIE_INTRIE_IN_INTRIE_EED_INTRIE_IN_EED_COGE_ERSION_ERSIE








#define


0x0340 #IE_INTRIE_INTRIE_INEST_INTRIE_INTRIE_INTRIE_INTRIE_INTRIE_E_IN_INTRIE_INTRIE_ERSIF_ERSIF_ERSIF_ERSIF_ERSIF_ERSIF_ERSIF_IN_ERSIF_ERSIF_IN_INTRIE_INTRIE_ERSIF_ERSIF_ERSIF_ERSIF_IN_IN_INTRIE_INTRIE_IN_INTRIES #def



(_IEEE_CPERAM_START +_IEEE_PATCH_VEC_OFFSET);

#if (_NWORD_PATCHIMAGE_IEEE > 0)
memcpy (pPatchVec、patchImageIee、sizeof (patcheee));
#endif
}

patch_f趣味_spec void enterIeRT=32












(p补 码= t_petch_t_petch_spec);petr_pace+ pcc_pet_pet_pet_petr_petr_ch = t_petr_petr_ch (pet_pot_pet_pet_pet_petch_petr_pet_ch = t_petch_ch_petr_ch_p_pet_petr_p_ch_ped_p_ch)= pet_petr_ap_petr_pet_ch_pet_pet_pet_p_pet_petr_ap_ap_u_pet_p_
pPatchTab[38]= 4;

pIrqPatch[1]=_IRQ_PATCH_0;
pIrqPatch[9]=_IRQ_PATCH_1;
}

PATCH_FUNCH_spec void IeePatch (void)
{
enterIeeeSysPatch ();
eIEECpePatch ();applureIeCCESD_



void (void)






;#eIRQ_EST_ESPIERQ_ESD_ void (void







//
////将 C++编译器的 C 绑定部分标记为结尾。
////
*****************
#ifdef __cplusplus
}
#endif

#endif //_rf_patch_cpe_IEEE_H

如何克服这个问题? 我完全卡住了。

谢谢

Rahul Gusai

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

    您好、Rahul、

    我建议您评估使用 CC26x0为 IEEE 802.15.4操作而开发的 TIMAC 软件。

    此致、
    Ryan