微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC1768 IAP升级解析及例程分享

LPC1768 IAP升级解析及例程分享

时间:11-21 来源:互联网 点击:
1、IAP介绍

IAP即“inapplicatinprogramming”在应用编程的缩写,指MCU可以在系统中获取新代码并对自己重新编程,即改变应用程序。它与我们所熟悉的ISP编程不同, LPC1768 的ISP编程接口为串口1,如果使用其他的串口或其他总线则不能对其进行编程。而我们这里所说的IAP通过下载一段引导程序Bootloader程序,如果我们想要从串口2或网口更新应用程序,在Bootloader中初始化相应的串口或网口,使其接收应用程序,将接收到的应用程序写入到Flash里面,IAP完成后跳转到应用程序入口执行应用程序。所以现在的IAP程序涉及到两个概念:Bootloader和应用程序。

Bootloader:BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。这里我们所说的Bootloader也是系统开机前的一段小程序,其主要任务是用来初始化串口和IAP端口(网口CAN接口等)的,通过判断状态是否需要从IAP端口进行更新应用程序,若需要更新则从端口接收应用程序,并存放到指定的Flash里面,更新完成后则跳入到指定的Flash里面执行应用程序。

应用程序:即我们需要开发板实现功能的程序,其中应用程序主要分为两种:hex文件和bin文件。在我们经常使用的KEIL中默认编译生成的可执行文件(应用程序)为hex格式的,若需要编译生成bin格式需要做如下修改,加入“D:\Keil\ARM\ARMCC\bin\fromelf.exe--bin--output./Obj/Can_Updata.bin./Obj/test.axf”,重新编译生成的Can_Updata.bin文件存放在Obj文件夹下。


2、bin格式文件与hex格式文件的区别

bin格式文件是纯粹的二进制文件,使用下载其将其下载到开发板时其内容完全不变,所以对于IAP下载使用bin格式文件是比较方便的,如下图是bin文件的内容与写入到开发板后使用仿真器观察到Flash存放的内容(这段程序当然是可以执行的)。

Hex格式文件:Hex全称(IntelHEX)文件是由一行行符合IntelHEX文件格式的文本所构成的ASCII文本文件。在IntelHEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。如下图是hex文件的部分数据,其组成由“:CCAAAARR...ZZ”,CC=10代表长度为16字节,AAAA=0000本条记录中的数据在存储区中的起始地址,RR=00,数据区,ZZ=38为校验,这里就不做仔细说明了。

3、LPC1768IAP原理

LPC1768复位后开始执行Boot代码,Boot代码可以执行ISP程序或用户的应用代码。发生硬件复位后,P2.10引脚为低电平,这就被当作启动ISP命令处理器的外部硬件请求。假定在/RESET引脚上出现上升沿时,电源引脚出现正确的信号,那么在采样P2.10之前有3ms的时间决定是执行用户代码还是ISP处理程序。如果P2.10为低电平且看门狗溢出标志置位,那么忽略启动ISP命令处理器的外部硬件请求。在没有ISP命令处理器的请求(硬件复位后P2.10引脚为高电平)时,将搜索有效的用户程序。若发现有效的用户程序,执行控制权就被转移给用户程序。若没有找到有效的用户程序,就将调用自动波特率程序。这里不讨论ISP下载及命令,有兴趣的朋友可以查看LPC1768技术手册第三十二章ISP命令。

在IAP升级中,程序正常执行即用户代码(这里的用户代码是我们所说的IAP引导程序),如下是IAP升级流程图,程序将预留端口(这里提供有串口和CAN总线接口两种)接收到的APP程序bin文件,将接收到的数据写入到指定的Flash区域(例程APP地址为0x00010000),程序通过IAP命令将数据写入到Flash里面,LPC1768提供了一系列IAP命令对片内Flash进行擦除编写等。

4、IAP命令

LPC1768通过IAP函数对片内Flash进行操作,IAP函数是固化在0x1FFF1FF1处的一个有传入参数和返回参数的一个函数,在LPC1768技术手册第三十二章IAP命令中有有详细的说明。主要提供有如下命令:准备下操作扇区、将RAM内容复制到Flash、清除扇区、扇区查空、读器件ID、读boot版本、比较、重新调用ISP等。

?体; ????Sx?S??的外部硬件请求。假定在/RESET引脚上出现上升沿时,电源引脚出现正确的信号,那么在采样P2.10之前有3ms的时间决定是执行用户代码还是ISP处理程序。如果P2.10为低电平且看门狗溢出标志置位,那么忽略启动ISP命令处理器的外部硬件请求。在没有ISP命令处理器的请求(硬件复位后P2.10引脚为高电平)时,将搜索有效的用户程序。若发现有效的用户程序,执行控制权就被转移给用户程序。若没有找到有效的用户程序,就将调用自动波特率程序。这里不讨论ISP下载及命令,有兴趣的朋友可以查看LPC1768技术手册第三十二章ISP命令。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top