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的数据表指出:
CPU 访问闪存区域最后8个字节之一将导致硬故障。 这是因为预取逻辑会尝试提前读取一个闪存字(64位)、导致对无效存储器位置的读取尝试。
这是否只涉及指令访问、或者这是否也适用于数据访问? 数据访问是否具有预取逻辑、会导致 CPU 读取的数据多于所请求的数据?
尊敬的 Gavin:
应仅适用于预取指令、而不适用于数据。
谢谢 Dennis。 这是否意味着只要最后8个字节(0x7FF8 - 0x8000)包含数据而不是代码、我就可以使用整个32 KiB 闪存区域(0x0 - 0x8000)?
尊敬的 Gavin:
此问题是在-> E2E 链接之前提出的。 我做了一些进一步的研究,显然最后8个字节是无法访问的读取或写入操作,所以不能用于数据存储。
抱歉混淆。
明白了、谢谢。 我无法查看 E2E 链接、因为它似乎是指我无法访问的内部网站。
我检查了 SDK 中包含的链接器文件、看起来某些链接器文件考虑到了此限制、但以下部分的链接器文件没有考虑在内、应该更新:
尊敬的 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、预取机制已被移除(降低成本)、因此它不存在这种限制。 关于双组、是的、您是正确的。