公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

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

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

亲爱的先生,

我尝试读取闪存,并定义宏内存(地址)来读取闪存。

#define MEM(地址)* ((uint32 *)(地址))

aa = MEM (0xa0008000);bb=aa

但是不能读取任何闪存地址。 示例:可以读取 0xa0004000,但是当读取 0xa0008000 时,会出现如下错误。

您对闪存访问有任何建议或应用说明吗?

seanwu_0-1699260178895.png

谢谢。

BR,

SeanWu

 

 

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

https://github.com/Infineon/AURIX_code_examples/blob/master/code_examples/Flash_Programming_1_KIT_TC...

https://www.infineon.com/dgdl/Infineon-AURIX_Flash_Programming_1_KIT_TC297_TFT-Training-v01_01-EN.pd...

您可以参考提供的演示代码来擦除和写入程序闪存。该代码包含的定义 PFLASH_STARTING_ADDRESS,它指定了写入数据的程序闪存的起始地址。您可以修改此代码以满足您的特定要求和目的。

 

 

#define PFLASH_STARTING_ADDRESS     0xA00E0000                  /* Address of the PFLASH where the data is written  */

 

 

 

在原帖中查看解决方案

0 点赞
4 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

它是 4 级,使用识别码 2,你可以观看 “TrapInfo” 来获取有关陷阱的信息。

在我的代码中,你可以找到以下地址,地址' a00f0000 '对应960千字节,没关系,没有陷阱,但是地址' a0300300 '对应3MB,它会触发陷阱。

#define MEM(address)       *((uint32 *)(address))
int aa,bb,c;
void core0_main(void)
{
    aa = MEM(0xa00f0000 );
    bb=aa;
    if(bb>1)bb=1;
    aa = MEM(0xa0300300 );
    bb=aa;
    if(bb>1)bb=1;
...
}
因此,请检查您的.lsl 链接器文件,例如,我的.lsl 文件定义 3M 是用于 pfls0 的。 所以我无法访问 0xa0300300 地址。

memory pfls0
{
mau = 8;
size = 3M;
type = rom;
map cached (dest=bus:sri, dest_offset=0x80000000, size=3M);
map not_cached (dest=bus:sri, dest_offset=0xa0000000, reserved, size=3M);
}

memory pfls1
{
mau = 8;
size = 3M;
type = rom;
map cached (dest=bus:sri, dest_offset=0x80300000, size=3M);
map not_cached (dest=bus:sri, dest_offset=0xa0300000, reserved, size=3M);
}

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

亲爱的先生,

我不确定你的意思。 你能解释一下什么是正确的,什么是错误吗? 或者你能试着做吗?

谢谢。

BR,

肖恩

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

亲爱的先生,

感谢您的回复。

我的 pfls0 大小是 256KB,所以 0xa0008000 在 (0xa0040000) 范围内。

seanwu_2-1699335805156.png

我还发现错误地址是 " Erased flash",如果我在地址中写入数据,就没有错误

 

你有闪存访问的证件吗?

谢谢。

BR,

Sean Wu

 

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

https://github.com/Infineon/AURIX_code_examples/blob/master/code_examples/Flash_Programming_1_KIT_TC...

https://www.infineon.com/dgdl/Infineon-AURIX_Flash_Programming_1_KIT_TC297_TFT-Training-v01_01-EN.pd...

您可以参考提供的演示代码来擦除和写入程序闪存。该代码包含的定义 PFLASH_STARTING_ADDRESS,它指定了写入数据的程序闪存的起始地址。您可以修改此代码以满足您的特定要求和目的。

 

 

#define PFLASH_STARTING_ADDRESS     0xA00E0000                  /* Address of the PFLASH where the data is written  */

 

 

 

0 点赞