[LPC55xx]: 为什么FLASH写操作总失败

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

[LPC55xx]: 为什么FLASH写操作总失败

[LPC55xx]: 为什么FLASH写操作总失败

LPC55xx系列的MCUXpresso SDK使用FLASH API来实现FLASH驱动。 一些用户在执行如下FLASH写操作时可能会遇到如下的问题:

status = FLASH_Program(&flashInstance, destAdrss, (uint8_t *)s_bufferFF, 8);

 
  ZhangJennie_0-1628234219734.png

 


执行完上述代码后,对应的地址区间数据没有变化,写入失败,返回错误代码101,如下图所示,

错误代码101看上去有点陌生,这在之前的LPC产品中并不常见,我们在用户手册中搜索FLASH driver status code,可以查找到错误代码101为FLASH 对齐操作错误(Alignment Error)。

ZhangJennie_1-1628234219825.png

 

对齐操作错误是什么?我们先来看程序是如何对FLASH_Program函数进行定义的。 FLASH写函数定义如下:

status_t FLASH_Program(flash_config_t *config, uint32_t start, uint32_t *src, uint32_t lengthInBytes);

新用户经常会忽略掉用户手册中对于这个API的介绍“the required start and the lengthInBytes must be page size aligned”,这句话的意思是在执行FLASH_Program函数时,写入的起始地址数据长度必须512字节对齐,所以如果我们把代码

status = FLASH_Program(&flashInstance, destAdrss, (uint8_t *)s_bufferFF, 8);

更正为

status = FLASH_Program(&flashInstance, destAdrss, (uint8_t *)s_bufferFF, 512);

FLASH_Program函数就可以运行成功。

 

请注意:在2.6.x版本的SDK中,FLASH_Program函数的注释将参数的起始地址和数据长度错误的表述为字对齐,2.7.0版本的SDK已经对注释进行了修正。即使你想要操作一个字节,lengthInBytes也是512字节对齐。

 

最后:建议用户在遇到关于FLASH API操作失败的相关问题,一定要查看用户手册中的FLASH驱动状态码,我们可以从UM11126中的第九章节FLASH API部分找到它,如下图所示。

ZhangJennie_2-1628234220108.png

 

No ratings
Version history
Last update:
‎08-06-2021 12:17 AM
Updated by: