2138161_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2138161_zh-CN

2138161_zh-CN

S32K341 - S32DS3.6.2 和 RTD6.0.0 上的 Mem_43_INFLS 问题

亲爱的恩智浦支持/恩智浦专家,
我正在为 S32K341 处理器开发引导加载程序。

我从一个示例 (Mem_InFls_Example_S32K344) 开始。

首先,我修改了 memap 文件,以便将 pflash 工作所涉及的所有功能都放在 RAM 中,而且成功了,但我想使用原始生成的文件(c40 文件除外,根据我的理解,有必要更改该文件的 pragma 声明)。

因此,我启用了 "任务启动时记忆加载访问代码 "功能

il_ciancio_0-1753171185572.pngil_ciancio_0-1753171185572.png

擦除和写入地址位于内存区的末端

  • int_sram :ORIGIN = 0x20400000,LENGTH = 0x00007F00。

1) 是这样吗?还是我必须把这些指针放在其他区域?

下面是地图文件中的公羊代码部分:

il_ciancio_1-1753171422314.pngil_ciancio_1-1753171422314.png


2) 我是否遗漏了某些功能?

问题是一个硬故障处理程序,它从

  • 0x40d2e5: b.n 0x40d300
  • 0x40d3f3: b.n 0x40d40e

基本上靠近"跳转" 到闪存驱动器。

il_ciancio_3-1753171549471.pngil_ciancio_3-1753171549471.png


3) 有什么想法吗?

我有点被困住了。


非常感谢、

Ciancio



Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0

你好,@il_ciancio

很高兴听到它有所帮助

出现这个问题可能是因为内核将数据写入了 SRAM,而 SRAM 会受到数据缓存的影响,如果内核读取数据,就不会出现问题。然而,当内核试图从同一内存区域执行代码时,它需要依赖指令缓存。 如果指令缓存未正确失效或更新,则内核最终可能会获取未初始化的指令——在 LSB 处执行 0x00 字节而不是使用 0x1 的实际代码。


此致,

丹尼尔




Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0
  1. 移除 MPU_ENABLE:这一解决方案不起作用,但 sram 区域是可缓存的,也许我必须尝试使用无缓存区域。
  2. 加载访问代码后启用内存清洁缓存:使用此解决方案和相同的指针以及 MPU_ENABLE,代码可以正常工作!你明白了吧,干得好,非常感谢!

关于拇指地址,我有点困惑,因为宏MEM_43_INFLS_AC_CALL 是用 ARM_FAR_CALL2THUMB_CODE_BIT0_U32 编译的,所以跳转本身应该有效。也许闪存驱动程序内部存在这个问题?

顺便说一下,正如我所写的,启用缓存后,代码就能正常工作了。

如果您对MEM_43_INFLS_AC_CALL有其他意见,我将等待您的回复,然后关闭该邮件。


非常感谢,再次感谢您的出色工作!


Ciancio

Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0

1. 转到项目属性,删除此符号。

danielmartynek_0-1753192518255.pngdanielmartynek_0-1753192518255.png

2。这个 INVSTATE 故障是由分支到非缩略地址引起的-缩略图地址的最低有效位设置为 1。这有可能是缓存造成的--核心会分支到缓存中的任何内容。


此致,

丹尼尔

 


Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0

我会尝试两种方法,只是有些问题:

  1. 有没有禁用 MPU 的 api?
  2. 这也可能是高速缓存(由 MPU 管理)造成的。->只是为了让我了解微观,您是如何得出这个结论的?你对这个错误有任何参考吗?

非常感谢,干得漂亮!

Ciancio

Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0

这也可能是高速缓存(由 MPU 管理)造成的。

可以在启动代码中禁用 MPU,这样就可以轻松进行测试。

不过,你可以启用下面的选项来清理缓存。

danielmartynek_0-1753191322052.pngdanielmartynek_0-1753191322052.png


Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0

这与此有关:

il_ciancio_0-1753189857242.pngil_ciancio_0-1753189857242.png

il_ciancio_1-1753189870001.pngil_ciancio_1-1753189870001.png.


查找存储在内存中的数据,从硬盘故障开始(Mem_43_INFLS_IPW_Erase 中的 MEM_43_INFLS_AC_CALL)

IR 指令:

0x40dc05: b.n 0x40dc20


非常感谢。

Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0

你好,@il_ciancio

在故障处理程序中,读取可配置故障状态寄存器 (CFSR) 以确定故障原因。
有关详细信息,请参阅 ARM 官方文档:
https://developer.arm.com/documentation/dui0646/c/Cortex-M7-Peripherals/System-control-block/Configu...

如果将故障确定为 MemManage 故障,则检查地址为 0x20407E00 的内存区域的内存保护单元 (MPU) 配置。


Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0

感谢您的回复。

这就是我的配置,通过调试器,我可以在 RAM 区域看到访问代码已加载。应用程序不使用擦除/写入指针。

il_ciancio_0-1753187073096.pngil_ciancio_0-1753187073096.png

我能检查什么?

谢谢!

Re: S32K341 - Issue with Mem_43_INFLS on S32DS3.6.2 and RTD6.0.0

你好,@il_ciancio

我刚刚用默认的 Mem_InFls_Example_S32K344 示例进行了测试。

我把扇区改为 BLOCK_0 扇区。

#define EXAMPLE_SECTOR_START_ADDR (0x004F0000U)

danielmartynek_0-1753177378036.pngdanielmartynek_0-1753177378036.png

我发现这些 SRAM 位置未被应用程序使用,因此就使用了它们:

danielmartynek_1-1753177385883.pngdanielmartynek_1-1753177385883.png

代码被复制到这里:

danielmartynek_2-1753177391938.pngdanielmartynek_2-1753177391938.png

该示例如预期般正常工作。

你能在你那边测试一下吗?

谢谢、


此致,

丹尼尔

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 06:22 PM
Updated by: