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.

[参考译文] CC2630:在新 MCU 上运行 TIMAC 堆栈时出现问题

Guru**** 1828310 points
Other Parts Discussed in Thread: CC2630, TIMAC, SMARTRFTM-STUDIO, Z-STACK, CC2650, CC2650EM-4XD-RD
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/948093/cc2630-issue-running-timac-stack-on-a-new-mcu

器件型号:CC2630
主题中讨论的其他器件: TIMACSMARTRFTM-StudioZ-STACKCC2650CC2650EM-4xD-RDSIMPLELINK-2-4GHz-设计审查

将我的代码从基于 CC2630_7x7 (RGZ)的板移至基于 CC2630_4x4 (RSM)的板、我看到的问题与此帖子中的问题完全相同:

在应用程序中、当使用"单步执行"命令单步执行调试器中的代码时、我会获得以下调用堆栈、直到调试器跟踪其执行的内容:

iCall_createRemoteTasks()-> Task_restore()

切换到 TIMAC 堆栈项目、我得到以下调用堆栈:

stack_main ()-> macLowLevelInit()-> macMcuInit()-> MB_SendCommand ()-> halAssertHandler ()

下一个调用栈,我可以看到 macMcuInit()正在执行以下代码:  mb_SendCommand( build_direct_cmd( cmd_start_RAT );
在 MB_SendCommand()执行此行时:  

MB_ASSERT (((MB_CMDSTA_REG 和0xFF)== CMDSA_DONE ||(MB_CMDSA_REG 和0xFF)== CMDSA_SCH_ERR);

我应该如何解决此问题?

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

    是否在编译选项中将 MODULE_CC26XX_7X7 define 更改为 MODULE_CC26XX_4x4?

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

    我将 MODULE_CC26XX_7x7更改为 MODULE_CC26XX_4X4D ("D"用于差分前端设置、以匹配我的定制板上的设置)。

    我还尝试定义 MODULE_CC26XX_4x4符号(不带"D")、结果完全相同。

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

    我的芯片似乎是 HW 版本 D (2.3)、但我正在使用的驱动程序库在我正在使用的 SDK (TIRTOS Simplelink 2.11)中针对修订版2.2构建。

    这是问题吗?  我应该怎么做?

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

    我打断了线路

    MB_ASSERT (((MB_CMDSTA_REG 和0xFF)== CMDSA_DONE ||(MB_CMDSA_REG 和0xFF)== CMDSA_SCH_ERR);

    分为两行:

    MB_ASSERT ((MB_CMDSTA_REG & 0xFF)== CMDSA_SCH_ERR);
    mb_assert ((MB_CMDSA_REG 和0xFF)== CMDSA_DONE);

    我看到的错误是 MB_CMDSA_REG 包含 CMDSA_SCH_ERR = 0x86 =调度错误

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

    您好、Michael、

    MODULE_CC26XX_4x4定义应确保使用正确的 Board.h 文件。  您是否已使用 SMARTRFTM-Studio 确认此设备的无线电操作?  您之前是否有与 CC2630 RGZ 器件一起运行的同一项目?  TI-RTOS 版本显示正确(2.11)、请确保您也使用 IAR EWARM 7.40。

    此致、
    Ryan

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

    您好、Ryan、

    我的同事能够通过 SmartRF Studio 确认无线电操作。

    我今天稍后将尝试 IAR 7.40、尽管我看不到这会有什么不同。  我目前正在运行 IAR 7.80.4。

    该代码在7x7 CC2630 RGZ MCU 上运行正常、但在4x4 CC2630上不运行。  除了尺寸之外、我可以看到的两个 MCU 之间的唯一区别是7x7 MCU 是修订版 C (2.2)、而4x4 MCU 是修订版 D (2.3)。  这会产生什么影响吗?

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

    再次运行代码几次、我开始看到不同的故障路径。 例如,当  主应用程序中的 iCall_createRemoteTasks()-> Task_restore()执行暂停时,TIMAC 堆栈似乎停留在以下调用链中:

    stack_main ()-> macLowLevelInit()-> macSetupRfHal ()-> halAssertHandler ()

    其中 macSetupRfHal()在以下代码处停止:

    /*为每个所需函数获取 RAT 通道*/
    if ((macRatChanA = RFHAL_AllocRatchan())== RAT_CHAN_INVALID)
    {
    HAL_assert( false );//<--这是错误被捕获且堆栈停止
    的位置}
    

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

    封装构建之间的差异包含在 ti/boards/SRF06EB/CC2650EM_[7ID/4XS]/板.[h/c]文件中、这些文件应仅涉及 IO 驱动程序初始化。  我不知道为什么您会遇到射频初始化问题、除非电路板硬件出现故障。  MCU 版本无关紧要。  您是否能够使用此设置操作 Z-Stack 或专有射频固件?

    此致、
    Ryan  

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

    我的同事能够通过 SmartRF Studio 确认硬件是否正常工作。  我无法测试 Z-Stack 或专有射频固件。  我当前的问题是、我们在固件中与其他器件(我们一直使用 CC2630 7x7芯片和 CC2650芯片)使用多年的器件调整设置在某种程度上不适用于 CC2630 4x4芯片。  我指的是 ccfg.c 文件中的设置:

    //*********
    //用于备用 DCDC 设置的最小电压
    //
    (28 + ALT_DCDC_Vmin)/16:
    // 0:1.75V
    // 1:1.8125V
    //...
    // 14:2.625V
    // 15:2.6875V
    //
    #define SET_CCFG_MODE_CONF_1_ALT_DCDC_Vmin 0x8
    
    //*********
    //启用直流/直流抖动以实现备用直流/直流设置
    //********
    #define SET_CCFG_MODE_CONF_1_ALT_DCDC_DITHER _EN 0x0 //禁用
    //#define SET_CCFG_MODE_CONF_1_ALT_DCDC_DITHER _EN 0x1. //启用
    
    //*********
    //备用 DCDC 设置对应的电感器峰值电流
    // 0:最小31mA
    // 4:典型值47mA
    // 7:最大59mA
    //*********
    #define SET_CCFG_MODE_CONF_1_ALT_DCDC_IPEAK 0x2
    
    //*********
    // IBIAS_init 的有符号增量值
    //********
    #define SET_CCFG_MODE_CONF_1_DELTA IBIAS_INIT 0x0
    
    //*********
    // IBIAS_OFFSET 的有符号增量值
    //********
    #define SET_CCFG_MODE_CONF_1_DEAL_BIAS_OFFSET 0x0
    
    //*********
    //最大 XOSC 启动时间的无符号值,以100us 为单位
    //*********
    #define SET_CCFG_MODE_CONF_1_XOSC_MAX_START 0x10
    
    //*********
    //备用 DCDC 设置的禁用标志
    //********
    #define SET_CCFG_SIZE 和 DIS_FLAGS_DIS_ALT_DCDC_Setting 0x0 //启用备用 DCDC 设置
    //#define SET_CCFG_SIZE 和 DIS_FLAGS_DIS_ALT_DCDC_Setting 0x1 //禁用备用 DCDC 设置
    
    //********
    // XOSC 覆盖功能的禁用标志
    //********
    //#define SET_CCFG_SIZE 和 DIS_FLAGS_DIS_XOSC_OVR 0x0 //启用覆盖
    #define SET_CCFG_SIZE 和_DIS_FLAGS_DIS_XOSC_OVR 0x1. //禁用覆盖
    
    //********
    //在充电过程中选择 DC/DC
    //********
    #define SET_CCFG_MODE_CONF_DCDC_REGLEE 0x0 //在重新充电期间在断电
    中使用 DC/DC //#define SET_CCFG_MODE_CONF_DCDC_REGLEE 0x1. //在断电期间不要使用 DC/DC
    
    //********
    //在激活模式下选择 DC/DC
    //********
    #define SET_CCFG_MODE_CONF_DCDC_ACTIVE 0x0 //在激活模式期间使用 DC/DC
    //#define SET_CCFG_MODE_CONF_DCDC_ACTIVE 0x1. //在激活模式下不要使用 DC/DC
    
    //********
    // VDDR 外部负载
    //********
    //#define SET_CCFG_MODE_CONF_VDDR_EXT_LOAD 0x0 // VDDR 可以从外部加载(可能不受支持)
    #define SET_CCFG_MODE_CONF_VDDR_EXT_LOAD 0x1. // VDDR 未从外部加载
    
    //********
    // VDDS BOD 电平
    //
    //注意,用于
    // 125°C 操作的生产设备在
    电子保险丝中将具有2.0V 的 VDDS_BOD 电平,这意味
    着// CCFG 中的 VDDS_BOD_LEVEL 在
    这些设备上没有//功能。
    //*********
    //#define SET_CCFG_MODE_CONF_VDDS_BOD_LEVEL 0x0 // VDDS BOD 电平为2.0V (对于125°C、外部负载模式或 CC13xx 上的最大 PA 输出功率是必需的)
    #define SET_CCFG_MODE_CONF_VDDS_BOD_LEVEL 0x1. // VDDS BOD 电平为1.8V (对于外部稳压器模式为1.65V)
    
    //********
    // SCLK LF 选项
    //********
    //#define SET_CCFG_MODE_CONF_SCLK_LF_OPTION 0x0 //源自高频 XOSC 的低频时钟
    //#define SET_CCFG_MODE_CONF_SCLK_LF_OPTION 0x1. //待定:来自 AON 的数字输入(选择 XOSC_LF 作为源和 XOSC_LF_DIG_BYPASS=1)
    #define SET_CCFG_MODE_CONF_SCLK_LF_OPTION 0x2. //低频 XOSC
    //#define SET_CCFG_MODE_CONF_SCLK_LF_OPTION 0x3. //低频 RCOSC
    
    //*********
    // RTC 补偿
    //********
    //#define SET_CCFG_MODE_CONF_RTC_COMP 0x0 //应用 RTC 温度补偿(可能不受支持)
    #define SET_CCFG_MODE_CONF_RTC_COMP 0x1. //不要对 RTC 应用温度补偿
    
    //********
    // XOSC 频率
    //*********
    //#define SET_CCFG_MODE_CONF_XOSC_FREQ 0x0 // MEMS、保留
    //#define SET_CCFG_MODE_CONF_XOSC_FREQ 0x1. // BAW、保留
    //#define SET_CCFG_MODE_CONF_XOSC_FREQ 0x2. // 48MHz (可能不受支持)
    #define SET_CCFG_MODE_CONF_XOSC_FREQ 0x3. //24MHz
    
    //*********
    //启用 XOSC 电容阵列增量
    //********
    #define SET_CCFG_MODE_CONF_XOSC_CAP_MOD 0x1. ///<请勿应用电容阵列增量
    
    
    //********
    // HF 补偿
    //********
    //#define SET_CCFG_MODE_CONF_HF_COMP 0x0 //应用48MHz 补偿(可能不受支持)
    #define SET_CCFG_MODE_CONF_HF_COMP 0x1. //不要应用48MHz 频率补偿
    
    //********
    // XOSC 电容阵列增量的值
    //********
    #define SET_CCFG_MODE_CONF_XOSC_CAPARRAY_Delta (0xFF) //<有符号8位值、直接修改修整后的 XOSC 电容阵列值
    
    //********
    // VDDR 电容值
    //
    这应考虑电容容容差
    //和电压相关电容变化。
    //*********
    #define SET_CCFG_MODE_CONF_VDDR_CAP 0x3A //无符号8位整数,表示 VDDR 上的最小去耦电容,单位为100nF
    
    

    我们使用的是3.3V MCU 电源、因此启用了内部直流/直流转换器。

    对于 CC2630 4x4修订版 D、上面的任何设置是否看起来可能是错误的?

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

    您好、Michael、

    CCFG 文件无需更改。  硬件设计仍可能存在未被 SMARTRFTM-STUDIO 捕获的问题、我建议您将您的 PC 板与 CC2650EM-4XD-RD 进行比较、并考虑将您的设计提交 到 SIMPLELINK-2-4GHz-DESIGN-审核以供进一步审核。

    此致、
    Ryan

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

    我已经提交了我们的硬件设计供审核、但我只是想在此论坛上由 TI 专家在软件方面做最后一件事。

    我的团队运行了 IAR 7.40.3中内置 TIRTOS 2.11 SDK 的 pinInterrupt 示例。  我们仅稍微修改了代码中的引脚分配、以匹配我们的定制电路板引脚分配。  本质上、代码如下所示:

    int main (void)
    {
    /*呼叫板初始化函数*/
    Board_initGeneral();
    
    /*打开 LED 引脚*/
    ledPinHandle = PIN_OPEN (&ledPinState、ledPinTable);
    if (!ledPinHandle){
    System_abort ("初始化板 LED 引脚时出错");
    }
    ///后面显示其他代码
    } 

    PIN_open()函数最终会出现错误。  LED 引脚表中有正确的引脚定义、没有重复的条目、并且处于有效的 IO 编号范围内(我们只更改了 IO 编号以匹配我们的定制板)。  是否有什么类型的硬件问题可能导致 PIN_open()失败的想法?

    谢谢、

    Michael

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

    嗨、Michael、

    如果其中一个 ledPinTable 条目已被另一个外设使用、或者无法访问该引脚、则 PIN_OPEN 将失败。  由于此代码是从示例中修改的、因此我不希望前者成为问题。  然而、由于4x4封装的 IO 引脚数量减少、后一种方法是可行的。  您是否尝试在7x7设计中运行此代码?  您能否进行分步更改以确定导致问题的引脚条目?  否则、引脚本身的物理硬件状态不应影响 PIN_OPEN 的运行。

    此致、
    Ryan

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

    我们尚未尝试在7x7设计上运行此代码。

    我们在此示例中所做的唯一更改是对 LED 引脚定义进行更改、使其处于4x4封装的可接受范围内(并确保它们可以由我们定制板上的 MCU 驱动):

    #define Board_LED1 IOID_0
    #define Board_LED2 IOID_1
    #define Board_LED3 IOID_3
    #define Board_LED4 IOID_8 

    我的问题更详细地说、电路板无法运行某些 API 函数、例如 GPIO 端口初始化或无线电初始化、可能是什么原因。  例如、我们遇到的一个硬件设计问题是、无法将一些 MCU 去耦电容器和直流/直流稳压器组件与 MCU 放置在电路板的同一侧(由于电路板尺寸限制)。  这可能是无法运行 PIN_open()的原因吗?  与之类似,PIN_open()也可以为 GPIO 端口启用特定的时钟源,这会导致 MCU 由于错误放置的组件而运行不正常?  有关导致此行为的特定硬件问题的任何提示都将很有帮助!

    谢谢、

    Michael

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

    PIN_OPEN 的源代码可从 TI-RTOS 目录的 PINCC26XX.c 中进行检查:

    PIN_Handle PIN_open (PIN_State_pState、const PIN_Config aPinList[]){
    uint_t i;
    Bool BOK;
    uint32_t bmPort;
    PIN_ID pinId;
    
    //确保一次只有一个客户端可以调用 PIN_open()或 PIN_add()
    Semaphore_pend (Semaphore_handle (&PinSem)、BIOS_wait_forever);
    
    //检查引脚列表中的所有引脚是否有效且首先可用
    对于(i=0、bOK=true、bmPort=0;aPinList &&(pinId=PIN_ID (aPinList[i]))!=PIN_Terminate;i++){
    /*允许未分配的引脚,但无法生成位掩码。 *
    if (pinId!= PIN_Unassigned){
    if (pinId>=PIN_NumPins || PIN_HandleTable[pinId]){
    BOK = false;
    中断;
    } 否则{
    //为端口操作生成位掩码(CC26xx 上始终有一个端口)
    bmPort |=(1< pCbFunc =空;
    pState->bmPort = 0;
    pState->userArg=0;
    
    //根据 aPinList 配置 I/O 引脚
    对于(i=0;aPinList &&(pinId=PIN_ID (aPinList[i]))!=PIN_Terminate;i++){
    if (pinId!= PIN_Unassigned){
    PIN_HandleTable[pinId]= pState;
    pState->bmPort |=(1<<pinId);
    PIN_setConfig (pState、PIN_BM_ALL、aPinList[i]);
    }
    }
    
    
    Semaphore_post (Semaphore_handle (&PinSem));
    返回 pState
    ;} 

    IO3也是 JTAG TDO、因此如果4线制 JTAG 被启用、那么 TDO 操作将优先于任何其它引脚功能。

    此致、
    Ryan

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

    我们使用 cJTAG、并且没有从 TDI/TDO 到调试探针的连接。

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

    感谢您的更新、我没有任何其他建议。  如果/何时您有更多调试信息要共享、请告诉我。

    此致、
    Ryan