正在进行安全检测...

发布时间:2024-04-29 16:17:46

LPC1114 IAP在线升级
IAP(In Application Program,即在应用中可编程。顾名思义,就是在系统运行的过程中动态编程,这种编程是对程序执行代码的动态修改,而且毋须借助于任何外部力量,也毋须进行任何机械操作。这一点有别于ISP(In System Programming即在系统可编程。一般来说,ISP在进行加载程序以前,需要设置某些功能引脚,而IAP则不需要作硬件上的任何动作,只要有合法的数据来源。LPC11XX支持ISPIAP升级程序,当采用RS485通信时候的,由ISP升级程序受条件限制,只能采用IAP升级程序。

IAP原理以及如何调用
IAP函数是固化在微处理器内部flash上的一些函数代码,最终的用户程序可以直接通过调用这些函数来对内部flash进行擦除和编程操作。
对于在应用编程来说,应当通过寄存器r0 中的字指针指向存储器(RAM包含的命令代码和参数来调用IAP 程序。IAP 命令的结果返回到寄存器r1 所指向的返回表。用户可通过传递寄存器r0 r1 中的相同指针重用命令表来得到结果。参数表应当大到足够保存所有的结果以防结果的数目大于参数的数目。参数传递见图2-1参数和结果的数目根据IAP命令而有所不同。参数的最大数目为5,由RAM 内容复制到Flash”命令传递。结果的最大数目为2,由扇区查空命令返回。命令处理程序在接收到一个未定义的命令时发送状态代INVALID_COMMANDIAP 程序是thumb 代码,位于地址0x7FFFFFF0

2-1 IAP的参数传递
2-1描述了IAP的命令。 2-1 IAP 命令汇总

IAP命令
命令代码
描述

准备编程扇区 50 该命令必须在执行 RAM 内容复制到Flash”擦除扇区命令之前执行。这两个命令的成功执行会导致相关的扇区再次被保护。该命令不能用于boot 扇区。要准备单个扇区,可将起始和结束扇区号设置为相同值。
RAM内容复制到Flash 51 该命令用于编程 Flash 存储器。受影响的扇区应当先通过调用准备写操作的扇区命令准备。当成功执行复制命令后,扇区将自动受到保护。该命令不能写boot 扇区。
擦除扇区 52 该命令用于擦除片内 Flash 存储器的一个或多个扇区。boot 扇区不能由该命令擦除。要擦除单个扇区可将起始和结束扇区号设定为相同值。
扇区查空 53 该命令用于对片内 Flash 存储器的一个或多个扇区进行查空。要查空单个扇区可将起始和结束扇区号设定为相同值。
读器件ID Boot版本 IAP比较
54 55 56 该命令用于读取器件的 ID 号。 该命令用于读取 boot 代码版本号。
该命令用来比较两个地址单元的存储器内容。当源或目标地址包含从地址0 开始的前64字节中的任意一个时,比较的结果不一定正确。64 字节重新映射到Flash boot 扇区。
2.3 IAP 编程函数接口
IAP 功能可用下面的C 代码来调用。
定义 IAP 程序的入口地址。由于IAP 地址的第0 位是1,因此,当程序计数器转移到该地址时会引起Thumb 指令集的变化。
#define IAP_LOCATION 0x7ffffff1 定义数据结构或指针,将IAP 命令表和结果表传递给IAP 函数 unsigned long command[5]; unsigned long result[2]; 定义函数类型指针,函数包含2 个参数,无返回值。注意:IAP 将函数结果和R1 中的表格基址一同返回。
typedef void (*IAP (unsigned int [ ] , unsigned int [ ]; IAP iap_entry; 设置函数指针
iap_entry=(IAP IAP_LOCATION;

正在进行安全检测...

相关推荐