在线时间4069 小时
UID3441752
注册时间2017-11-21
NXP金币752711
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32040
- 最后登录
- 2024-4-28
|
LPC5500系列flash擦写注意事项
这篇文章为大家介绍LPC5500系列MCU擦写内部Flash时的一些注意事项。
LPC5500系列是NXP推出的基于Arm® Cortex® -M33的全新系列MCU。它的片内Flash与以往老的LPC MCU有较大区别,主要是集成了ECC功能。另外ROM API也较之前的LPC MCU有了很大变化。这篇文章注重介绍一些新手擦写LPC5500系列内部Flash时候容易出现的问题。
页和扇区大小
以下两点是基本事实:
所有LPC5500系列的Flash扇区(Sector)大小为32KB(可一次擦除32KB)。
所有LPC5500系列的Flash页(Page)大小为512字节(一次擦除/编程的最小单位)。
PFR区域
LPC5500系列使用内部Flash最后几页作为PFR(受保护Flash区域)。这片区域存储着一些非常重要的信息(比如芯片的默认配置,与加解密有关的秘钥Key等)。
这片区域不能被当做普通Flash来用,更不能被随意擦除、改写。
PFR区域定义如下(注意,不同型号版本,PFR区域的位置和大小都是不一样的):
由上图可以看出:
1.LPC55S6x/LPC55S2x的PFR区域占用10KB,位于0x0009_D800 ~ 0x0009_FFFF
2.LPC55S1x的PFR区域占用12KB,位于0x0003_D000 ~ 0x0003_FFFF
从这里还可以看出如下事实:
1.对于LPC55S6x/LPC55S2x 256KB/512KB的产品:可用的Flash总大小为256/512KB
2.对于LPC55S6x/LPC55S2x 640KB的产品:可用的Flash总大小为630KB
3.对于LPC55S1x 64KB/128KB的产品:可用的Flash总大小为 64/128KB
4.对于LPC55S1x 256KB的产品,可用的Flash总大小为244KB
编程Flash
LPC5500系列的内部Flash集成了ECC管理功能,包含单比特错误校验和记录功能。
但是这个特点会造成一个问题,就是如果用AHB读方式(比如memcpy)去访问一块被擦除的空Flash, 会造成HardFault。见UM原文:
所以, 在读取Flash内容的时候建议先调用ROM API: Flash_VerifyErase 先确定这个Page是否是全擦除状态,如果是全擦除状态,则数据全部为0xFF,如果不是全擦除状态,则正常AHB读取Flash内容即可。
另外,LPC5500系列要求擦写Flash的时候主频必须<= 100Mhz,而且使用ROM API Flash_Program和Flash_Erase的时候,要求填进去的起始地址和长度必须是Page对齐。这两点需要格外注意。
总结
1.擦写Flash时,必须保证主频一定要<=100Mhz,否则会造成擦写flash失败
2.注意不要误删除PFR区域:尤其是不要调用SectorErase(擦除扇区32KB)直接去擦除最后一个Flash扇区。一旦调用,最后32KB被擦掉,PFR被破坏,MCU变砖。
3.建议使用ROM API去操作flash,这样可以确保不会误擦除PFR,不建议直接使用FLASH控制器的寄存器去擦写Flash。
4.注意对齐问题:ROM API的Flash_Program和Flash_Erase函数的起始地址和长度都必须Page(512B)对齐
5.SDK中的例程:\boards\lpcxpresso55s28\driver_examples\flashiap 提供了非常好的Flash编程范例, 强烈建议参考。
文章出处:恩智浦MCU加油站
|
|