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.

[参考译文] MSPM0L1105:访问闪存组的最后8个字节

Guru**** 1789960 points
Other Parts Discussed in Thread: MSPM0G1107, MSPM0G1505, MSPM0G1506, MSPM0G3505, MSPM0L1228, MSPM0L2227, MSPM0L1105, MSPM0G1105, MSPM0G1106, MSPM0G1507, MSPM0G3105, MSPM0G3106, MSPM0G3107, MSPM0G3506, MSPM0G3507, MSPM0L1227, MSPM0L2228
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1400560/mspm0l1105-access-to-last-8-bytes-of-flash-bank

器件型号:MSPM0L1105
主题中讨论的其他器件: MSPM0G1105MSPM0G1106、MSPM0G1107 、MSPM0G1505 、MSPM0G1506、 MSPM0G1507MSPM0G3105MSPM0G3106MSPM0G3107、MSPM0G3505 MSPM0G3506MSPM0G3507MSPM0L1227、MSPM0L1228 、MSPM0L2227 MSPM0L2228

工具与软件:

MSPM0L1105的数据表指出:

CPU 访问闪存区域最后8个字节之一将导致硬故障。 这是因为预取逻辑会尝试提前读取一个闪存字(64位)、导致对无效存储器位置的读取尝试。

这是否只涉及指令访问、或者这是否也适用于数据访问? 数据访问是否具有预取逻辑、会导致 CPU 读取的数据多于所请求的数据?

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

    尊敬的 Gavin:

    应仅适用于预取指令、而不适用于数据。

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

    谢谢 Dennis。 这是否意味着只要最后8个字节(0x7FF8 - 0x8000)包含数据而不是代码、我就可以使用整个32 KiB 闪存区域(0x0 - 0x8000)?

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

    尊敬的 Gavin:

    此问题是在-> E2E 链接之前提出的。  我做了一些进一步的研究,显然最后8个字节是无法访问的读取或写入操作,所以不能用于数据存储。

    抱歉混淆。

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

    明白了、谢谢。 我无法查看 E2E 链接、因为它似乎是指我无法访问的内部网站。

    我检查了 SDK 中包含的链接器文件、看起来某些链接器文件考虑到了此限制、但以下部分的链接器文件没有考虑在内、应该更新:

    • mspm0g1105.
    • mspm0g1106.
    • mspm0g1107.
    • MSPM0g1505
    • MSPM0g1506
    • MSPM0g1507
    • mspm0g3105
    • mspm0g3106
    • mspm0g3107
    • MSPM0g3505
    • MSPM0g3506
    • MSPM0g3507
    • mspm0l1227
    • mspm0l1228
    • mspm0l2227
    • mspm0l2228
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gavin:

    非常感谢您检查所有这些链接器脚本。  我会通知 SW 团队跟进。

    我重新复制并重新粘贴了指向 E2E 论坛帖子的链接(不是内部链接)、但实际上显示了检查数据表。  通过查看 MSPM01105产品说明书、我会看到内存分配不使用最后8个字节。

    查看其他系列的数据表(G350x、G310x、G110x、L130x、L110x 等)、我看到它们也与上面相同。

    现在、我与我们的一位设计工程师交谈、询问了为什么会有这种情况。 他说 MSPM0闪存(实际上是 ARM 惯例)地址是字对齐的(64位或8字节)、因此从技术角度而言是0x...FFF8是最后的可寻址位置。  是的、某些链接器脚本尚未更新以反映这一点、因此感谢您指出这一点。

    现在、根据 MSPM0L 系列 TRM 第6.3节、闪存按64位(8字节)边界对齐、但似乎可以对32位、16位甚至8位进行编程、但需要借助 NVM 控制器进行一些闪存编程。  因此、如果尝试使用闪存进行字节数据存储、这是可行的。

    这有什么帮助吗?

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

    谢谢。 我只是对两者之间的差异很好奇、因为尽管 MSPM0C110x 具有相同的 Cortex-M0+内核且大概具有相同的预取逻辑、但似乎没有该限制。

    还有一个问题:我们也在考虑 MSPM0L1228、它在每个闪存存储体的末尾似乎具有相同的限制:

    这意味着、如果我们要将整个双存储体闪存用作单个存储体、闪存中间可能存在一个8字节不可用的"空洞"、我们必须加以考虑并加以避免。 尽管我猜、如果预取是原因、那么在这种情况下它应该有效、因为它只会预取第二个库的开头。 如果我们能对此做出一些澄清、我将不胜感激。

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

    尊敬的 Gavin:

    对于 MSPM0C、预取机制已被移除(降低成本)、因此它不存在这种限制。  关于双组、是的、您是正确的。