公告

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

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

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我要求提供有关以下例程的一些细节,即擦除片上闪存的扇区。

 

int eraseSector(无符号长 adr){

M32 (flash_noCache + 0x5554) = 0xF5;//开始清除状态命令

M32 (flash_noCache + 0x5554) = 0xAA;//开始方块擦除命令

M32 (flash_noCache + 0xAAA8) = 0x55;

M32 (flash_noCache + 0x5554) = 0x80;

M32 (flash_noCache + 0x5554) = 0xAA;

M32 (flash_noCache + 0xAAA8) = 0x55;

M32 (adr | FLASH_OFFS) = 0x30;//擦除逻辑扇区

同时 (FLASH0-> FSR & FSR_PBUSY);//等到擦除完成

if (FLASH0-> FSR & FSR_ERR) {//检查错误

返回 (1);//失败

}

返回 0;

}

 

我猜从指令 " M32 (adr | FLASH_OFFS) = 0x30 开始,"在擦除完成之前,不可能再从片上闪存中执行读取。

无论如何,CPU CAN 执行指令“while (FLASH0->FSR & FSR_PBUSY)”,因为该指令的获取是从闪存缓存中执行的。 不是吗?

在闪存擦除期间,我们应该避免执行固件的其他部分,以避免缓存丢失。 我猜,如果我在扇区擦除期间尝试执行另一个线程,可能会发生闪存失误,无法从闪存中获取,从而导致执行卡住。

你能确认一下这些说法吗?

谢谢,

问候

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

嗨,

假设所有内存都缓存在缓存区域并且您正在执行闪存擦除,则不会发生缓存丢失。 闪存擦除将始终在非缓存内存上完成。

但是,如果你在闪存进入闪存缓存之前执行闪存擦除,那么你将无法执行缓存错过操作,这将是至关重要的。 在这种情况下,您需要重新编程闪存并重新启动主板以使新固件生效。

希望我能回答你的问题。

谢谢

Sujata

谢谢

sujata

 

希望我能消除你的疑虑。

谢谢

Sujata

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我只是想看看你是否收到了我之前的回复。 我们 CAN 做些什么来更好地帮助您处理您的请求?

谢谢,

sujata

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 Sujata,

恐怕我错过了你的第一个回复。

我认为目前已经足够了。

 

问候

0 点赞