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.

[参考译文] TMS320F28377S:如果在加电期间测试了闪存 ECC、则 ADC-PPB 触发区标志会被置位

Guru**** 2445440 points
Other Parts Discussed in Thread: C2000WARE, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1093654/tms320f28377s-adc-ppb-trip-zone-flag-is-set-if-flash-ecc-is-tested-during-power-up

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WAREUNIFLASH

您好!

我使用我们在以前的项目之一中一直使用的加电自检(帖子)在基于 F28377S 的电机控制器上执行帖子。 这些帖子使用 TI 的 STL 库。 如果我允许 POST 执行闪存 ECC 测试、那么当 代码运行时、我会设置 ADC-PPB (后处理块)触发区标志。 闪存 ECC 帖子基于 TI 提供的 STL 示例。 它的工作原理。 但是、当 我激活 POST 时、闪存 ADC-PPB 触发区标志会被置位。  随附的文档显示了跳闸区域和 ADC 设置的详细信息。   

您是否知道这种行为的可能原因?

谢谢、

Dhammikae2e.ti.com/.../4604.tripzone_5F00_isssue.docx

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

    您好 Dhammika、

    我们的 ADC 专家将在一天或两天内为您提供帮助。

    谢谢、此致、
    Vamsi

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

    Dhammika、

    我与其他一些人谈过,这里没有任何明显的联系。  我认为闪存 ECC 测试只是读取闪存位置并寻找一个 ECC 故障(在任何内存读取时将自动捕捉)。

    在调用 ECC 测试时、ADC 是否主动转换?  PPB 只能在新转换时跳闸、我想开始排除任何干扰、也许可以在调用测试时停止 ADC 以查看问题是否仍然存在?

    最棒的

    Matthew

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

    您好、Matthew、

    感谢您的快速回复。 我已连接下面的闪存 ECC 测试代码。 它基于 TI 提供的 STL 示例。 一个值得注意的事情是、编写这部分代码的人在调用这些函数之前没有初始化闪存 API。 因此、我认为这是导致问题的原因。 我纠正了这个问题、但这个问题从未消失。  

    POST (其中包含闪存 ECC 测试)是在主程序中完成的第一件事情。 ADC 在初始化 PIE 等之后进行初始化。但是、在设置 ADC 之前设置 PWM。 设置 ADC 后、软件强制执行转换。 但此时、PPB 跳闸区域事件尚未激活。 仅在 PWM 链接到 ADC 且电机控制 ISR 开始工作后、才会激活 PPB 触发区事件。 此时已正确设置 PPB。 我检查了这个序列、它看起来是正确的。 如果在 POST 内部完成闪存 ECC 测试、则即使 PPB 跳闸区域未被激活、PPB 跳闸区域标志也会被置位。  我的意思是激活 PPB 跳闸区域、执行以下代码。

    void enableADC_PPB_Tripzone (void)

    PH_A_ADC.ADCPPB3CONFIG.BIT.CONFIG = 0;// PPB 3与 SOC0相关
    PH_A_ADC.ADCPPB3OFFCAL.BIT.OFFCAL = 0;
    PH_A_ADC.ADCPPB3TRIPHI.bit.LIMITHI = ADC_PPB_HI_LIMIT;// ADC PPB 输出的高限值
    PH_A_ADC.ADCPPB3TRIPHI.bit.HSIGRN = 0;//符号位
    PH_A_ADC.ADCPPB3TRIPLO.BITMITLO = ADC_PPB_LO_LIMIT;// ADC PPB 输出的 LO 限制
    PH_A_ADC.ADCPPB3TRIPLO.BIT.LSIGN = 0;//符号位

    PH_A_ADC.ADCEVTSEL.bit.PPB3TRIPHI = 1;//设置此标志会在超出 PPB 的上限时导致 ADCAEVT3置位。
    PH_A_ADC.ADCEVTSEL.bit.PPB3TRIPLO = 1;//设置此标志会在超出 PPB 的下限时导致 ADCAEVT3置位。

    PH_B_ADC.ADCPPB4CONFIG.BIT.CONFIG = 1;// PPB 4与 SOC1相关
    PH_B_ADC.ADCPPB4OFFCAL.BIT.OFFCAL = 0;
    PH_B_ADC.ADCPPB4TRIPHI.bit.LIMITHI = ADC_PPB_HI_LIMIT;// ADC PPB 输出的高限值
    PH_B_ADC.ADCPPB4TRIPHI.bit.HSIGRN = 0;//符号位
    PH_B_ADC.ADCPPB4TRIPLO.BITMITLO = ADC_PPB_LO_LIMIT;// ADC PPB 输出的 LO 限制
    PH_B_ADC.ADCPPB4TRIPLO.BIT.LSIGN = 0;//符号位

    PH_B_ADC.ADCEVTSEL.bit.PPB4TRIPHI = 1;//设置此标志会导致在超出 PPB 的上限时 ADCBEVT4被置为有效。
    PH_B_ADC.ADCEVTSEL.bit.PPB4TRIPLO = 1;//设置此标志会导致在超出 PPB 的下限时 ADCBEVT4有效。

    PH_C_ADC.ADCPPB2CONFIG.BIT.CONFIG = 0;// PPB 2与 SOC0相关
    PH_C_ADC.ADCPPB2OFFCAL.BIT.OFFCAL = 0;
    PH_C_ADC.ADCPPB2TRIPHI.bit.LIMITHI = ADC_PPB_HI_LIMIT;// ADC PPB 输出的高限值
    PH_C_ADC.ADCPPB2TRIPHI.bit.HSIGRN = 0;//符号位
    PH_C_ADC.ADCPPB2TRIPLO.BITMITLO = ADC_PPB_LO_LIMIT;// ADC PPB 输出的 LO 限制
    PH_C_ADC.ADCPPB2TRIPLO.BIT.LSIGN = 0;//符号位

    PH_C_ADC.ADCEVTSEL.bit.PPB2TRIPHI = 1;//设置此标志会导致在超出 PPB 的上限时 ADCCEVT2被置为有效。
    PH_C_ADC.ADCEVTSEL.bit.PPB2TRIPLO = 1;//设置此标志会导致在超出 PPB 的下限时 ADCCEVT2被置为有效。

    谢谢、

    Dhammikae2e.ti.com/.../CheckFlash.c

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

    Dhammika、

    我正在努力在我的结尾重新创建此主题、请在21点之前给我 回复此主题。

    最棒的

    Matthew

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

    非常感谢 Matthew。

    Dhammika

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

    Dhammika、

    作为参考、我使用的是具有 STA 测试 的诊断库中的以下示例代码 f2837xd_test_application 项目:C:\ti\c2000Ware_1_00_01_00\libraries\diagnostic\f2837xd\examples\cpu1\test_application\我假设此框架是您的帖子所调用的内容、但如果不是这种情况、请告诉我。

    在 sta_tests.c 中的这个示例代码内、我们定义了一个要在器件上测试的各种 IP 的测试数组:

    const STA_Tests_Types STA_Tests_testArray[STA_TESTS_NUMBERS] =
    {
        STA_TEST_START,
        STA_BROM_CPU1,
        STA_BROM_CPU2,
        STA_BROM_CRC,
        STA_INT_POST_TEST,
        STA_HWBIST_MICRO,
        STA_HWBIST_FULL,
        STA_CLA_MICRO,
        STA_CLA_FULL,
        STA_DEVCFG,
        STA_PER_REG,
        STA_ERRORSTS,
        STA_TEST_PIE_RAM,
        STA_TEST_PIE_HANDLER,
        STA_OSC_CT,
        STA_OSC_HR,
        STA_TIMER_POST,
        STA_TIMER_PEST,
        STA_MCD,
        STA_WD_TEST,
        STA_INT_MON,
        STA_SCI_MON,
        STA_SCI_TEST,
        STA_SPI_TEST,
        STA_I2C_TEST,
        STA_MCBSP_TEST,
        STA_CAN_TEST,
        STA_SP_TEST,
        STA_FLASH_ECC_LOGIC_TEST,
        STA_FLASH_ECC_DETECT,
        STA_FLASH_CRC,
        STA_RAM_LOGIC_TEST,
        STA_RAM_DETECT,
        STA_MARCH,
        STA_MARCH_COPY,
        STA_GPIO_INPUT_TEST,
        STA_GPIO_OUTPUT_TEST,
        STA_PWM_DUTY_TEST,
        STA_PWM_TRIP_TEST,
        STA_EQEP_TEST,
        STA_SDFM,
        STA_ADC_DAC_TEST_12BIT,
        STA_ADC_DAC_TEST_12BIT_DMA,
        STA_ADC_DAC_TEST_16BIT,
        STA_ADC_DAC_TEST_16BIT_DMA,
        STA_TEST_END
    };

    const STA_Tests 类型 STA_Tests 测试数组[STA_TEST_Numbs]

    如果我将测试调用限制为仅限闪存 ECC 测试、那么我一般不会在 ADC PPB 寄存器或 ADC 寄存器中看到任何活动。

    从上面开始、有针对 ADCA/B/C/D 的独特测试、如果调用这些测试、它将设置 ADC 以进行采样并使用 PPB 寄存器。

    根据示例的设置方式、它将迭代上述所有测试、但我需要了解如何在您的系统中实现(如果不使用示例)。  

    如果您可以让我知道您正在调试的代码中的增量、我们可以从该示例开始。  我想知道在您的系统中、ADC STA 测试是否被集中到一大组测试中、等等

    最棒的

    Matthew

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

    您好、Matthew、

    非常感谢您对此进行测试。 在我们的代码中、测试按以下顺序排列。 从枚举器的名称中、您可以判断测试是什么。 这些测试与 STL 示例中的测试相同。  

        ptFlashEccLogic,
        ptFlashCrc,
        ptHwbist,
    
        ptPie,
        ptInterruptVectorTable,
        ptInterruptVectorMismatchHandling,
    
        ptWD,
    
        ptIntOscillator2,
        ptXtalOscillator,
        ptIntOscillator1,
    
        ptTimer0,
        ptTimer1,
        ptTimer2,
    
        ptMemoryEccLogic,
        ptMemoryParityLogic,
        ptRam,
    
        ptSpiA,
        ptSpiB,
    
        ptSciA,
        ptSciB
    

    谢谢、

    Dhammika

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

    Dhammika、

    回到您的第一个帖子、您提到了该函数

    void enableADC_PPB_Tripzone (void){...}

    您是说 ECC POST 测试调用了此函数、还是说系统中发生的任何事情都模仿了该函数中的内容?  是否可以在该函数处放置一个断点、以查看我们是否使用任何其他函数调用来触发它?  从这个例子的构造来看、由于我们不称之为 Bp、我们不应期望触发 Bp、但最好确认这一点。

    最棒的

    Matthew

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

    您好、Matthew、

    目前、在 ADC 偏移校准后、在电机 ISR 内调用此函数。  

    即使我不调用此函数、 也 会设置 PPB 跳闸区域标志。 这就是为什么我说我对跳匣区域的行为有点困惑。  

    我在初始化期间调用了该函数、并在初始化期间激活了所有触发区触发器。 解决了这个问题。 唯一合适的解决方案是禁用闪存 ECC 测试。 然后、跳闸区域标志不会被触发(没有任何原因)并且电机运行。

    谢谢、

    Dhammika

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

    Dhammika、

    让我与拥有 PPB 跳匣区域的一些团队一起讨论一下、我认为有多个因素可以发挥作用。  在我的末尾没有任何明显的 ECC 测试和 PPB 链接、但我想知道偏移校准是否存在第二个因素。

    最棒的

    Matthew

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

    Dhammika、

    我想使用 C2000上的硬件观察点来尝试获取设置 ADC PPB 的代码。  如果您以前没有使用过,这是一个设置过程,但我们将尝试并引导我们完成:)  我们将在您运行 sta 测试之前设置以下内容

    1)我们需要指定 ADC PPB 寄存器的地址范围、因此我们需要澄清哪个 ADC 提供此行为。  例如、如果它是 ADCA PPB、则寄存器的地址为0x7440-0x745F。  如果这是 ADCB/C/D、我们只需相应地更改地址。

    2)在 CCS 顶部工具栏中,转到 View->Breakpoints

    3)在刚刚打开的断点窗口中单击右键、并将鼠标悬停在"Breakpoint (Code Composer Studio)"菜单的顶部项目上、然后选择 HW 观察点

    4)在弹出窗口中、只需输入感兴趣的 ADC PPB 块的第一个地址、假设它是 ADC A、我们将输入0x7440、并将"存储器"选项保留为"写入"单击"确定"。

    5)这应该会在 Breakpoints 窗口中填充一个新的行。  右键单击此条目、然后选择 Breakpoint Properties

    6)展开 HW 配置、然后键入 Trigger Type。

    7)您将在位置字段中看到0x7440。  我们现在需要添加一些掩码位、以便查看整个 PPB 地址范围。  由于我们要查看40-5F 范围内的所有地址、我们将在掩码字段中输入0x001F、然后单击应用并关闭。

    8)现在运行程序。  硬件观察点将监控总线是否有数据写入 PPB 寄存器、如果有存储器写入、则会中断。  由于这一操作发生在写入发生后、代码将被停止经过有问题指令的几行代码、并且我们希望可以使用此信息来查看我们执行了哪些代码导致了这个问题。  然后、我们可以开始反向跟踪(使用正常的 SW 断点)、以了解我们如何进入此代码。

    如果您有任何问题或疑问、请告诉我如何使其正常工作。

    最棒的
    Matthew

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

    您好、Matthew、

    感谢您的这些说明。 我尝试过、但在没有任何内容写入 PPB 寄存器时、跳闸区域触发器标志会被置位。  

    不过、我发现了一件事。  当 PWM ISR 被配置时、EPwm7Regs.TZFlG.bit.DCBEVT1和 DVBEVT2被置位。 这两个事件标志对应于闪存 ECC 错误(基于我的代码)。 下面给出了 PWM ISR 配置代码。 我不知道为什么会发生这种情况。 这是问题的开始。 一旦串行通信开始、OST 标志就会置1。 我还没有发现造成这种情况的原因。

    谢谢、

    Dhammika

    void MapAndEnablePWM_ISR(void)
    {
        EALLOW;
    
        //PWM1 INT is used to trigger Motor Control ISR
        EPwm7Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;    // INT on PRD event
        EPwm7Regs.ETSEL.bit.INTEN  = 1;              // Enable INT
        EPwm7Regs.ETPS.bit.INTPRD  = ET_1ST;         // Generate INT on every event
    
        PieVectTable.EPWM7_INT = &MotorControlISR;
    
        PieCtrlRegs.PIECTRL.bit.ENPIE = 1;  // Enable the PIE block
        PieCtrlRegs.PIEIER3.bit.INTx7 = 1;  // Enable PWM1INT in PIE group 3
    
        EPwm7Regs.ETCLR.bit.INT=1;
        CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable the PWM time-base clock
    
        EDIS;
    
        EALLOW;
        IER |= M_INT3; // Enable group 3 interrupts
        EDIS;
    }
    

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

    您好、Matthew、

    很抱歉、似乎我按下了错误的按钮。 此问题尚未解决。  

    无论如何、PWM 中断配置代码、导致 DVBEVT 被置位的指令为:

    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;//启用 PWM 时基时钟

    谢谢、

    Dhammika

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

    Dhammika、

    我认为、PWM 中必须有一个寄存器在 STA 测试中不会初始化/重新初始化、一旦启用 PWM 时基、它就会给出错误的跳闸(基于过时/未准备好进行采样的条件)。  我将要求其他人看看这里。

    最棒的
    Matthew

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

    您好、Matthew、  

    这可能是原因、但我不知道它可能是什么寄存器。 我不会在自检中测试 PWM 模块。  

    谢谢、

    Dhammika

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

    Dhammika、

    您能否在代码中共享这些寄存器的设置:

    TZSEL

    TZDCSEL

    TZCTL

    TZCTL2

    TZCTLDCA

    TZCTLDCB

    它将帮助我们了解跳闸条件。

    最棒的
    Matthew

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

    e2e.ti.com/.../1106.tripzone_5F00_isssue.docx

    您好、Matthew、

    所有内容都位于随附文件的第2节中。  

    谢谢、

    Dhammika

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

    您好 Dhammika、

    感谢您分享您的代码。 我将查看 ePWM 寄存器。  

    [~ userid="396166" url="μ C/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1093654/tms320f28377s-adc-ppb-trip-region-flag-ise-set-if-flash-ecc-ise-tested-during power-up/4066msprg"当配置了 EP40dt1.tbpwmspmspmspmsp2.t1.mspmspmspmspmspmspmspmspmspmspmspms 和 t6mspmspmspmspmspmspmspmspm 这两个事件标志对应于闪存 ECC 错误(基于我的代码)[/QUERP]

    您能否分享 DCBEVT1和 DCBEVT2与闪存 ECC 错误的对应关系? 当我检查您提供的代码时、我会看到以下语句:

    // ECC Error
        gPWM_TrippedByECC_Err = (NmiIntruptRegs.NMIFLG.bit.FLUNCERR << 1) | NmiIntruptRegs.NMIFLG.bit.RAMUNCERR;
    

    ~在串行通信开始后、引用 userid="396166" URL"/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1093654/tms320f28377s-adc-ppb-trip-region-flag-ise-set-if-flash-ecc-ise-tested-during power-up/4066OST" 4066263"#40263"。 我还没有找到导致这种情况的原因。[/引述]

    您是否可以检查正在设置的 OST? 这可以通过 TZOSTFLG 寄存器进行检查、以确定 OSHT 4或5是否被置位。

    此致、

    Marlyn

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

    您好、Marlyn、

    这是我设置 DCBEVT1和2的配置位置。 这仅适用于 PWM7寄存器。 我对 PWM 8和9执行同样的操作。

        PWM_Ph_A.DCTRIPSEL.bit.DCBHCOMPSEL   = 15;         // Trip combination input (all trip inputs selected by DCBHTRIPSEL register ORed together)
        PWM_Ph_A.DCBHTRIPSEL.bit.TRIPINPUT14 = 1;          // ECCDBLERR - This is enabled separately
    
        PWM_Ph_A.TZDCSEL.bit.DCBEVT1         = TZ_DCBH_HI; // 010: TZ_DCBH_HI = high, TZ_EVT_DISABLE, DCBL = don't care
        PWM_Ph_A.DCBCTL.bit.EVT1SRCSEL       = DC_EVT1;    // DCBEVT1 Source Signal Select, 0: Source Is DCBEVT1 Signal, 1: Source Is DCEVTFILT Signal
        PWM_Ph_A.DCBCTL.bit.EVT1FRCSYNCSEL   = 0;          // DCBEVT1 Force Synchronization Signal Select, 0: Source is passed through asynchronously, 1: Source is synchronized 
                                                           // with EPWMCLK
        PWM_Ph_A.TZDCSEL.bit.DCBEVT2         = TZ_DCBH_HI; // 010: DCBH = high, DCBL = don't care
        PWM_Ph_A.DCBCTL.bit.EVT2SRCSEL       = DC_EVT2;    // DCBEVT2 Source Signal Select, 0: Source Is DCBEVT2 Signal, 1: Source Is DCEVTFILT Signal
        PWM_Ph_A.DCBCTL.bit.EVT2FRCSYNCSEL   = 0;          // DCBEVT2 Force Synchronization Signal Select, 0: Source is passed through asynchronously, 1: Source is synchronized 
    

    请给我一点时间回答您的下一个问题。

    谢谢、

    Dhammika

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

    Dhammika、

    昨天我又和 Marlyn 谈过这个问题、ECC 逻辑和 DC 事件之间存在一种关系、如下所示:  本质上、有一个选项允许将 ECC 错误馈入直流块、以便在发生 ECC 事件(不可纠正或超过 ECC 中设置的阈值以允许可纠正的错误)时、可以根据需要触发/跳闸 EPWM。

    为了避免系统中的跳闸、可能会禁用此选项、但这仅解决顶级问题。  我认为更让我关注的是、系统认为已经发生了 ECC 事件、尽管在测试期间、sta 测试没有标记一个事件。  我需要更深入地研究 ECC 逻辑、我知道如果发生故障、我们会存储任何故障地址以便进一步调试、但 我还想确认错误阈值等的默认设置

    我今天稍后会在我研究了一点之后再作一个回复、同时、如果您想继续调试您的系统、您可以将其禁用为直流块的触发源。  

    我怀疑您有真正的 ECC 事件 BTW、但需要将其追溯到源代码、以了解这种情况的发生方式。

    最棒的
    Matthew

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

    您好、Matthew、

    感谢您对此进行调查。 我们认为、错误 ECC 的跳闸区触发比 ECC 自检更重要。 目前、我们 正在禁用开机自检、每个人都很开心。

    谢谢、

    Dhammika

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

    Dhammika、

    我曾想过、您是使用引导加载程序还是使用 CCS 闪存工具(或 Uniflash)对闪存进行编程?  如果您使用 JTAG/IDE 进行编程、您能否验证是否已选中"auto-ECC generation"选项?  本常见问题解答更详细地介绍了这一点、第22点 https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/951658/faq-faq-for-flash-ecc-usage-in-c2000-devices---includes-ecc-test-mode-linker-ecc-options?tisearch=e2e-sitesearch&keymatch=Flash%25252525252520ECC#

    如果您将闪存与引导加载程序结合使用、并且使用闪存 API、我还希望确保我们也按照上述常见问题解答中的详细说明对 ECC 进行编程。

    最棒的

    Matthew

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

    您好、Matthew、

    我已选中自动 ECC 生成。 我使用 CCS 和 XDS110调试器对芯片进行编程。

    谢谢、

    Dhammika

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

    您好、Matthew、

    随附的是我使用的链接器命令文件。

    谢谢、

    Dhammika

    //
    // Ensure STL_HWBIST_restoreContext() is linked properly.
    //
    -u _STL_HWBIST_restoreContext
    
    MEMORY
    {
    PAGE 0 :  /* Program Memory */
              /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */
              /* BEGIN is used for the "boot to Flash" bootloader mode   */
    
       HWBIST           : origin = 0x000000, length = 0x000020
       BEGIN           	: origin = 0x080000, length = 0x000002
       RAMM0            : origin = 0x000123, length = 0x0002DD
       RAMD0           	: origin = 0x00B000, length = 0x000800
       RAMLS0          	: origin = 0x008000, length = 0x000800
       RAMLS1          	: origin = 0x008800, length = 0x000800
       RAMLS2      		: origin = 0x009000, length = 0x000800
       RAMLS3      		: origin = 0x009800, length = 0x000800
       RAMLS4      		: origin = 0x00A000, length = 0x000800
       //RAMGS14          : origin = 0x01A000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       //RAMGS15          : origin = 0x01B000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RESET           	: origin = 0x3FFFC0, length = 0x000002
       
       /* Flash sectors */
       FLASHA           : origin = 0x080002, length = 0x001FFE	/* on-chip Flash */
       FLASHB           : origin = 0x082000, length = 0x002000	/* on-chip Flash */
       FLASHC           : origin = 0x084000, length = 0x002000	/* on-chip Flash */
       FLASHD           : origin = 0x086000, length = 0x002000	/* on-chip Flash */
       FLASHE           : origin = 0x088000, length = 0x008000	/* on-chip Flash */
       FLASHF           : origin = 0x090000, length = 0x008000	/* on-chip Flash */
       FLASHG           : origin = 0x098000, length = 0x008000	/* on-chip Flash */
       FLASHH           : origin = 0x0A0000, length = 0x008000	/* on-chip Flash */
       FLASHI           : origin = 0x0A8000, length = 0x008000	/* on-chip Flash */
       FLASHJ           : origin = 0x0B0000, length = 0x008000	/* on-chip Flash */
       FLASHK           : origin = 0x0B8000, length = 0x002000	/* on-chip Flash */
       FLASHL           : origin = 0x0BA000, length = 0x002000	/* on-chip Flash */
       FLASHM           : origin = 0x0BC000, length = 0x002000	/* on-chip Flash */
       FLASHN           : origin = 0x0BE000, length = 0x001FF0	/* on-chip Flash */
    
    PAGE 1 : /* Data Memory */
             /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */
    
       BOOT_RSVD       : origin = 0x000002, length = 0x000121     /* Part of M0, BOOT rom will use this for stack */
       RAMM1           : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1. 7F8 to 400 should not be used */
       RAMD1           : origin = 0x00B800, length = 0x000800
    
       RAMLS5      : origin = 0x00A800, length = 0x0007A0
    
       RAMGS0      : origin = 0x00C000, length = 0x001000
       RAMGS1      : origin = 0x00D000, length = 0x001000
       RAMGS2      : origin = 0x00E000, length = 0x001000
       RAMGS3      : origin = 0x00F000, length = 0x001000
       RAMGS4      : origin = 0x010000, length = 0x001000
       RAMGS5_RAMGS6_RAMGS7      : origin = 0x011000, length = 0x003000
       RAMGS8_9    : origin = 0x014000, length = 0x002000
       RAMGS10_13  : origin = 0x016000, length = 0x004000
       
    }
    
    
    SECTIONS
    {
    // Section  Usage
    // .text    contains executable code
    // .data	contains initialized non-const data
    // .ebss 	reserves space for uninitialized variables (global variables)
    // .econst  used for initialized const objects
    // .cinit	used by C programs to initializing global variables at startup
    // .stack   used for the function call stack
    // .esysmem used for dynamic memory allocation pool (not used in UsbLanIf)
    // .pinit   used by C++ programs for global object constructors (not used in UsbLanIf)
    // .switch  jump tables for some switch statements
    // .cio     used for stdio function buffers (not used in UsbLanIf)
    //
    //  ADCDMA  small section used by DMA to store ADC values
    //
    // For any section that should be verified with a CRC, the linker command file must be modified to include
    // the crc_table() operator. The specification of a CRC algorithm is optional. The syntax is:
    // crc_table(user_specified_table_name[, algorithm=xxx])
    
       /* Allocate program areas: */
       .cinit              : > FLASHA      PAGE = 0, ALIGN(4), crc_table(_flash_crctbl, algorithm=CRC32_PRIME)
       .pinit              : > FLASHB,     PAGE = 0, ALIGN(4)       //This section will be empty since we don't have any C++ global constructors
       .text               : >> FLASHB | FLASHC | FLASHD | FLASHE | FLASHF, PAGE = 0, ALIGN(4), crc_table(_flash_crctbl, algorithm=CRC32_PRIME)
       codestart           : > BEGIN       PAGE = 0, ALIGN(4)
    
       /* Must be placed at 0x0000 */
       hwbist           : LOAD = FLASHJ,
                          RUN = HWBIST,
                          LOAD_START(_HwbistLoadStart),
                          LOAD_SIZE(_HwbistLoadSize),
                          LOAD_END(_HwbistLoadEnd),
                          RUN_START(_HwbistRunStart),
                          RUN_SIZE(_HwbistRunSize),
                          RUN_END(_HwbistRunEnd),
                          PAGE = 0, ALIGN(4)
    
       /* Must be placed lower than a 16-bit memory address */
       hwbiststack      : > RAMD0, START(_startOfHwbistStack), END(_endOfHwbistStack), SIZE(_sizeOfHwbistStack)      PAGE = 0
    
    #ifdef __TI_COMPILER_VERSION__
       #if __TI_COMPILER_VERSION__ >= 15009000
        .TI.ramfunc : {} LOAD = FLASHG,
                             RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_SIZE(_RamfuncsLoadSize),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             RUN_SIZE(_RamfuncsRunSize),
                             RUN_END(_RamfuncsRunEnd),
                             PAGE = 0, ALIGN(4), crc_table(_flash_crctbl, algorithm=CRC32_PRIME)
       #else
       ramfuncs            : LOAD = FLASHG,
                             RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_SIZE(_RamfuncsLoadSize),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             RUN_SIZE(_RamfuncsRunSize),
                             RUN_END(_RamfuncsRunEnd),
                             PAGE = 0, ALIGN(4), crc_table(_flash_crctbl, algorithm=CRC32_PRIME)
       #endif
    #endif
    						 
       /* Allocate uninitalized data sections: */
       .stack              : > RAMD1,
                               START(_startOfStack), END(_endOfStack), SIZE(_sizeOfStack)      PAGE = 1
       .ebss               : > RAMGS5_RAMGS6_RAMGS7
                               START(_startOfEbss), END(_endOfEbss), SIZE(_sizeOfEbss)         PAGE = 1
       .esysmem            : > RAMLS5       PAGE = 1
    
       /* Initalized sections go in Flash */
       .econst             : >> FLASHH | FLASHI,  PAGE = 0, ALIGN(4), crc_table(_flash_crctbl, algorithm=CRC32_PRIME)
       .switch             : > FLASHG,            PAGE = 0, ALIGN(4)
       
       /* Sections for STL_RAM tests */
       m1ram            : > RAMM1,      PAGE = 1
       ls5ram           : > RAMLS5,     PAGE = 1
    
       //Space for the RAM copy of the contents of EEPROM
       //and the space for copying ram during memory checks
       UNION
       {
       	RamSaveArea		:
       } > RAMGS10_13
         START(_RamSaveStart), SIZE(_RamSaveSize), END(_RamSaveEnd),
         PAGE = 1, ALIGN(4)
    
       .reset              : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */
    
    	//Section to hold the flash_crctbl
    	//Note that we can not generate a crc_table entry for this section.
    	.TI.crctab			: > FLASHK, PAGE = 0
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

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

    Dhammika、

    Matt 今天不在办公室。 他将于星期一返回办公室,因此请在星期一/星期二前回复。

    谢谢、此致、

    桑托什

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

    Dhammika、

    让我们看看我们是否可以根到地址(或其他内容!) 这会导致 ECC 跳闸事件发生。

    我们将在基址0x5F500处查看 MemoryErrorRegs。  我想查看不可纠正和可纠正的标志和标志集寄存器、如下所述:

    UCERRFLG

    UCERRSET

    陶瓷

    陶瓷

    如果我们看到任一 FLG 寄存器中的任意位置1、我们就可以使用相关地址来确定错误发生的位置并从那里继续。

    如果我们看到在"set"寄存器中设置了任何位、则这表示中断已被强制(可能是为了检查功能)、并且需要在我们激活跳闸区域的路径之前清除中断。  实际上、在我编写此代码时、我想知道是否发生了这种情况、即 ECC STA 测试会有意激活逻辑以确保其正常工作。  但是、在我们将控制权传递回 main 之前、我们应该将其清除、因此让我们看看您的调查将涵盖哪些内容。

    最棒的

    Matthew

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

    您好、Matthew、

    加电自检执行后、这些是这些存储器寄存器中的值。  

    UCERRFLG	    0x00000000	Uncorrectable Error Flag Register [Memory Mapped]
    UCERRSET	    0x00000000	Uncorrectable Error Flag Set Register [Memory Mapped]
    UCERRCLR	    0x00000000	Uncorrectable Error Flag Clear Register [Memory Mapped]
    UCCPUREADDR	    0x0000A800	Uncorrectable CPU Read Error Address [Memory Mapped]
    UCDMAREADDR	    0x00000000	Uncorrectable DMA Read Error Address [Memory Mapped]
    UCCLA1READDR	0x00000000	Uncorrectable CLA1 Read Error Address [Memory Mapped]
    CERRFLG    	    0x00000000	Correctable Error Flag Register [Memory Mapped]
    CERRSET	        0x00000000	Correctable Error Flag Set Register [Memory Mapped]
    CERRCLR	        0x00000000	Correctable Error Flag Clear Register [Memory Mapped]
    CCPUREADDR	    0x00000400	Correctable CPU Read Error Address [Memory Mapped]
    CERRCNT	        0x00000000	Correctable Error Count Register [Memory Mapped]
    CERRTHRES       0x00000001	Correctable Error Threshold Value Register [Memory Mapped]
    CEINTFLG	    0x00000000	Correctable Error Interrupt Flag Status Register [Memory Mapped]
    CEINTCLR	    0x00000000	Correctable Error Interrupt Flag Clear Register [Memory Mapped]
    CEINTSET	    0x00000000	Correctable Error Interrupt Flag Set Register [Memory Mapped]
    CEINTEN	        0x00000001	Correctable Error Interrupt Enable Register [Memory Mapped]
    

    这些值在电机控制 ISR 被启用时保持不变。  

    谢谢、

    Dhammika

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

    Dhammika、

    列出的地址位于 LS5 RAM (A800)和 M1 RAM (0x400)中。  我注意到在您的链接器中、这些器件的使用方式如下:

    STL_RAM 测试的/*部分*
    m1ram:>RAMM1,PAGE = 1
    ls5ram:> RAMLS5,page = 1.

    我认为、作为 RAM 测试的一部分、这些可能会特意引入一些误差。  您能否回顾一下您的代码、在 RAM STL 测试模式运行后、特意重新初始化所有0x0000数据的 RAM、然后再继续。  我想在 stl 测试后、仍然有一些残留的不良数据。

    最棒的

    Matthew

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

    您好、Matthew、

    我尝试过这种方法、但即使这样也不起作用。    启用电机控制 ISR 后、我仍然立即设置了 DCBEVT1和 DCBEVT2。  

    谢谢、

    Dhammika

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

    Dhammika、

    现在、让我来看看其他人、我们已经找到了导致问题的解决方法、我们应该能够找出问题的根源。

    最棒的

    Matthew

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

    Dhammika、

    我与其他一些人谈过、从链接器文件中、分配给 STA 测试的 RAM 将会强制出现一些错误、以检查逻辑状态。  这将解释为什么我们在状态寄存器中看到这些地址。  不清楚的是、在您拍摄的快照中、错误标志已被清除、这应该会阻止 TZ 看到它们是在 STA 测试中设置的、或者至少我们希望它们在我们跳回 main 之前被清除。

    在您的代码中、您能否添加代码以确保在针对 RAM 错误启用 TZ 路径之前清除这些代码?  memcfg.h 中有2个函数可执行此操作:

    MemCfg_clearCorrErrorStatus () 和 MemCfg_clearUncorrErrorStatus ()  您可以分别传递标志参数 MEMCFG_CERR_CPUREAD 和 MEMCFG_UCERR_CPUREAD。

    同样、我认为 STA 测试会在将控制权传递回"main"之前清除这些问题、但会尝试准确地查看退出测试模式过程中出现的错误。

    最棒的

    Matthew

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

    您好、Matthew、

    我通过在 RAM 测试结束后执行这些例程来尝试此操作。 我把它们放在该例程的末尾。    启用电机控制 ISR 后、DCBEVT1和 DCBEVT2仍会立即置位。

    谢谢、

    Dhammika

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

    您是否能够清除跳闸区域标志并正常运行电机控制? 或者、即使清除了相关的 MemCfg 和 TZ 错误标志、这种情况也会继续存在吗?

    是否在内存测试之前配置 EPWM? 在我看来、如果您在 POST 测试运行且清除了错误标志之前未配置数字比较和跳闸区域模块、ECCDBLERR 信号如何传播到 TZ 尚不清楚。

    惠特尼

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

    此外、我相信这个信号用于闪存和 RAM 错误、所以也检查 Flash0EccRegs 标志。

    惠特尼

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

    尊敬的惠特尼:

    您似乎看不到出现此问题的原因。 我认为我必须对当前的配置感到满意-这将禁用闪存 ECC 测试并保持所有跳闸区域触发器处于活动状态。  

    谢谢、

    Dhammika

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

    您好 Dhammika、

    我将在本周尝试查看是否可以重现此问题、因为我想尝试了解到底发生了什么。 我将告诉您它是怎么发生的。

    惠特尼

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

    我试了一下。 基本上是设置一个可由 ECCDBLERR 跳闸的 PWM、然后运行一些测试、其中我将错误注入 RAM 和闪存。 如果我在初始化 PWM 之前运行了测试、只要我清除了 MemoryErrorRegs 和 Flash0EccRegs 中的所有错误标志、在我初始化 PWM 之前(从而建立了从 ECCDBLERR 到 TZ 逻辑的路径)、PWM 就不会在我启用它时立即跳变。

    如果我在已经初始化 PWM (开始时连接到 TZ 逻辑的 ECCDBLERR)后运行测试、我确实看到跳闸发生在我运行 RAM 和闪存测试时。 但是、我恢复功能所要做的就是清除 MemoryErrorRegs 和 Flash0EccRegs 中的所有错误标志、然后清除 PWM 寄存器中的 TZ 标志-

         EPWM_clearTripZoneFlag(EPWM1_BASE,
                                (EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST | EPWM_TZ_FLAG_DCAEVT1));
         EPWM_clearOneShotTripZoneFlag(EPWM1_BASE, EPWM_TZ_OST_FLAG_DCAEVT1);

    实际标志可能会因您配置 PWM 的方式而异、但这就是我所使用的。

    不确定这是否会提供有关您的应用中可能发生的情况的任何见解或需要调查的事物的想法。 如果您仍然对当前的权变措施满意、我们可以关闭该线程。

    惠特尼

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

    尊敬的惠特尼:

    感谢您的试用。 您的方案和我的方案之间的一个区别是启用 ADC_PPB 跳闸区域。 在我的情况下、当闪存 ECC 上电自检开始时、与 ADDC_PPB +过流相关的跳闸区域标志会被设置。 我尝试在启用电机控制 ISR 之前清除这些标志。 它们不会消失。 这意味着数字滤波器或比较器的输入仍然保持置位。

    谢谢、

    Dhammika  

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

    您看到 ADCEVTSTAT 位正在设置中吗? ADCEVTCLR 无法清除该条件?

    惠特尼

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

    尊敬的惠特尼:

    我没收到该标志。 但是、我修改了代码、以便在帖子之后、启用电机控制 ISR 等之前清除该标志、这一点没有什么影响。 就在启用电机控制 ISR 之前、ADCEVTSTAT 被清零。 但是、PWM TZFLG 寄存器中的 CBC 标志被置位。 然后、 在电机控制 ISR 被启用后、 ADCEVTSTAT 中的 TRIP Hi 标志 立即变为高电平、  并且 TZFLG 寄存器中的 DCBEVT1和 DCBEVT2标志被置位。  

    谢谢、

    Dhammika

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="396166" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1093654/tms320f28377s-adc-ppb-trip-region-flag-ise-set-if-flash-ecc-ise-tested-during power-up/409pwm] 、但引用了 TRLG/40966[Z4966]寄存器中的 Lb]。

    此时 TZCBCFLG 的价值是什么? 哪个跳闸源仍处于活动状态?

    [引用 userid="396166" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1093654/tms320f28377s-adc-ppb-trip-zone-flag-ise-set-if-flash-ecc-ise-tested-during -power-up/409gr     后、在 TCB4966中立即启用 TCTL 和引用 VDDTST2标记、然后在 TCC4066中启用 Vt1't1'、并在 TCTL 后立即启用 Vt2'

    您是否知道此时是否有实际的 ADCEVT? ADC 结果是否实际跨越了边界?

    闪存0EccRegs 标志此时仍为0? 是否仅设置 DCBEVT1/2 TZ 标志? 我认为 ADC PPB 事件与 DCAEVT 相关? 为了确保我已经正确读取了您的配置-

    • DCA->TRIP4 (CMPSS 跳闸信号)或 TRIP5 (ADC PPB 限制事件)
    • DCB -> ECCDBLERR (没有其他?)
    • 然后 TZ4、TZ5和 TZ6也被启用、对吧?

    惠特尼

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

    尊敬的惠特尼:

    很抱歉耽误你这么长时间的回答。 我参与了另一个项目、我必须快速启动。 以下是对您的问题的回答。 我想我们应该暂时停止这个线程、直到我再次回到这个项目。 但是、我想在某个时候解决这个问题。 非常感谢您对我如此耐心。

    我的答案以黄色突出显示。  

    注意:这里的重点是“在启用电机控制 ISR 后,ADCEVTSTAT 中的 TRIP Hi 标志立即变为高电平,并且 TZFLG 寄存器中的 DCBEVT1和 DCBEVT2标志被置位”。

    此时 TZCBCFLG 的价值是什么? 哪个跳闸源仍处于活动状态?

    您是否知道此时是否有实际的 ADCEVT? ADC 结果是否实际跨越了边界?

    闪存0EccRegs 标志此时仍为0? 是否仅设置 DCBEVT1/2 TZ 标志? 我认为 ADC PPB 事件与 DCAEVT 相关? 为了确保我已经正确读取了您的配置-

     

    DCA->TRIP4 (CMPSS 跳闸信号)或 TRIP5 (ADC PPB 限制事件)-

    DCB -> ECCDBLERR (没有其他?) -是的

    然后 TZ4、TZ5和 TZ6也被启用、对吧? 是的

    谢谢、

    Dhammika

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

    您好 Dhammika、

    感谢您提供更多详细信息。 将线程暂停一个位没有问题。 我将尝试提出更多有关可能导致这种情况的想法、当您有时间时、我们将再次进行讨论。

    惠特尼