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.

[参考译文] SafeTI 诊断库 HAL 层与 HalCoGen 生成的代码不同

Guru**** 2519650 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1277459/safeti-diagnostics-library-hal-layer-differs-from-halcogen-generated-code

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

您好!

我注意到、在使用 SafeTI 诊断库(SDL、版本2.4.0_LDRA_Less)运行 SCI 环回测试后、SCI 接口将停止工作。 我发现 SCIGCR1寄存器的位16 (用于启用环回)保持被设定为1。

检查 SL_SelfTest_SCI, 它的实现会调用此 SL_sciEnableLoopback 函数、此函数确实将  SCIGCR1寄存器的位16设置为1、但在自检完成后忘记将其复位为0。

与 HalCoGen (v4.07.01)生成的 SCI 模块进行比较、这个sciEnableLoopback函数不使用  SCIGCR1寄存器的位16。

我现在的问题是、哪种实现是正确的、即  在 SCI 接口上运行环回测试时是否需要设置 SCIGCR1寄存器的位16? 如果有、为什么 SDL 实施在运行自检后不会重置位?

感谢您的澄清。

此致、

亚伦

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

    大家好、Aaron

    我已开始处理您的问题、并将尽快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    大家好、Aaron

    首先,对我的答复拖延表示歉意。 感谢您的耐心等待。

    两者都是不同的环回。

    我的意思是、使用 SCIGCR1的第16位(环回) 的环回不同于使用 IODFTCTRL 寄存器的环回(IODFTENA & LPB ENA)。 这意味着两者都是独立的   环回、您可以使用 SCIGCR1的第16位执行环回(环回)、也可以使用 IODFTCTRL 寄存器执行环回。

    主要区别在于使用第16位 SCIGCR1的环回类似于安全环回。 这意味着、即使 SCI 与其他 SCI 器件连接、也可以在不影响实际通信的情况下完成此回送。

    使用 SCIGCR1的第16位的环回:

    在此环回中、SCITX 内部通过 SCIRX 连接、但外部 SCITX 引脚将处于逻辑高电平、SCIRX 将处于开路阻抗、直到该环回再次禁用。

    因此、在该环回测试完成之前、另一端 SCI 器件接收引脚将只读取逻辑高电平。 其他终端设备无法向该设备发送任何数据、因为其 SCIRX 引脚处于高阻抗模式。

    使用 IODFTCTRL 环回:

    此环回进一步分为两个子环回:

    数字环回和模拟环回。

    这两个环回 模式之间的主要区别在于、模拟环回模式下可测试通过 I/O 的完整通信路径、而在数字环回模式下、I/O 缓冲器不包括在此路径中。 这意味着在数字环回中、将禁用 I/O 缓冲器、因此不会向输出或 Tx 线路传输数据。 而在模拟环回中、将测试完整路径、因此也可以在 Tx 线路上看到数据、并且此数据会自动环回到 Rx 线路。

     建议仅在连接到其他 SCI 器件之前执行此环回。 我的意思是、在通信过程中不鼓励进行此类回送。 因为尤其是 此测试中的模拟环回模式会受到 另一个 器件的影响或也会影响另一个器件。 我的意思是环回测试数据会传递到另一个 SCI 器件、否则环回数据会受其他终端 SCI 器件的影响。

    --
    谢谢。此致、
    Jagadish。

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

    大家好、Aaron

    为了便于您理解、我使用不同的组合进行了一些测试、结果如下:

    1.仅启用 IODFTCTRL 模拟环回:

    正如您在上面的代码中所看到的、我刚刚禁用了 SCIGCR1环回、并且只启用了 IODFTCTRL 模拟环回。

    在此测试中、我可以看到 RD 寄存器中的数据、这意味着数据被回送、而且我还在串行终端上接收到数据、这意味着在此模式下 I/O 缓冲区未被禁用。

    2.  仅启用 IODFTCTRL 数字环回:

    如上面的代码所示、我刚刚禁用了 SCIGCR1环回、而只启用了 IODFTCTRL 数字环回。

    在此测试中、我 可以 看到 RD 寄存器中的数据、这意味着数据被回送 、但 我没有在串行终端上接收到任何数据、这意味着 I/O 缓冲区被禁用、回送仅发生在内部。

    3.  仅使用 SCIGCR1的第16位进行环回:

    如上面的代码所示、我刚刚 启用了 SCIGCR1环回并 禁用了 IODFTCTRL 环回。

    在此测试中、我还 可以 看到 RD 寄存器中的数据、这意味着数据被  回送、但我没有在串行终端上收到任何数据、这意味着此回送也发生在内部。 该环回与数字环回之间的主要区别在于、在该环回中、Tx 引脚输出将变为高电平、Rx 引脚将处于开漏状态、这不会发生在数字环回中、在数字环回中、只有 I/O 缓冲器将被禁用。

    3、 使用第16位 SCIGCR1和 IODFTCTRL 模拟环回的环回:

    正如您在上面的代码中看到 的、我启用了 SCIGCR1环回以及   IODFTCTRL 模拟环回。

    在此测试中、我还 可以 看到 RD 寄存器中的数据、这意味着数据被回送 、但 在串行终端上没有接收到任何数据。 这与 SCIGCR1环回的行为类似、因为该环回将在内部连接 Tx 和 Rx 引脚、Tx 引脚将处于高电平、Rx 引脚将处于高阻抗状态。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    感谢您的详尽解释、这对我来说很合理!

    此致、

    亚伦