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.

[参考译文] *** 。

Guru**** 2540460 points
Other Parts Discussed in Thread: MSPM0G3519, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1538874/thread

部件号:部件号:*** >
Thread 中讨论的其他器件:MSPM0G3519UNIFLASH

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

    你(们)好 任何更新

    ?  

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

    大家好、Mehul、我认为您必须在上周的 E2E 停机时间内提交了一个问题。 这是我从我这边看到的全部内容:  

    请您重复一遍您的问题吗?

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

    您好 Brian、感谢此更新、我也感到困惑、我的问题在哪里Thinking

    我现在负责 MSPm0g3519 控制器。 我做了如下一些实现。 我正在将固件.bin 上传到 bank1 的地址 0x48800。 然后、我的引导加载程序代码只需将.bin 从组 1 复制到地址 0x8800 处的组 0。 然后调用 start_app() 函数并传递地址 0x8800。 但复制的映像没有执行。 但如果我从 uniflash 上载相同的.bin、则不会将映像从 bank1 复制到 bank0、而是会生效并被执行。  

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

    好的,所以如果我理解正确,你正在将你的主代码复制到第二个内存库中,但运行 start_app () 导致程序跳过第一个内存库并直接转到第二个内存库? 对于编译器工程、您的优化级别是什么? 如果它适用于一个程序、而不适用于另一个程序、则您的优化可能太高、导致某些功能丢失。

    -布赖恩

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

    您好、Brian、

    不确定。 您从哪个存储体执行/运行映像具有讽刺意味。 如果该映像直接从 uniflash 上载、则会运行、但如果我从 另一个闪存区域复制该映像、则不会执行复制的映像。  

    要了解我的问题,你可以检查这在你的结束.  

    步骤 1. 在 bank1 中加载应用映像  

    第 2 步: 将图像从闪存组 1 复制到闪存组 0

    第 3 步: 将 bank0 复制的图像地址提供给 start_app() 函数。

    注意:我修改了仅复制处理映像复制的映像并调用 start_app () 函数的 CSC。   

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

    好的、我会尝试在我这边复制它、看看我能不能告诉您这种情况可能发生的原因。 会让您保持最新。

    -布赖恩

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

    嗨、Brian、有任何更新吗?

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

    有任何与此相关的内容? 这可以帮助我进一步了解。

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

    嗯,在双存储体器件中,一次只能读取 — 执行一个存储体,并且一次只能写入-擦除一个存储体。 听起来并不像 您正在运行的内容、但 具体取决于您修改代码的方式。 比如它仍然是银行交换吗?  当您说图像“未执行“时。 设备是否挂起? 它是否复位? 是硬故障吗?

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

    调试后、看起来闪存的读写分辨率会产生问题。 数据从 bank1 正确复制到 bank0、但我使用解决方案来写入产生问题的数据。

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

    您能否改变这一点、看看是否仍然看到相同的行为?

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

    你要我做什么?“侯龙涛一把拉住她的手,拉住她的手。 是关于粒度吗? 向闪存读写数据的读写分辨率是多少?  

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

    尊敬的 Mehul、所有闪存操作都需要 8 字节对齐、否则会产生硬故障。 如果您 没有它的处理程序、它将跳转到默认处理程序并导致器件挂起。 技术参考手册中的第 7.3.3.3 节对此进行了详细说明。 目前、我们没有多字可编程性。 我希望这对您有所帮助!

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

    嗨 Brian 我也得到了硬故障,但不是在写入闪存。 我的写入操作可以正常工作、并且所有数据都被复制到目标地址。 我已提取复制的图像并与原始图像进行比较。 但复制后、当我在跳转时将矢量表地址分配给复制的图像地址/目标地址时、它将进入硬故障。

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

    您的意思是读写和擦除吗?  您是否有一些示例可以帮助我更好地理解这一点?

    所有闪存操作都需要 8 字节对齐、否则会导致硬故障
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、让我尝试给您举一个例子、很快就会回复。

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

    是的,这将有助于作为它的迫切需要。

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

    嗨、Brian。 您得到了一些相关信息吗?

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

    您好 Brian、有任何更新吗?  

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

    嗨、Mehul、如果进入 CCS 并查看“View"下“下的存储器、您是否在运行命令时看到了正确指向向量表的指针?  听起来您尝试 访问无效位置和/或引导表不在您跳转到的位置时遇到了严重错误。

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

    嗨、Brian  

    请参阅此图片。 正如我提到的、我的引导加载程序代码(网址为 0x0000)仅将映像从闪存存储体 1(地址 0x48800)复制到存储体 0

    (0x8800)。 并调用 start_app 函数并将地址 0x8800 传递给该函数。  

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

    您  根本没有到达您的申请? 如果您查看  复位矢量指向的位置、您会看到正确的数据?

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

    当代码尝试执行突出显示的部分时、会遇到硬故障。

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

    复制后、务必重置处理程序和向量表的所有其他内容未正确设置。 但正如我所说,我检查复制的图像与原始图像和它的完全副本。 所以不明白为什么矢量表内容,重置处理程序没有正确设置。

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

    嗨、Brian。 是否有任何进展?  

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

    您好 Brian、您有时间对此进行研究吗?

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

    嘿,对不起的延迟,我正在查看这个,将很快跟进..

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

    嗨、Brian。 您在结束时检查了吗? 只需检查是否可以执行复制的映像? 我需要进行哪些更改?

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

    嗨、Mehul、  

    我想我可以很快使用 3000 英尺的概览。  

    因此、好像您使用的是 CSC 示例集。 您是否从提供的示例开始、其中引导加载程序是组 0 上映像的一部分? 您是否 已经具备所提供示例按预期工作的起点?  

    如果是、您是否对此映像使用加密?

    上载映像的.bin 时、您是否使用未加密的签名版本?  

    为什么有一个副本从 bank1-bank0 而不是使用 bankswap 功能来选择选项,而不必执行副本? CSC 示例中是否已禁用 bankswap 功能? 您是否保留了写入/执行排除保护? 如果未禁用 bankswap、您是否在两个存储体之间镜像了 CSC?  

    当你很难犯错时,你有一个根本原因的想法吗? 是在发出 INITDONE 之后、在期间还是之前?  

    您使用的优化级别是什么? O0? 如果是、可能需要使用 O2。 有时、在跳转期间 O0 可能太字面量、并在两者之间添加额外的“存储到栈“指令、使栈指针赋值失败。 不建议使用 O0

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

    您好 Jackson、感谢您的答复。  

    现在、让我告诉您我要在这里做什么。 我已经获取了 CSC 代码、但我更改了主函数、只评论了执行映像验证解密等的代码。 现在我有的 CSC 只有系统初始化函数、然后我创建了一个函数、将映像从组 1 复制到组 0。 然后、复制完成后、我提供了组 0 地址、我在该地址中将映像复制到 start_app () 函数。 此实验是为了了解是否可以将完整的映像从一个存储体复制到另一个存储体、以及复制的映像应该如何正确执行。   正在复制我从闪存组 1 中的闪存加载的映像。 该映像是未签名的未加密.bin。  我在 start_app () 函数中遇到了严重故障。 图片我已分享以上回复、请检查。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的优化级别是什么? O0? 如果是、可能需要使用 O2。 有时、在跳转期间 O0 可能太字面量、并在两者之间添加额外的“存储到栈“指令、使栈指针赋值失败。 不建议使用 O0

    我想我的问题是由于可弯曲错位,因为我想你在这里提到.

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

    如果为 0x800 偏移、vtable 似乎不会错位。 没关系。 我更担心的是、您正在使用 O0、您正在更改堆栈、然后 O0 设置将在您更改堆栈指针后尝试从头开始加载复位处理程序。 这就是为什么优化级别 2 (O2) 在这里很重要的原因。  

    反汇编看起来是否像在执行堆栈更改后尝试访问堆栈一样  

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

    好的、从您所描述的内容来看、我认为如果 initdone 尚未发布、并且在引导重置后会发生这种情况、那应该是可能的、但是我强烈建议在生产环境中不要这样做。 如果您尝试管理两个映像、最佳选项是就地执行 (XIP) 或使用 bankswap 功能。 bankswap 功能的发明部分是为了回滚保护,并包括一个有效的备份映像,在这种情况下,它将被卷绕。 即使在交换后、也始终可以将内容复制到存储器区域 0x48800。  

    我认为您看到的硬故障可能是由于未进行优化。  

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

    将优化更改为 2 但与我面临的问题相同、以进行测试。

    以下是客户安全代码中的主函数。 客户安全代码位于 0x0000 地址。

    出现硬故障后注册。

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

    大家对最后一条消息有什么评论吗?

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

    这看起来好像您还没有遇到硬故障、您的 PSR 没有显示异常

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

    您的映像中是否定义了重置处理程序? 重置处理程序指向何处?  

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

    重置处理程序。

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

    如何检查我的重置处理程序在跳转前后的指向位置?

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

    在初始化之前、这里发生了什么 print_buffer? 注释掉该行是否可以使此工作?  

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

    您将读取 SCB->VTOR 地址并检查其设置位置、重置处理程序位于偏移 0x04 处

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

    即使删除此打印后、也没有任何变化。 添加了该函数来检查代码是否到达 heare。

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

    这将是可能的,你在你的结束演示这一点. 我的意思是,每当我从引导加载程序调用 start_app () 函数 ,并传递要引导的映像位置的地址。 则应跳转到该位置。 在跳转之前、我是否需要执行任何显式设置或调用任何函数?

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

    在库存 CSC 示例中进行了此演示。 我仍然不是完全相信你遇到了一个硬的错误,虽然.  

    在向量表中、您能否看到填充的地址 0x1C465 对应于放置复位处理程序的.map 文件? 我觉得奇怪的是,我不确定你的 VTOR 是否得到正确的更新。 是否具有正确的地址 (0xE000ED08)? 可以在存储器浏览器中看到它发生了变化吗?