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.

[参考译文] RM48L952:保护系统寄存器

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/606231/rm48l952-protecting-the-system-registers

器件型号:RM48L952

您好!

我们需要保护多个位置免受 USR 模式写入的影响。 由于 MPU 只有有限的区域数量(以及有限的双电源配置)、并且操作系统本身已经占用了很多空间、因此我们希望尽可能地将这些空间用于应用代码和 RAM 保护、并在可能的情况下将其他保护机制用于"CPU 寄存器"。

我已经阅读了此主题(以及其他一些主题)和 TRM 第2.3.2.5章: https://e2e.ti.com/support/microcontrollers/hercules/f/312/p/347425/1216363

我知道我可以使用 PCR 模块中的寄存器来保护 PS 和 PCS 芯片选择。 这实际上涵盖了我们所有的常规外设需求、因为我们不需要 EMIF 和以太网保护、这还允许将某些外设保留在直接 USR 模式操作下(只需注意、某些寄存器可能默认受到 USR 写入保护)。

-此 PCR 保护始终触发数据中止、而不仅仅是像某些其他受保护寄存器那样(例如 DMA 寄存器或 SCIGCR0)忽略写入?


我从另一个线程中了解到、系统寄存器 PPC、PPSE 和 PPS (从0xFFF8 0000到0xFFFF FFFF)不能通过 PCR 进行类似保护-默认情况下、此区域中的寄存器通常对 USR 模式写入有限制、但并不是在所有寄存器中。

问题:只有保护该区域的选项是 MPU、但我仅采用1个区域、因为它的长度为0x80000 (2^19)

问题:如果此区域中没有 MPU "默认保护寄存器"、则忽略 USR 模式写入、不触发数据中止(未实现的地址不在范围内)?

由于 EMIF 和以太网超出了基于存储器映射的(我们的)范围、因此重要的一切都可以使用1个 MPU 区域和 PCR 进行保护、以防应用能够保护整个系统外设区域?



这是其他类似 RTI 寄存器可以在 USR 模式下写入的拼写错误或实际功能、而其他类似的不是:RTICPUC0 (TRM 13.3.7)与 RTICPUC1 (TRM 13.3.12)? 尝试对其进行测试、看起来它受到保护、所以它是拼写错误? 从文档中确定在设计应用中真正需要保护的内容时实际受保护的内容和不受保护的内容有点困难/不可能-使用 MPU 保护整个区域可能比尝试寻找未受保护的寄存器是否"无害"更容易、因为 RTICPUC0针对 示例不是"无害的"、需要在我们的应用中提供保护...

此外、无法找到任何地方、仅限 VIM RAM 写入权限、这取决于 TRM 假设不是但无法确定-尝试对其进行测试、看起来它忽略 USR 模式写入、以便对其进行保护? 只是出于好奇、TRM 中的说法是什么?

通过 MPU 或 PCR 违反访问的记录有所不同(基于 TRM 2.3.2.5说明如何使用这些字)、因此导致数据中止的目标地址需要从不同的寄存器中读取(还是"MRC    P15、#0、r0、c6、c0、 #0"与 FAULT_ADDRESS_REG 相同? 如果相同、这些"MRC p16 C6"样式的运算如何映射到特定的外设地址空间?

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

    您好、Jarkko、

    对于您的主要问题、

    [引用用户="Jarkko Silvasti"]

    问题:只有保护该区域的选项是 MPU、但我仅采用1个区域、因为它的长度为0x80000 (2^19)

    问题:如果此区域中没有 MPU "默认保护寄存器"、则忽略 USR 模式写入、不触发数据中止(未实现的地址不在范围内)?

    [/报价]

    答案分别是肯定的和肯定的。 许多系统模块寄存 器都是只写特权模式寄存器、但要100%确定、您需要使用 MPU 来保护可寻址存储器空间的该区域。 第二部分、如果寄存器/位仅为特权模式、则写操作被忽略、不会产生错误。

    我还无法在 TRM 中找到它声明 VIM RAM 受写保护、因此只能在特权模式下写入。 我将输入此问题的文档反馈。

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

    感谢您的回答。 您能不能也为这些提供一些东西。


    1) 1)您能否确认"R/W"只是 RTICPUC0 (TRM 13.3.7)中的一个拼写错误、应该是"R/WP"、正如 RTICPUC1 (TRM 13.3.12)中的那样?

    2)没有寄存器的摘要(特别是0xFFF8 0000之后的摘要)、这些摘要将提供寄存器的概述、例如"W"/"WP"/"R"、而不详细介绍这些寄存器实际包含的内容、 那么、唯一的选择是从 TRM 的不同位置逐个手动搜索每个寄存器? 宁愿仅使用 WP 保护而不是 MPU、但如果检查"为我们提供所有关键寄存器、内置 WP 保护"与看起来的手动工作一样、那么仅使用 MPU 将更容易。

    3)多次读取2.3.2.5中的 TRM 文本后:“CPU 的故障地址寄存器”必须参考协处理器“cp15 C6 c0”,而不是 FAULT_ADDRE_REG-REG-REG-REG-寄存器(FFFFEAF4h),它看起来在 IOMM 下,但也具有完全相同的名称“故障地址寄存器” (为什么我只能通过 pdf 中的"查找"找到这一 个)所以句子中的文本"cpu"是关键部分--> MPU 和 PCR 都将违反的地址报告为"cp15 c6 c0"?

    4) 4)如何将协处理器数据映射到器件的存储器映射? 或者、该调试区域是否存在某种异常、其中协处理器内容被镜像到存储器中? 所有协处理器都有镜像存储器位置吗? (最初、这些问题在我发现第3个案例之前提出、这些案例很可能彼此不是镜子、但不会影响未来的询问)

    我知道 (这个寄存器是给我的) cp14 c0 c1 = DSCR 寄存器=直接 C 样式访问*((uint32_t*)(0xFFA01000U + 0x088U))、所以它在"cortex-R4F Debug"模块名称下被"镜像"(在数据表中) 但无法从 TRM 中找到"DSCR"名称、因此存储器区域很可能根本不属于 TRM 范围、并且很可能在其他地方记录 (在 ARM 文档中描述了 DRC 内容、这不是问题/问题)。

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

    您好、Jarkko、

    [引用 USER="Jarkko Silvasti]1)您能否确认“R/W”只是 RTICPUC0 (TRM 13.3.7)中的一个排印错误,应该是“R/WP”,就像 RTICPUC1 (TRM 13.3.12)中的一样?[/QUERP引号]

    是的、这是一个拼写错误。 我将输入文档反馈、以便在下一个版本中更正此问题。

    [引用用户="Jarkko Silvasti"]2)没有寄存器的摘要(特别是0xFFF8 0000以后的寄存器)、它可以提供寄存器的概述、例如"W"/"WP"/"R"、而不会详细介绍这些寄存器实际包含的内容、 那么、唯一的选择是从 TRM 的不同位置逐个手动搜索每个寄存器? 宁愿仅使用 WP 保护而不是 MPU、但如果检查"为我们提供所有关键寄存器内置 WP 保护"与看起来的手动工作一样、那么仅使用 MPU 将会更容易。[/QUERP]

    遗憾的是、这将是一个手动过程、用于识别所有 R/WP 与 R/W 的寄存器 我们没有任何可用的汇总表或信息。 正如您所说的、如果您有可用的区域、那么使用 MPU 来保护这个空间可能会更快。

    [引用 USER="Jarkko Silvasti]3)在多次读取2.3.2.5中的 TRM 文本后:“CPU 的故障地址寄存器”必须指协处理器“cp15 C6 c0”而不是 FAULT_ADDRE_REG-REG-REG-REG-寄存器(FFFFEAF4h),该寄存器看起来在 IOMM 下,但也具有完全相同的名称“故障地址寄存器” (原因是我在 pdf 中只通过'find'找到这个)所以文本"cpu's" 是句子中的关键部分--> MPU 和 PCR 都将违反的地址报告为"cp15 c6 c0"?

    您的结论是正确的。 CPU 的故障地址寄存器位于 CP15中、而不是 FAULT_ADDRESS_REG-REG-REGISTER (FFFFEAF4h)中。对此表示歉意。

    [引用 user="Jarkko Silvasti"]4)如何将协处理器数据映射到器件的存储器映射? 或者、该调试区域是否存在某种异常、其中协处理器内容被镜像到存储器中? 所有协处理器都有镜像存储器位置吗? (最初这些问题是在我发现第3个案例之前提出的、这些案例很可能彼此不是镜子、但不会影响未来的询问)[/引述]

    协处理器访问使用特殊的 ASM 功能进行访问。 无法通过存储器映射实现轻松的 CPU 访问。 有关访问和操作 CP15的更多信息、请参阅 ARM 信息中心页面上的 ARM Cortex-R4F TRM。

    [引用用户="Jarkko Silvasti"]-我知道(这个寄存器是给我的) cp14 c0 c1 == DSCR 寄存器==直接 C 样式访问*((UINT32_t*)(0xFFA01000U + 0x088U))、所以它在数据表中的"cortex-R4F 调试"模块名称下进行"镜像"(在数据表中) 但无法从 TRM 中找到"DSCR"名称、因此存储器区域很可能根本不属于 TRM 范围、并且很可能在其他地方记录 (在 ARM 文档中描述了 DRC 内容、这不是问题/问题)。[/QUERPLET]

    对于 ARM 特定的知识产权/内容、我们可以参考该信息、但我们将其留给 ARM 配套资料来提供详细信息。 这可以防止我们的文档和 ARM 文档之间的同步问题以及描述方式的不一致。