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

[分享] LPC5500系列的闪存编程技巧

[复制链接]
  • TA的每日心情
    开心
    前天 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3296

    主题

    6541

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31903
    最后登录
    2024-3-28
    发表于 2020-8-28 17:50:03 | 显示全部楼层 |阅读模式
    LPC5500系列的闪存编程技巧
    1引言
    1.1 LPC5500系列简介
    LPC55S00是基于Arm®Cortex®-M33的MCU系列,用于嵌入式应用程序。它具有利用新型ARMv8M的丰富外设集建筑。本文档重点介绍LPC5500的系列闪存操作。
    与旧版LPC零件相比,LPC4300,LPC54000,LPC1800,LPC800,LPC5500使用新的闪存IP并已启用ROM API驱动程序。很多新功能已引入此新系列。同时,它对于新用户来说,操作LPC5500系列的闪存可能有点复杂。本文档旨在消除这些障碍并提供一些有用的提示为用户。
    如果您已经使用过LPC5500系列并且遇到了一些操作上的问题内部闪存,请先转到摘要,以检查是否遵守所有规则和提示在本文档中提到。
    1.2相关的UM章节
    1.第2章:LPC55S6x / LPC55S2x / LPC552x内存映射
    2.第5章:LPC55S6x / LPC55S2x / LPC552x闪存
    3.第9章:LPC55S6x / LPC55S2x / LPC552x Flash API
    4.第10章:LPC55S6x / LPC55S2x / LPC552x受保护的闪存区域
    5. UM附加文件:LPC55S6x_LPC55S2x_LPC552x受保护的闪存区域v1.1.xls


    2实施
    2.1闪存布局
    LPC5500系列具有三种闪存配置:
    •640 KB闪存/ 320 KB RAM
    •512 KB闪存/ 256 KB RAM
    •256 KB闪存/ 144 KB RAM
    在某些配置中,用户无法使用所有闪存来存储代码和数据。由于LPC5500系列使用最后几页作为受保护的闪存区域(PFR)来存储重要信息和一些内部制造设置。
    2.1.1页面大小和扇区大小
    LPC5500系列内部闪存的扇区大小为32 KB,页面大小为512字节。

    最小编程大小为页面大小,即512字节。
    最小擦除大小是页面大小,即512字节。
    2.1.2闪存末页中的PFR区域
    与传统的LPC部件不同,所有LPC5500系列都将闪存的最后几页用作PFR。 PFR用于存储一些重要的信息用户和制造商配置信息。 PFR不能用作普通闪存来存储数据和代码。 编程PFR需要特别注意,否则芯片可能出现故障。 图1显示了闪存的布局。
    1.png
    如图1所示:
    LPC55S6x / LPC55S2x的PFR大小为10 KB,位于0x0009_D800 – 0x0009_FFFF中。
    LPC55S1x的PFR大小为12 KB,位于0x0003_D000 – 0x0003_FFFF中。
    •对于LPC55S6x / LPC55S2x 256/512 KB部件,客户可以使用的总闪存大小为256/512 KB。
    •对于LPC55S6x / LPC55S2x 640 KB部件,客户可以使用的总闪存大小为630 KB。
    •对于LPC55S1x 64/128 KB部件,客户可以使用的总闪存大小为64/128 KB。
    •对于LPC55S1x 256 KB部件,客户可以使用的总闪存大小为244 KB。
    2.2闪光灯操作
    LPC5500系列的闪存实现了内部ECC管理,包括单位校正和错误校正日志记录。 这个使闪存比其他闪存更安全可靠。 但是此功能也带来了一个问题:执行AHB读取时,memcpy如果闪存被擦除或损坏,则会发生HardFault。 当用户尝试读取,AHB读取,未编程的Flash页面。


    请参见LPC55S6x / LPC55S2x / LPC552x用户手册(文档UM11126)中的框图中的注释


    注意
    下一节将讨论如何解决此问题。
    另外,PFR区域位于闪存的最后一页,因此很容易被意外擦除。 为避免这种情况,我们建议使用ROM API用于操作闪存,而不是直接操作闪存寄存器。 ROM API提供内部保护以避免用户擦除PFR意外。 尽管闪存寄存器使您可以自由访问所有闪存数据,但这有点“危险”。我们建议使用ROM API访问数据闪存和PFR。 不建议使用闪存寄存器操作。最后,仅当内核时钟<= 100 MHz时才能执行闪存擦除和编程。 如果CPU的运行速度高于100 Mhz,则用户必须先降低CPU频率,然后再擦除和编程闪存。
    2.2.1 Flash ROM API
    LPC5500系列的BootROM为用户提供了一组Flash API。 ROM API表位于0x130010f0的地址。
    图2显示了ROM API地址布局。
    2.png
    SDK提供了有关如何使用闪存驱动程序来操作内部闪存的完整示例。 该示例位于:
    \ boards \ lpcxpresso55s28 \ driver_examples \ flashiap我们建议使用ROM API访问数据闪存和PFR。 不建议使用闪存寄存器操作。


    2.2.2 Flash初始化
    要使用Flash ROM API操作闪存,您需要首先初始化闪存实例。 SDK中的FLASH_Init API需要通过一个flash_config_t结构。 调用此API时,该结构会返回一些Flash参数,例如FLashSecterSize,TotalFlashSize,PageSize等。用户应检查并确认参数正确。
    3.png
    2.2.3闪存擦除
    闪存擦除API易于使用。 字段start和lengthInBytes必须对齐512字节
    4.png
    2.2.4 Flash程序
    与Flash Erase API相同,字段start和lengthInBytes必须对齐512字节。
    5.png
    2.2.5闪存读取
    访问或读取空白闪存区域会造成故障,因此在执行访问/读取之前,请检查闪存区域是否是否空白。
    SDK提供了一个名为FLASH_VerifyErase的API来进行空白检查。 在访问或阅读我们不知道的Flash页面之前是否为空白,请使用FLASH_VerifyErase进行确认。 如果页面为空白,则此页面中的内容均为0xFF,并且正在读取或访问它会直接造成硬故障。 如果页面不是空白,则可以照常读取/访问。
    6.png
    3小结
    3.1操作闪光灯时,请确保核心时钟低于100 MHz
    当核心时钟低于100 MHz时,必须执行所有闪存操作。
    3.2关于PFR区域的警告
    在PFR附近操作最后几页时,需要特别注意。 请勿执行以下操作的扇区擦除(擦除32 KB)最后一个闪存扇区。
    3.3使用ROM API擦除/编程闪存
    使用ROM API访问数据闪存和PFR。 不建议使用闪存寄存器操作,因为它很容易擦除PFR意外。
    3.4在读取闪存数据之前使用ROM API:FLASH_VerifyErase使Hardfault问题无效
    在读取Flash内容之前,请调用FLASH_VerifyErase。 为了确保它不是一个已擦除/空白的页面。 否则,可能触发HardFault。
    3.5对齐
    ROM API:Flash_Program和Flash_Erase的start和lengthInBytes文件必须页面对齐。





    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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