Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Kyo
Level 1
Level 1
5 replies posted First reply posted First question asked

你好,我想确认一下,在CM4内核上是否可以执行SRAM中的一段Flash驱动程序?

我遇到一个现象是,当SRAM中的Flash操作相关(Write)的程序运行时,如果ROM中的程序(CAN或者1ms cycle Reload Timer)的中断处理发生,那么会产生Hard Fault。回溯Hard Fault发生的位置,发现像是在ROM中的中断处理函数里发生的Fault的样子。

即使调低ROM中的程序的中断优先级到7,也不好用。但是如果把ReloadTimer停掉,即关闭掉Timer的中断那SRAM中的程序就会好用,并且没有Hard Fault。

期待您的回答,谢谢!

0 Likes
1 Solution
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

CM4是可以执行Flash操作的。

这个问题有可能是同时操作了同一个logic bank,也有可能flash操作中断被打断,一般会有两个建议,

1. 调整IRQ0/1的优先级到0(默认为1),调整其它中断优先级为2以上

2. 把中断,flash操作都放到SRAM去执行,参考下图

Jimmy_L_0-1706519017906.png

 

View solution in original post

0 Likes
4 Replies
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

CM4是可以执行Flash操作的。

这个问题有可能是同时操作了同一个logic bank,也有可能flash操作中断被打断,一般会有两个建议,

1. 调整IRQ0/1的优先级到0(默认为1),调整其它中断优先级为2以上

2. 把中断,flash操作都放到SRAM去执行,参考下图

Jimmy_L_0-1706519017906.png

 

0 Likes
Kyo
Level 1
Level 1
5 replies posted First reply posted First question asked

感谢您的回复。

>“这个问题有可能是同时操作了同一个logic bank”

您说的logic bank是指 Logical Bank 0,Logical Bank 1的意思吗?

我们现在的程序结构是FBL(在ROM上运行的BootLoader,有CAN收发数据和Timer计时,及其中断处理函数)和SBL(在SRAM上运行的Flash驱动函数)分为两个不同的IAR工程。 Flash写操作的目标地址 和 中断处理函数所在的地址区域应该都是在Singe Bank Mode下的Logical Bank 0。

这样会出问题是吗?我不太记得在哪本TRM中看到的Traveo芯片是支持同bank下的Flash操作的。。。可能是记错了吧。

那请问我这种软件结构不变的前提下,应该如何配置和回避这个问题?比如,拷贝一份FBL中的中断向量表和对应的中断处理函数,到SBL工程中吗?需要在Flash操作前做切换FBL和SBL的中断向量表的操作吗,怎么切换?

 

0 Likes
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

在single bank底下实际上它也存在不同的logic分区,以下图为例

Jimmy_L_0-1706578653143.png

code flash区域两个不同的颜色代表不同的logic bank,如果是在同一个logic bank同时进行读写操作是会出现错误的。

如果您说的FBL指的是CM0上的操作,SBL指的是CM4的操作,而flash driver指的是读写flash的函数,那么是建议您把CAN和计时的中断都放到SRAM,参考之前回答的第二种方法来做。

如果您说的是OTA的操作的话,那还请您参考

AN220242 - Flash accessing procedure for TRAVEO T2G family

AN229058 - Secured firmware over-the-air _FOTA_ update in TRAVEO T2G MCU

0 Likes
Kyo
Level 1
Level 1
5 replies posted First reply posted First question asked

感谢您的回复。我明白了。

>"如果您说的FBL指的是CM0上的操作,SBL指的是CM4的操作,而flash driver指的是读写flash的函数"

基本上和您的理解是一样的除了一点,我这边 FBL也是指的是CM4上的操作。

0 Likes