ICP stands for "In Circuit Programming".
按照名字来理解,电子电路的硬件级别的芯片烧写。
一般是说当芯片已经安装或贴片到用户终端板卡了,这时使用JTAG协议、SWD协议或引导程序对微控制器的闪存进行编程。
如果是裸片,也一样可以使用ICP来烧写。
最开始程序存储是EPROM,更新程序需要取下来,用紫外线清除内容,再插上烧录器烧写。而EEPROM也是需要12V高压来清除, 工作电压是5V,所以要取出来操作, 很不方便,后来的Flash Memory可以在工作电压下直接进行读写,所以叫In Circuit programming。
一般是要烧写的芯片连接烧写器(一些端子和烧写功能相关),烧写器连接PC,运行PC上的烧写软件,将程序、数据或配置内容烧写到EEPROM,Flash芯片或MCU内部ROM/Flash上。
烧写的目标设备除了芯片外,还有可编程逻辑器件。
举个例子,下面这个松瀚的8位芯片烧写器,右边是卡槽,上面还要有个座子,座子里放芯片:
STM32芯片的烧录器,ST-Link,想必大家也很熟悉了。通过JTAG、SWD等接口和芯片连接,即可烧写程序。
新唐芯片的Nu-Link:
不同厂商的不同芯片,其烧写方式不同,都会有厂家自己的烧写器和烧录软件才支持,其内部的烧录协议也不尽相同,只不过主流大部分芯片都用的是JTAG或SWD等标准接口来作为烧录时的通讯接口。
自家的芯片什么样,自己最清楚,检测到自己芯片型号,然后自家品牌烧写器和芯片对接上,就能烧写程序了。
芯片自己对烧录功能的支持,看作是硬件级别的实现,出厂即固定,无可厚非。
具体烧写方式,可以是裸片烧写,比如上面的松瀚的那个烧写器。
也可以在板上完成,不需要将芯片取下来。比如:
1,通过定制治具,将探针和PCB设计时留下的TP(Test Point测试点)点接触,通过同样的原理烧写,这样适合大批量的烧写。
如下图:
2,使用TP点飞线出来做个接头,也可以PCB上留有通孔,直接插孔接烧写器。
ISP stands for "In System Programming".
相比ICP裸片级的烧录功能,ISP要高级一些。
目标芯片上会有一段烧录功能的程序,通过片上外设接口,USB/UART/SPI/I2C/RS-485/CAN等,来和外部程序通讯(PC主机上运行的软件),完成芯片烧写(程序、数据或配置的更新)。
拿新唐芯片举例,LDROM(Loader ROM)里的程序就是负责升级的代码,用来更新APROM(APP ROM,应用程序代码)、Data Flash和User Configuration Word(用户配置字),可以通过UART或USB接口和电脑主机连接,运行烧录软件烧写。
Freescale的iMX6芯片,里面就有内置的Boot ROM, 芯片通过USB接口和电脑相连,上电后通过检测boot0和boot1两个电平来进入boot模式,然后使用mfgtool烧写。
ICP和ISP烧写都要重新上电和复位后再开始烧写,烧写完成后断电或复位重启。
都是运行PC上的烧录软件,在PC上选取烧写程序,传输给芯片。
而下面的IAP就要灵活一些。
IAP stands for In-application-programming
IAP表示在应用运行中,就能够升级或烧写芯片的存储器(re-program the Flash memory
of a microcontroller),不需要重启就实现自我升级,可以升级完成后再重启。
比如新塘芯片,就支持IAP功能。
IAP升级,主要表示的含义是用户对于升级功能的定制和控制,由用户自己来实现自己需要的升级方式,功能更加灵活,更加强大。
比如可以通过无线通讯技术,BT等方式获得待烧写程序,然后将程序烧写到芯片内。当然也可以和ISP类似,从USB等接口上读取程序数据进行烧写。