下面就来说下常见的三种烧录程序的方法:ISP、IAP和ICP,以及它们的区别。
ISP
ISP:In System Programing,在系统编程。ISP 是指可以在板级上进行编程,也就是不用拆芯片下来,写的是整个程序,一般是通过 ISP 接口线来写。
支持ISP的芯片一般在芯片内部固化了一段(用ISP升级的)boot程序。
比如:使用STC-ISP对STC芯片编程,利用Flash loader对STM32编程等。
ICP
ICP:In Circuit Programing,在电路编程。
ICSP:In-Circuit Serial Programming,在电路串行编程。如:对EEPROM编程等。
ICP编程方式网上各有说法,从字面含义(在电路)来说,所有处于编程的芯片都需要上电,都处于电路中。不严格来说利用J-Link、ST-Link、e-Link32等工具进行编程也属于在电路编程(ICP)。
在维基百科中,ISP(在系统编程),也称为在电路串行编程(ICSP)。
IAP
IAP:In applicaTIng Programing,在应用编程。在程序运行的过程中进行编程(升级程序,更新固件)。IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。[来自:百度百科]
IAP通信口IAP的通信口有许多种:UART串口、ETH以太网、I2C、SPI......等。按理说只要能传输数据的通信口都能实现IAP的功能。
IAP的应该非常广泛,可以参考我之前分享的一篇文章:STM32官方IAP例程详细说明,以及Demo演示
ISP 与 IAP 的区别
1.打个比喻吧1、ISP 是把房子拆了再重造一间,那么在造好之前当然是不能住人的啦!2、IAP 是在造好的房子里边进行一些装修,当然人可以继续住啦!2.应用场合1,ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了;2,IAP 如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去,
3.ISP 和 IAP 的工作原理ISP 的实现相对要简单一些,一般通用做法是内部的存储器可以由上位机的软件通过串口来进行改写。对于单片机来讲可以通过 SPI 或其它的串行接口接收上位机传来的数据并写入存储器中。所以即使我们将芯片焊接在电路板上,只要留出和上位机接口的这个串口,就可以实现芯片内部存储器的改写,而无须再取下芯片。
IAP 的实现相对要复杂一些,在实现 IAP 功能时,单片机内部一定要有两块存储区,一般一块被称为 BOOT 区,另外一块被称为存储区。单片机上电运行在 BOOT 区,如果有外部改写程序的条件满足,则对存储区的程序进行改写操作。如果外部改写程序的条件不满足,程序指针跳到存储区,开始执行放在存储区的程序,这样便实现了 IAP 功能。
4.ISP 和 IAP 的优点ISP 技术的优势是不需要编程器就可以进行单片机的实验和开发,单片机芯片可以直接焊接到电路板上,调试结束即成成品,免去了调试时由于频繁地插入取出芯片对芯片和电路板带来的不便。
IAP 技术是从结构上将 Flash 存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将程序从一个存储体转向另一个。
ISP 的实现一般需要很少的外部电路辅助实现,而 IAP 的实现更加灵活,通常可利用单片机的串行口接到计算机的 RS232 口,通过专门设计的固件程序来编程内部存储器,可以通过现有的 INTERNET 或其它通讯方式很方便地实现远程升级和维护。