1697432_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1697432_zh-CN

1697432_zh-CN

S32K344 C40 IP 硬件故障问题

大家好,

我正在尝试创建自定义启动加载程序。我从闪存开始就为启动程序和参数预留了 256KB 的空间。我需要使用引导加载程序代码将启动参数存储在同一个块上。我尝试使用 C40 ip,但总是出现 HardFault 错误。我从"AN13388-S32K3 Memories Guide" 上了解到,在读取(执行代码)时,我无法写入或擦除同一个块。

我尝试了一些技术,如 ramcode 和 ITCM,但都没有成功。

我不想使用 Data 闪光灯。因为 HSE 固件使用的是全部内容。

正确的做法是什么?有什么例子吗?

Re: S32K344 C40 IP Hardware Fault Problem

你好,@francescovico

请创建一个新主题。

不一定要在 Block1 中,闪存驱动器可以在 SRAM 中。


此致,

丹尼尔

Re: S32K344 C40 IP Hardware Fault Problem

你好,丹尼尔、

我正在开发一个位于代码闪存块 0(从 0x400000 到 0x4FFFFF)的引导加载程序。

在此区块内的任何擦除/写入都会导致硬故障。

只允许擦除/写入代码闪存块 1 或 2 或 3。

我的申请必须位于 1 号楼?

残余代码闪存 0 块丢失了?

敬请期待,弗朗切斯科。

Re: S32K344 C40 IP Hardware Fault Problem

你好@Ali22

当闪存控制器正在对某个数据块中的某些数据进行编程/擦除时,不得访问该数据块。我不知道该如何解释。在 RM 中搜索 RWW 边读边写。


Re: S32K344 C40 IP Hardware Fault Problem

你好,Danielmartynek

"那么,内核不得通过中断访问块。中断必须被屏蔽(PRIMASK = 1),或者矢量表、ISR()函数和 ISR() 访问的数据必须不在块中。" 是什么意思?你的意思是矢量表、ISR()函数和数据不能与 BOOTLOADER 和 APP 放在同一个程序块中,如果是这样的话,矢量表和 ISR() 应该放在哪里,RAM 中吗?

Re: S32K344 C40 IP Hardware Fault Problem

请演示如何将 sampel 代码置于 c40 ip.h 中。


Re: S32K344 C40 IP Hardware Fault Problem

你好@王磊开发

您能为这个问题创建一个新的主题吗?


谢谢!

BR,丹尼尔

Re: S32K344 C40 IP Hardware Fault Problem

我找到了引导程序项目(unified_bootloader_demo_V2.1.exe)。使用 C40_IP 驱动程序还可以运行硬件 Falut。然后使用 uart 进行调试,在擦除和写入状态下查找程序戳(具体是在 C40_Ip_Compare 内的 C40_Ip_SynchronizeCache 函数)。

Re: S32K344 C40 IP Hardware Fault Problem

你好@丹尼尔-马蒂内克

谢谢您的回答。你的解决方案对我很有效。

除了您的解决方案,我还需要编辑这个函数原型。

  • C40_Ip_MainInterfaceHVJobStatus

C40_Ip.c中的静态函数

我以 C40 为例进行了尝试。它工作得很好,但却无法运行我的应用程序。

我删除了 C40_Ip 中"Fls Timeout Supervision Enabled" 中的勾。因为使用了"OsIf_GetElapsed" 函数。

我还需要将使用写入和擦除的函数移到 ramcode 中。

此致,

梅苏特

Re: S32K344 C40 IP Hardware Fault Problem

你好,我是@mesutkilicmak

以下 API 函数必须放入 SRAM (".ramcode)"部分),如下所示。

  • C40_Ip_MainInterfaceSectorErase
  • C40_Ip_MainInterfaceSectorEraseStatus
  • C40_Ip_MainInterfaceWrite
  • C40_Ip_MainInterfaceWriteStatus

然后,内核不得通过中断访问该数据块。中断必须被屏蔽(PRIMASK = 1),或者向量表、ISR() 函数和 ISR() 访问的数据必须不在块中。


C40_Ip.h.

在宣布之前

#if ( 1 == C40_RAM_CODE_ENABLE
/* ram code start */
#define FLS_STOP_SEC_CODE
#include"Fls_MemMap.h"
#define FLS_START_SEC_RAMCODE
#include"Fls_MemMap.h"
#endif

声明之后

#if ( 1 == C40_RAM_CODE_ENABLE )
/* ram code end */
#define FLS_STOP_SEC_RAMCODE
#include"Fls_MemMap.h"
#define FLS_START_SEC_CODE
#include"Fls_MemMap.h"
#endif

如果 #define C40_RAM_CODE_ENABLE 1,上述四个闪存 API 函数就会放在".ramcode 中。"节。


此致,

丹尼尔


タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-21-2025 02:13 AM
更新者: