从字面意义上理解一下这三种下载方式->
ICP:In Circuit Programing 在电路中编程
ISP:In System Programing 在系统中编程
IAP:In Application Programing 在应用中编程
三种方式都可以将代码写入芯片中,所以针对不同的应用场合和工程项目的实际情况选择合适的下载方式,以下分析拿我用过的STM32、新唐单片机为例进行说明。
ICP的意思是在电路中编程,再具体一点的意思就是把芯片焊在电路板上,开发板或者实际的项目板上都行,不需要把芯片取下来就可以直接下载代码了,例如用J-Link、ST-Link等仿真器通过JTAG、SWD接口进行下载。这点应该是区分早期的单片机烧写流程吧,把芯片放入烧录器芯片座内,烧录好程序再焊到板子上。试想一下,如果出点BUG或者需要版本升级,还得把芯片一个个取下来再重新烧录,麻烦死了。就STM32和新唐的单片机而言,都有官方自己的ICP软件,如下图所示。利用这样的工具软件,就可以通过仿真器下载编译好的HEX或BIN文件了。
ISP的意思是在系统中编程,它可以脱离仿真器下载程序了,通常在研发阶段使用仿真器比较频繁,等到项目初具规模后,只需不断的版本升级即可,所以不可能拿着仿真器,挨个设备拆壳升级。用过STM32的应该都用到过它的ISP功能,把BOOT0置高、BOOT1置低后,连好串口线,利用ISP软件把程序烧进去,然后再把BOOT0、BOOT1都置低,新程序就更新完毕了。原子哥更是设计了一键下载电路,免去了跳线的麻烦。STM32之所以可以这么搞,是因为厂家在芯片内部固化了一段ISP的启动代码,像新唐的单片机如果想使用ISP功能,得先利用ICP软件把ISP的功能代码烧入到LDROM中,这样新唐单片机上电启动后先运行LDROM中的启动代码,如果这时有更新代码的事件,便可进行更新。其实ISP功能不仅可以通过串口,也可以通过USB、I2C或网口,是具体芯片而定,只不过串口应该是最简单、最常用的。ISP更新是把FLASH整个擦除重新写了一遍,有人比喻说是重新把房子盖了一遍。
IAP的意思是在应用中编程,这就需要用户编写一段BOOTLOADER程序了,类似台式机的BIOS,开机的时候按某个组合键就能进入到系统菜单内。加载了BOOTLOADER的单片机程序也是一样,如果满足了特定的触发条件,程序会等待用户的下一步指令。利用相应的上位机可以把版本文件传输给单片机,让它根据文件内容对指定FLASH区域进行擦写,以达到版本升级的目的。说道这,感觉新唐的ISP功能更像是IAP功能。上位机和芯片之间进行版本文件传输时应该满足一定的协议,包含起始、截止、文件大小和校验位等信息,以此告知单片机版本文件接收的正确与否。我看ST官方的IAP例程里好像写的是Y-Modem协议,这个还没仔细研究过。在网上应该可以找到满足Y-Modem协议的上位机,到时候只要把BOOTLOADER下到单片机里,通过这样的一个上位机可以把BIN或HEX文件按照Y-Modem协议打包发给单片机。如果不用官方的这个IAP例程,或者说自己编写协议不用Y-Modem协议,应该也是可以传输版本文件的。单片机可以通过串口、网口、USB等进行IAP升级,如果在BOOTLOADER中加入网口相关代码,还可以进行远程升级。IAP可以选择性的擦写FLASH区域,有人比喻说是把房子内部进行了装修。
以上是我对ICP、ISP、IAP三种升级方式的一点拙劣的理解,其实归结到一点上还是要根据项目的实际情况选择合适的升级方式,如果ICP、ISP能解决的没必要非得上IAP,要综合考虑软、硬件和时间的成本。欢迎大家指正文中理解不合理的地方,共同进步。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>