请选择 进入手机版 | 继续访问电脑版
查看: 2062|回复: 1

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

[复制链接]

该用户从未签到

648

主题

6301

帖子

0

超级版主

Rank: 8Rank: 8

积分
19539
最后登录
2024-3-28
发表于 2020-2-3 18:31:12 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2020-2-3 22:07 编辑

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

LPC55xx系列MCUXpresso SDK使用FLASH API来实现FLASH驱动。 一些用户在执行如下FLASH写操作时可能会遇到如下的问题:
status =FLASH_Program(&flashInstance, destAdrss, (uint8_t *)s_bufferFF, 8);
执行完上述代码后,对应的地址区间数据没有变化,写入失败,返回错误代码101,如下图所示,
01.jpg

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

02.jpg

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

status_tFLASH_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部分找到它,如下图所示。
3.jpg









回复

使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1334 天

    [LV.10]以坛为家III

    88

    主题

    4290

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9020
    最后登录
    2024-3-28
    发表于 2020-10-14 17:16:46 | 显示全部楼层
    这个按页写入也是有些浪费。
    在友商的某32的MCU下,当擦除完毕后,可以按word写入。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-3-28 17:47 , Processed in 0.127750 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表