当前位置:首页 > 通信技术 > 通信技术
[导读]本文虽然是针对NXP(恩智浦公司)的LPC2000系列,但使用IAP技术对内部闪存进行编程却适用于几乎所有的NXP ARM MCU系列,包括Cortex-M0 LPC1100以及Cortex-M3 LPC1300/1700等系列。

引言

  本文虽然是针对NXP(恩智浦公司)的LPC2000系列,但使用IAP技术对内部闪存进行编程却适用于几乎所有的NXP ARM MCU系列,包括Cortex-M0 LPC1100以及Cortex-M3 LPC1300/1700等系列。

  在大多数的LPC2000器件内部,存在着一个被称为“主启动加载程序(Primary Boot Loader)”的固件,它在每次上电或复位时被首先运行。本文所讲的“次级启动加载程序”实际上是一段用户自己写的代码(烧写在用户闪存区),在执行完主启动加载程序后被执行,提供给用户一个选择,是继续执行当前的应用程序还是对当前应用程序进行更新。

  在应用编程(In Application Programming, IAP)是指在用户应用程序运行时,对内部闪存执行擦除或编程操作,它是对用户代码进行升级的一个关键技术。

  LPC2000 IAP介绍

  扇区(Sector)

  IAP操作都是基于“扇区(Sector)”的,这就意味着即使仅仅需要更新一个字节的代码,也要将该字节所在的整个扇区擦除。因此,用户应该将待更新的代码和其它代码放在不同的扇区,以免误擦除。

  IAP的应用领域

  使用IAP技术,可以对用户代码进行升级,也可以把内部闪存当成类似EEPROM来存储数据。

  当用户应用程序运行时,用户可以对程序的一部分进行更新,就像在线升级病毒库一样,而不必将硬件电路断电甚至将芯片取下来放到专门的编程器上去重新烧写代码。

  当数据存储器使用,可以减少PCB板面积、降低成本。由于作为数据存储的扇区会被擦除,因此不能将这些扇区和存放用户应用程序的扇区重叠。另外,闪存的擦除和编程次数也是有一定限制的,过于频繁的擦除或编程会影响闪存的寿命。对于LPC2000芯片来说,至少可以稳定擦写十万次,数据至少可以保存20年。

  如何使用IAP

  关于IAP的详细说明、各种命令码、返回码和参数格式,可以参考LPC2000系列的用户手册。下面重点介绍一下如何使用IAP。

  使用流程

  图1是使用IAP对闪存进行擦写和编程的基本步骤。

        定义系统参数:在调用IAP命令前,有一些参数必须事先设置好,这包括系统时钟、IAP调用的入口地址、存放输入参数和输出参数的变量。

  选择扇区:在对任何扇区进行擦除或编程前,必须选择(准备)这些扇区,当然,也可以一次选择多个扇区。

  擦除扇区:在对闪存的指定扇区进行编程前,必须先擦除这些扇区。如果这些扇区已经被擦除,则不必再擦除了。可以一次对多个扇区进行擦除。

  编程扇区:在这个阶段,数据将被从SRAM写入闪存中的指定地址。这里有几个要特别注意的地方:

  ● 只能将位于片内SRAM内的数据写入片内闪存;

  ● 位于片内闪存的写入地址必须是256字节对齐;

  ● 片内SRAM必须位于局部总线(Local Bus),这就意味着有两块SRAM区域(供USB和以太网使用)内的数据不能被直接写入闪存;

  ● 一次写入的字节数必须是256、512、1024或者4096。

  数据校验:用户不必自己写程序每次对写入的数据进行检查,而是可以直接调用一个数据校验的IAP命令。

  IAP过程中的中断

  在擦除和编程操作过程中,片内闪存是不可访问的,当用户程序启动执行时,用户闪存区域的中断向量有效。在调用擦除和编程的IAP命令前,用户应当关闭中断或者确保中断向量表在SRAM中有效并且中断处理函数也位于SM中。

  IAP使用的RAM

  IAP命令使用片内SM最顶端的32字节空间。最多使用128字节的栈空间(位于用户分配的栈内),且为向下生长方式。

  次级启动加载程序和用户应用程序设计

  次级启动加载程序

  每次上电或者复位后,次级启动加载程序将会被运行,通过串口打印出一些选项,用户可以选择继续执行应用程序或者更新程序。

  次级启动加载程序位于内部闪存中从扇区0开始的若干个扇区内,这些扇区不能和用户应用程序占用的扇区重叠。

  另外,由于主程序运行在ARM模式,而IAP运行在THUMB模式,因此必须做相应配置使得次级启动加载程序里支持ARM和THUMB模式并存。

       用户应用程序

  存储器分布

  用户应用程序存放在和次级启动加载程序位置不同的的扇区中,并且占用了从0x4000 0000开始的一部分片内SM空间。

  在片内SRAM的最底部,存放了应用程序的中断向量表。要注意在配置系统RW区域时,把这部分空间预留出来,即用户应用程序的RW从0x4000 0040开始。

  中断向量表重映射

  对于ARM7处理器而言,中断向量位于从0x0000 0000到0x0000 001C的地址范围,因此在Boot ROM和SRAM内的一小部分空间必须被映射到这个地址内,使得可以在不同的模式(参考LPC2000用户手册内存映射章节)下使用中断。

  这一小段空间包括32字节的中断向量以及额外的32字节跳转指令,总共64字节,范围为0x0000 0000到0x0000 003F。

  因为次级启动加载程序的中断向量表存在于闪存的0x0000 0000到0x0000 003F,因此用户应用程序的中断向量表只能被映射到片内SRAM(对于支持外部总线接口的LPC2000器件,也可以映射到片外存储器)。在跳转到用户应用程序执行前,要将这64字节的数据复制到片内SRAM的底部(0x4000 0000 – 0x4000 003F),并且将系统的内存映射模式设置为“User RAM Mode”。这样当用户应用程序产生中断时,系统会自动到位于SRAM的中断向量表取中断向量入口,而不是错误地跳转到位于0x0地址处的、属于次级启动加载程序的中断向量表。

  运行用户应用程序

  更新完成后,修改PC指针,使其指向新的用户程序的起始地址,然后开始执行。

  注意:要保证用户应用程序能运行,必须还要做一些必要的初始化工作,包括RW区域的复制、ZI区域的清零等等,这些没有放在次级启动加载程序里完成,而是在用户应用程序开始运行时首先执行。

  程序(从串口利用XMODEM协议更新代码)上电运行时,串口将会打印出如图4的信息。

  用户可以测试一些IAP命令,或者选择PROG命令更新用户代码,更新完成后,选择RUN命令来执行。
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

阿联酋迪拜2025年8月26日 /美通社/ -- 纳斯达克上市公司Robo.ai Inc.今日正式宣布完成品牌焕新升级,并于8月26日正式启用全新纳斯达克股票代码"...

关键字: AI 人工智能 代码 智能科技

在嵌入式系统开发中,程序烧录是连接软件设计与硬件实现的关键环节。当前主流的单片机烧录技术已形成ICP(在电路编程)、ISP(在系统编程)、IAP(在应用编程)三大技术体系,分别对应开发调试、量产烧录、远程升级等不同场景。...

关键字: 单片机 ISP ICP IAP 嵌入式系统开发

北京2025年8月13日 /美通社/ -- 近日,北京积算科技有限公司(以下简称"积算科技")推出一站式AlphaFold3在线算力服务,现已开放免费使用。其内置优化后的AlphaFold3模型,支持...

关键字: ALPHA 代码 图形化 蛋白质

北京2025年7月21日 /美通社/ -- 浪潮信息宣布元脑企智一体机已率先完成对Kimi K2 万亿参数大模型的适配支持,并实现单用户70 tokens/s的流畅输出速度,为企业客户高效部署应用大模型提供高处...

关键字: 模型 AGENT TOKEN 代码

7月18日,一则“微信安卓安装包出现5处fxxk”的话题,迅速登上微博热搜,吸引了众多网友的热议和关注。

关键字: 代码 程序员

2025年7月2日,致力于亚太地区市场的国际领先半导体元器件分销商---大联大控股宣布,其旗下世平推出以恩智浦(NXP)MC33772C锂离子电池控制器IC为核心,辅以东芝(TOSHIBA)光继电器TLX9160T、安森...

关键字: NXP 锂离子电池控制器 连接器

共鉴AI未来,缅怀先辈贡献 深圳 2025年5月21日 /美通社/ -- 5月16日下午,深圳市金澄智创AI+传承迎来了乔迁之喜,一场意义非凡的活动在新址盛大举行。活动现场星光熠熠,庄世平前辈之子庄荣新先生、南方财经...

关键字: AI AI技术 BSP 代码

C语言代码优化与性能提升是软件开发中至关重要的一环。优化C语言代码不仅可以提高程序的执行效率,还可以减少资源消耗,提升用户体验。

关键字: C语言 代码

Qt 路线图致力于实现与各行业技术栈的无缝集成,助力企业与开发者使用自选工具,更高效地构建、扩展和维护软件解决方案。 芬兰埃斯波 2025年5月7日 /美通社/ -- 在今日举行的2025年Qt全球峰会上,Qt...

关键字: GROUP 生态系统 开发者 代码
关闭