最近本人在学习ARM7的远程升级,在这里将自己的学习过程与大家分享,有错误的地方还请大家指出便于改正!
ISP(In-System Programming)即“在系统可编程”,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。
IAP(In-Application Programming) 即MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。ISP和IAP技术是未来仪器仪表的发展方向。
ISP和IAP的工作原理
ISP的实现相对要简单一些,一般通用做法是内部的存储器可以由上位机的软件通过串口来进行改写。对于单片机来讲可以通过SPI或其它的串行接口接收上位机传来的数据并写入存储器中。所以即使我们将芯片焊接在电路板上,只要留出和上位机接口的这个串口,就可以实现芯片内部存储器的改写,而无须再取下芯片。
IAP的实现相对要复杂一些,在实现IAP功能时, 单片机内部一定要有两块存储区,一般一块被称为BOOT区,另外一块被称为APP(应用程序)区。单片机上电运行在BOOT区,如果有外部改写程序的条件满足,则对存储区的程序进行改写操作且程序指针跳到存储区,开始执行放在存储区的程序,这样便实现了IAP功能,如果条件不满足则再次执行BOOT区的程序,保证可以进行再次的IAP。
通常在程序设计时有两种思路,见下图
思路1:将MCU分为3个区:BootLoader区、APP1(应用程序1)区、APP2(应用程序2)区,系统上电后程序从BootLoader区开始执行,根据条件选择跳到APP1(应用程序1)区中,当需要使用远程升级时,通过IAP,对APP2(应用程序2)区进行编程,改变相关标志位,然后使系统复位,系统再次从BootLoader区开始执行,通过判断标志位,选择跳到APP1(应用程序1)区或者APP2(应用程序2)区。当再次升级时,再对APP2(应用程序2)区进行编程,保证APP1(应用程序1)区不改变,这样即使升级失败,也能正常运行APP1(应用程序1)区程序,可以再次远程升级。
思路2:思路2是对思路1的简化,即将MCU分为2个区:BootLoader区与APP1(应用程序1)区合为一体、APP2(应用程序2)区,系统上电后程序从BootLoader区开始执行,由于两者合为一体了,所以也就运行了APP1程序,当需要使用远程升级时,通过IAP,对APP2(应用程序2)区进行编程,改变相关标志位,然后使系统复位,系统再次从BootLoader区开始执行,通过判断标志位,选择跳到APP2(应用程序2)区。当再次升级时,再对APP2(应用程序2)区进行编程,保证BootLoader区不改变,这样即使升级失败,也能正常运行APP1(应用程序1)区程序,可以再次远程升级。
思路1与思路2的总体思想是一样的,他们远程升级的核心都是IAP,而这里的IAP就是远程升级时所要用到的非常重要的知识点。这个IAP我打算放到下一篇重点介绍,这里的两种思路后续还会介绍,今天先和大家讲讲ISP的使用,由于J-Link的普及(既可调试程序也可直接下载程序),所以实际产品开发过程中ISP用的比较少,所以这里就简单介绍一下利用ISP下载程序。
ISP的使用:
讲ARM7 LPC2378的ISP,这里不得不提NXP公司的工具Flash Magic。下载地址:http://www.flashmagictool.com/ 点击打开链接 仔细看一下LPC2378的数据手册,会发现LPC2378一个引脚的名称为ISP(P2.10),P2.10 复位后的低电平被当作启动 ISP 命令处理器的外部硬件请求。
注意:在将管脚 P2.10 作为 ISP 硬件请求时需要特别注意:由于 P2.10 在复位后处于高阻模式,所以要使该管脚的状态稳定, 用户需要提供外部硬件(上拉电阻或其它器件)。否则一不小心可能就进入了 ISP 模式。
ISP电路设计时加上上拉电阻
Flash Magic烧写程序:
1、选择芯片类型、COM口、波特率、晶振频率为实际硬件电路的晶振频率
2、选择需要擦除的Flash
3、点击Browse,选择要下载的Hex文件
4、选择编译完成后进行校验
5、点击Start,开始下载
上一篇:ARM7 LPC2378 远程升级----扇区
下一篇:Fedora8上交叉编译qtopia4移植成功到s3c2410开发板