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.

[参考译文] RM44L920:PSCON PMA 自检

Guru**** 2502205 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1541807/rm44l920-pscon-pma-self-test

部件号:RM44L920


工具/软件:

您好:

自从上一个问题关闭后、我会在新主题中重新打开此问题、我相信我在解决最初遇到的问题方面已经取得了进展。 现在、我想确认我的逻辑和实现是否有效、以及观察到的行为是否可能导致安全诊断库 (SDL) 中的问题。

调用测试功能之前、模式会更改为用户。

portSWITCH_TO_USER_MODE();
status = SL_SelfTest_PSCON(PSCON_PMA_TEST, TRUE, &failInfoPSCON);

我更改了 SL_SelfTest_PSCON 函数、以便在测试此行之前将 ARM 模式从用户更改为特权、因为只能在特权模式下写入该寄存器。 这解决了我的程序 在没有进展的情况下持续执行测试的问题。

/* Revert to normal operation */
sl_pmmREG->PRCKEYREG = PMM_PRCKEYREG_MKEY_LKSTEP_MODE;

我对 SDL 中的异常处理有其他疑问。 在 safety_library\common\source\exception_handers.c 中、我将 0xFFFF00A0 更改为 0xFFFF00AC、因此 maskDabort 将设置为 true。

 * DAbort due to access to  PMM global control register (sl_pmmREG->GLOBALCTRL1) access in user mode?
     * 0x00000009 indicates that it is an external abort caused by read and is AXI decode error
     * 0xFD000000 is the reserved location accessed to create the L2 interconnect error trap AXI decode error
     */
	if ((TRUE == SL_FLAG_GET(PSCON_PMA_TEST)) &&
		((0x00000800u == (0x0000800u & _SL_Get_DataFault_Status())) &&
		(0xFFFF00A0 == _SL_Get_DataFault_Address()))){
		maskDAbort = TRUE;
	}

这也是一个错误、因为此处的异常处理程序会检查 GLOBALCTRL1 寄存器上是否发生特权模式访问违例、但在测试函数中、我们将使用地址 0xFFFF00AC 写入 PRCKEYREG。

此致、

Ilija.

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

    尊敬的  Ilija:

    为延误道歉!

    我现在正在检查此问题、并将尽快提供我的更新。

    --
    此致、
    Jagadish。

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

    尊敬的  Ilija:

    此测试的主要目的是验证对 PSCON 寄存器的权限访问写入。

    这意味着、如果您尝试在用户模式下向此 PSCON 寄存器写入任何内容、则不应生效。 这正是我们要通过该测试证明的。

    这正是他们提到使用用户模式执行此测试的原因。

    如您所见、正是因为此原因、他们将寄存器值与备用值进行比较、即使他们尝试将寄存器值与其他某个值进行修改。

    这意味着只有在寄存器不允许在用户模式下进行任何修改时、它们才会将此测试声明为 PASS。

    I 更改了 sl_SelfTest_PSCON 函数、因此在执行此行测试之前将 ARM 模式从用户更改为特权、因为只能在特权模式下写入此寄存器。

    您不应该这样做、如果您这样做、该寄存器将获取您的值、我们无法证明我们无法在用户模式下写入该寄存器。

    我们应该证明我们在用户模式下无法写入此寄存器、否则没有必要进行此测试。

    在尝试写入这些寄存器时、您可以在应用中执行此操作、但对于此测试 (PSCON_PMA_TEST)、我们应仅在用户模式下运行它。

    我对 SDL 中的异常处理有其他疑问。 在 safety_library\common\source\exception_handers.c 中、我将 0xFFFF00A0 更改为 0xFFFF00AC、因此 maskDabort 将设置为 true。

    您是对的、这似乎是一个问题、因为他们正在写入 PRCKEYREG、该值应该为 0xFFFF00AC。

    我将检查这一个并再次确认。

    --
    此致、
    Jagadish。

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

    尊敬的 Jagadish:


    我怕你不明白我的问题。 我知道该测试需要如何执行、我可以看到该测试执行了它需要的操作、它尝试写入寄存器并验证备份值是否正确、测试结果是否正确。 ST_PASS

    我了解该器件、但在此行中、当 PSCON 应恢复正常运行模式时、我遇到了问题:

    /* Revert to normal operation */
    sl_pmmREG->PRCKEYREG = PMM_PRCKEYREG_MKEY_LKSTEP_MODE;

    在此行、如果我不首先手动返回、执行将挂起 特权模式 。 通过在执行该写入操作之前显式切换回特权模式、问题得到解决并且测试成功完成。

    我的问题是: 这种行为是预期的、还是 SDL 测试实现中的错误。

    此致、

    Ilija.

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

    尊敬的  Ilija:

    我对拖延的答复深表歉意。

    我了解该部件、但在这一行中、当 PSCON 应返回到正常运行模式时、我遇到了问题:

    很抱歉,我以前不明白,现在我得到了。 您完全正确、在进入正常操作时、我们应进入特权模式。 这是提升到特权模式以使其进入正常操作的意义。

    您是对的、我认为代码中缺少了这个。 我会记下这个问题。 但您所做的是正确的、我们应该在特权 模式下执行此操作。

    感谢您指出这一点。

    --
    此致、
    Jagadish。