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.

[参考译文] TMS570LC4357:安全功能 HET5A "使用 I/O 环回&quot 的功能的引导时间软件测试;未按预期工作。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1196275/tms570lc4357-safety-feature-het5a-boot-time-software-test-of-function-using-i-o-loopback-does-not-behave-as-expected

器件型号:TMS570LC4357
主题中讨论的其他器件:TMDX570LC43HDK

您好!

我们将两个高端定时器(N2HET)用于通用 I/O、并且希望执行 HET5A 回路测试。
但是、该测试的行为不符合预期、因为回环对方向似乎必须与技术参考手册(SPNU563A)第23.4.32节中指定的方向相反才能正常工作。

例如、
步骤1. 将0x01写入 HETLBPSEL 以在引脚0和1上选择数字环回。
步骤2. 将0x01写入 HETLBPDIR 以将引脚0设置为输出、将引脚1设置为输入。
步骤3. 启用环回。
步骤4. 写入 HETDIN 的位1。
步骤5. 检查 HETDOUT 的位0、以确认它的值与步骤4中写入引脚1的值相同。

此程序是否正确?

我发现在步骤5中、引脚0和1不相同。

然而、如果在步骤2中、我写入0x00到 HETLBPDIR 中、以将引脚1设置为输出、将引脚0设置为输入、但在步骤4中继续写入位1、那么在步骤5中、引脚0和1是相同的。

因此、为了使测试通过、我需要将 HETLBPDIR 设置为与技术参考手册中指定的内容相反。

好的、我是做错了什么事情还是技术参考手册中有错误?


谢谢你。

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

    Andrew、您好!

    我们已开始处理您的问题、因此我们很快将提供更新。

    --

    谢谢。此致、

    Jagadish。

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

    Andrew、您好!

    是否在选择环回对之前先启用环回?

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    我在选择环回对之前已尝试启用环回、但没有产生任何影响。

    此致、

    Andrew

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

    好的、 我最后将创建一个示例代码

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

    Andrew、您好!

    我创建了一个示例、并最终对其进行了测试、结果很好。

    实际上,在我学习后,我明白了,默认情况下 HET[n+1]将作为输出,HET[n]将作为输入,所以如果我没有错的话,你可能会尝试写入 HET[n ],默认情况下是输入的。

    /* USER CODE BEGIN (2) */
    #define ENANLE 0xA
    #define DISABLE 0x5
    #define LBPTSTENA_BIT_POS   16
    /* USER CODE END */
    
    int main(void)
    {
    /* USER CODE BEGIN (3) */
        hetInit();
        hetREG1->LBPDIR = ENANLE << LBPTSTENA_BIT_POS; //Enable Loopback
        hetREG1->LBPDIR &= ~(1 << 0); // HET1[1] as output and HET1[0] as input
        hetREG1->LBPSEL |= 1 << 0;  // Selecting Pair HET1[0] and HET1[1]
        hetREG1->LBPSEL &= ~(1 << 16); //Selecting Digital loopback
    
        hetREG1->DOUT |= 1 << 1;    //Writing 1 to HET1[1]
    
        if(hetREG1->DIN & 1 << 0) //Reading to HET1[0] and comparing with 1
        {
            hetREG1->DOUT &= ~(1 << 1); //Writing 0 to HET1[1]
            if((hetREG1->DIN & 1 << 0) == 0) //Reading to HET1[0] and comparing with 0
            {
                result = true;
            }
            else
            {
                result = false;
            }
        }
        else
        {
            result = false;
        }
    
        while(1);
    /* USER CODE END */
    
        return 0;
    }

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    感谢您的答复。

    您的示例代码适用于我。

    但是、我观察到的情况是、此示例可使电路板上的 LED 亮起。
    我将在 TMDX570LC43HDK Hercules TMS570LC43x 开发套件上运行此示例。
    例如,如果我更改了您的示例代码,以便 HET1[29]是输出,HET1[28]是输入。
    然后先将0写入 HET1[29],再写入1到 HET1[29]。
    然后、当达到 while (true)时、LED D8 (位于左侧底部)亮起。

    我不期望出现这种行为、因为我认为在数字环回模式下不会在引脚上看到环回值。

    您看到同样的行为吗?

    谢谢你。

    Andrew

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

    Andrew、您好!

    您是否看到同样的行为?

    我最终没有看到这种行为、因为我在 Launchpad 上进行了测试、而没有在 HDK 电路板上进行了测试

    刚才我验证了 HDK 电路板的原理图

    在这里可以看到、HET1{29}已连接到 HDK 电路板上的 LED、由于此 LED 会在您尝试写入 HET1上的数据时切换。[29]

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    感谢您的答复。

    但是、该问题与 HDK 无关。

    问题是数字环回测试似乎未按预期工作。

    对于数字环回测试、我的理解是不应在引脚上看到测试信号。 我认为这意味着 LED 不应亮起。
    -请确认我的理解是否正确。

    但对我来说、LED 正在亮起、这意味着在引脚上看到测试信号。
    我还尝试了模拟环回测试、其行为方式与数字环回测试相同、即在模拟和数字环回测试中、LED 均亮起。
    模拟环回测试和数字环回测试之间似乎没有任何差异。

    所以、我认为数字回路测试没有正常运行。

    您是否解释过为什么对于数字回路测试、测试信号可以在引脚上看到、以及为什么数字回路测试的工作方式与模拟回路测试相同?

    谢谢你。

    Andrew

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

    Andrew、您好!

    对于数字环回测试,我的理解是不应在引脚上看到测试信号。 我认为这意味着 LED 不应亮起。

    它仅按预期工作、数字环回的实际含义是不需要任何外部线路进行环回、环回应在内部发生。 如您所见、我们没有使用任何外部导线将  HET1{28}和 HET1{29}短接、对吗?

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    感谢您的答复。

    我同意您的看法、即数字回路测试不需要在被测引脚之间建立外部连接。

    但是、我的问题旨在阐明模拟环回测试和数字环回测试之间的差异。

    对于数字环回、您声明它"不需要任何外部线路来执行环回、环回应在内部发生"。
    您是否意味着模拟环回需要外部导线且环回是在外部完成?
    如果是这样,那不是我的理解。 我认为模拟和数字回路都是内部回路。 是这样吗?

    请参阅技术参考手册(SPNU563A 2018年3月)第23.2.5.7节"环回模式"介绍了数字环回和模拟环回。

    对于数字环回、TRM 表示"在数字环回模式下、会直接连接结构对、并绕过输出缓冲器。 因此、回送值将不会在相应的引脚上看到。"

    对于数字环回、"环回值将不会在相应的引脚上看到"实际上意味着什么?
    我觉得这是因为测试信号没有到达外部管脚、所以测试信号不会影响外部电路、也不会受到外部电路的影响。
    即、例如它不会打开外部 LED。

    对于模拟环回、TRM 状态"在模拟环回模式下、结构对连接在输出缓冲器外部。 因此、在相应的引脚上可以看到回送值。"。

    对于模拟环回、"环回值将在相应的引脚上可见"。 意味着什么?
    我认为在这种情况下、它意味着测试信号出现在外部引脚上、因此它会影响外部信号。
    即、例如在该情况下、它可以打开一个外部 LED。


    请说明模拟环回和数字环回之间的区别。

    谢谢!

    Andrew

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

    Andrew、您好!

    我的坏处、我只是使用了我的旧知识。 但 TRM 在这里是正确的。

    是的、数字环回和模拟环回都不需要任何额外的导线进行环回。

    是的、数字环回不应将值传递到输出引脚、因为会绕过输出缓冲器、在模拟环回中、这些值将传递到输出引脚。

    结束时我将再次测试、为什么值会通过数字环回传递到输出引脚。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    您是否有关于此问题的更新?

    谢谢你。

    Andrew

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

    Andrew、您好!

    很抱歉,由于其他问题,我没有机会再次检查。 我现在开始工作、很快就会提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    Andrew、您好!

    我现在检查了一下,我也可以看到你在我结束时提到的问题。 但是我可以通过注释掉"hetInit"函数来解决这个问题。

    在对该函数进行注释之后、我可以看到数字和模拟环回的操作正常。

    在数字回送中我没有在 GIO 引脚上看到任何值(即输出缓冲器被禁用)、但回送按预期工作、即写入 HET1[0]上的值被回送至 HET1[1]。

    在模拟回送中、我可以看到 GIO 引脚上的值(即未禁用输出缓冲器)、回送也能正常工作、即写入 HET1[0]上的值会环回至 HET1[1]。

    您能否从自己的角度进行测试和确认?

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    感谢您的答复。

    我可以确认,如果我注释掉 hetInit ()函数,那么我会观察到 与你相同的行为。
    即在数字回送中、LED 未亮起。
    在模拟回送中、LED 亮起。

    在本例中这是因为我使用 hetInit ()将 HET 引脚配置为 GIO 输出。
    如果未调用 hetInit(),则默认的 GIO 方向为输入。
    在我看来、GIO 方向的配置会覆盖模拟/数字环回配置。

    我还使用 hetInit ()来配置模块上拉/下拉。
    所以,不调用 hetInit ()对我来说不是一个真正令人满意的方法。

    我认为问题在于   HET 模块的回送行为与 TRM 中描述的不符。 你同意吗?


    谢谢!
    Andrew

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

    Andrew、您好!

    在本例中,这是因为我使用 hetInit ()将 HET 引脚配置为 GIO 输出。
    如果未调用 hetInit(),则默认的 GIO 方向为输入。
    在我看来、GIO 方向的配置会覆盖模拟/数字环回配置。

    没错、如果我们将引脚方向配置为输出、那么即使在我们配置为数字环回之后、输出缓冲器也不会被禁用。

    所以,不调用 hetInit()对我来说不是一个真正令人满意的方法。

    实际上、无需停止调用"hetInit"函数。您可以调用 该函数、但不要为我们用于环回的引脚配置引脚方向输出

    如果你这样做、那么你可以调用"hetInit"函数、就不会有任何问题。 一旦回送测试完成、您可以禁用回送、并且可以在代码本身中配置所需的引脚方向。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!


    感谢您的答复。

    但是、如果我将引脚配置为输入而不是输出、这难道不能掩盖问题吗?
    数字回送看起来不起作用的根本问题不是吗? 即、数字环回的工作方式与模拟环回完全相同。
    如果引脚被配置为输入、它们将不会接收来自外部电路的信号、这也不会影响环回测试的结果吗?


    此致、
    Andrew

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

    Andrew、您好!

    但是,如果我将引脚配置为输入而不是输出,这难道不是仅仅隐藏问题吗?

    实际上、HET 引脚的缺省状态为只输入。

    我的意思是、如果我们要执行 HET 环回测试、我们不需要配置到输出的引脚方向、您可以直接启用环回类型、环回对并进行环回测试。

    我不会说它是完美的、我会记下这种数字回送行为、并将与内部团队进行讨论。

    --

    谢谢。此致、
    Jagadish。