【LPC800 系列】IAP 擦写 Flash

关键字 :NXPLPC800IAP

本文将介绍 LPC800 的 IAP 擦写 Flash 功能。

  • LPC800 Flash 分配

    对 Flash 的操作我们首先要知道 Flash 的分配, 以 LPC804 内部 Flash 为例,如下图所示

 

 

总共 32K,分为 32 个 sector ,1 个 sector 分为 16 个 page,但是需要注意,最后两个 page 是不可以使用的。最小擦写为 1 个 page。

  • 擦写 Flash API

对 Flash 的擦写主要使用以下 API :

  • IAP_PrepareSectorForWrite (uint32_t startSector, uint32_t endSector)

 

在调用擦除和写入的函数之前必须要线调用此函数,参数就是用户涉及到 sector,数值对应手册里的 Flash 划分,见上图。

 

  • IAP_EraseSector (uint32_t startSector, uint32_t endSector, uint32_t systemCoreClock)

 

此 API 为擦除 sector 的函数,参数除了 sector 范围,还有的是 flash 的时钟频率,这里一般是主时钟 main clock。

  • IAP_ErasePage(uint32_t startPage, uint32_t endPage, uint32_t systemCoreClock)

 

此 API 为擦除 page 功能,page 范围 0-509,可以在这个范围内选择需要的。

 

  • IAP_CopyRamToFlash(uint32_t dstAddr, uint32_t *srcAddr, uint32_t numOfBytes, uint32_t systemCoreClock)

 

此 API 为写入功能,第一个参数为目标地址,即 flash 的地址,这里对应哪个 sector,第一张图都有说;第二个参数是源地址,即要写入的数据的起始地址,一般是数组名;第三个是需要写入的数据大小,这里要求是 256 的倍数。

 

 

  • 注意事项

需要特别注意的就是需要在 ram 区域中保存最后的 32bytes 空间给 IAP 功能使用,详细请看下图手册中的描述,如果用户代码中使用到了最后 32bytes 就会造成 Hardfault 的情况。

 

 

在用户代码中的 .scf 文件中修改 ram 的大小即可 :

 

 

  • 实战演练

随意打开 SDK 中的一个例程,这里选用 led_blinky 工程:

在工程中添加 IAP 的 driver 文件

 

 

 

定义相关参数:

 

 

写入数据 API:



 

 

读取数据 API :

 

 

在 main 函数中调用

 

 

通过串口可以看到结果,也可以通过进调试查看:

 

 

 

 

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论