单片机学习小组
直播中

贾熹

7年用户 1609经验值
私信 关注

在线编程ISP与IAP带来的好处和缺点分别有哪些呢

如何对MCU芯片程序进行烧录呢?
在线编程ICP、ISP、IAP带来的好处和缺点分别有哪些呢?

回帖(1)

张建国

2022-1-24 13:49:39
MCU芯片程序烧录的五个时机:

1、出厂前烧录Factory Program:如某一款芯片用量大,可以由MCU生产厂家在芯片出厂前就把代码烧录在芯片上。可分为掩模业务和代烧业务两种。
1-1

掩模业务:芯片的很多层光蚀图像中,有些是对应程序代码的。通过掩模业务,MCU生产厂家会将这些层用为你特制的光蚀图像代替,而程序代码就包含在这些图像内。掩模业务的好处是可以降低芯片价格(低30%以上),提高芯片稳定性;缺陷是订货量要求比较大(按晶圆计算)、订货周期长(45天以上)、需要掩模费用(2000美金左右)、风险特别大(程序有Bug只能重新掩模)。
1-2

代烧业务:MCU生产厂家提供的一种服务。在芯片测试的同时,帮你把程序代码烧录到芯片里去。
2、焊前烧录Chip Program:在芯片焊接到PCB之前,利用烧录器和适配座将程序代码烧录到芯片里去。
3、在板烧录In Circuit Program:将芯片焊接到PCB后,再利用板上预留的编程接口(JTAG、ISP口等),将程序代码烧录到芯片中。
4、在系统烧录In System Program:在整机装入外壳后,再利用机壳上外露的编程接口,将程序代码烧录到芯片中。
5、在现场烧录In Application Program:设备出售之后,利用机壳上外露的编程接口,将程序代码烧录到芯片中。一般用于软件升级。
6)一般把ICP、ISP、IAP统称为在线编程。但是这几个名词并没有统一准确的定义,很多时候互相重合、混用。本文中采用顾名思义的方法来试图赋予他们比较准确的定义。
在线编程ICP、ISP、IAP带来的好处和缺点:

1、更快的产品上市时间。现在的产品越来越依靠软件来实现产品价值,在硬件简单、成熟的情况下,可以在产品硬件调试好后,装个V0.x程序,先买给客户使用,再根据客户要求,慢慢调试、升级软件,用Vxyz.0版程序满足客户需求。从而在瞬息万变的市场上取得先机。
2、更充足的产品软件开发、调试时间。随着程序代码烧录时机的延后,开发、调试软件的时间愈趋充足。ICP可以实现整机装配前烧录软件;ISP可以实现出厂前烧录软件;对于某些产品,必须把产品安装到现场才能暴露出软件不足,甚至产品会有新的需求,需要多次升级软件,此时IAP就成为产品成功与否的关键所在。
3、支持软件开发外包。产品制造方可以将产品软件开发外包,采取适当的ISP和IAP的在线编程方式,可以保护双方的利益,达成更好的合作效果。
4、降低售后维护成本。如果升级软件,可以将升级代码和升级工具提供给用户自行升级。节省现场售后服务人员的人工和差旅费用。
5、生产调试软件独立化。很多产品都会有生产调试模式,包括板级调试模式和设备级调试模式。如果支持ICP、ISP,则可先烧录生产调试软件,调试完成后再烧录正式运行软件,减低软件复杂度,也能节约程序存储空间。
6、能使用FLASH MCU的裸片。为了节省成本,很多时候会使用裸片。裸片无法使用编程适配器,在线编程是使用裸片的唯一办法。
7、开发、调试的便利。支持ICP、ISP、IAP的产品研发,开发、调试所用的硬件系统与实际出厂的完全一致,避免使用仿真器所带来的仿真Ok、运行不行的麻烦。经验丰富的MCU软件开发人员,可以不用仿真器,直接利用ISP下载程序,通过观察运行情况,再进行“人脑仿真”,这种方法开发的软件,可靠性普遍较高。
8、要实现ICP、ISP、IAP,需要在硬件、软件的设计上作好准备,占用一些MCU资源,也可能需要自制或购买一些工具。一般会稍微增加产品硬件成本。
实现在线编程ICP、ISP、IAP的硬件考虑点:

1、MCU一定需要选用FLASH单片机。MASK和OTP单片机不适合做ICP、ISP、IAP。FLASH单片机有支持自编程的,可以支持IAP;也有不支持自编程的,实现在线编程有一定的局限性。
2、串口是最常用的在线编程接口。具有硬件简单、支持资源多的特点,应优先采用。
3、最好在板上引出MCU的“终极编程接口”,以免意外导致芯片锁死后,拆除、更换芯片,造成损失。主流的在线编程接口有JTAG、串口、SPI、USB等,并行编程需要很多引脚,不太适合在线编程用。目前的ARM7、Cortex ARM芯片里,有的以JTAG作为“终极编程手段”,如ATMEL的AT91SAM7系;有的以串口ISP作为“终极编程手段”,如NXP的LPC2xxx系、ST的STM32F系。而ATMEL的AVR管脚多的型号以并行编程作为“终极编程接口”,在实现在线编程时有一定风险。
4、有的在线编程接口如ATMEL的Tiny系列AVR单片机,编程时需要高压(12V)输入到复位引脚。MSP430单片机也需要6.5V高压输入到某个引脚。设计线路的时候要做特别考量。
5、要注意在线编程功能和外置看门狗芯片的和谐共处。在网上可以找到一些文章,巧妙的处理了这个问题。
6、对于ISP、IAP,由于编程接口露在机壳外,要注意ESD等抗干扰性能。不宜将TTL、CMOS电平的管脚外露,而应该选择RS232、485、CAN等专门的通信接口作为外露的在线编程接口。曾经有人将JTAG口作为一个车载电子产品的外露编程接口,结局当然是产品失败,很失败。
7)注意进入在线编程模式的触发条件的选择。既要能可靠的进入在线编程模式;又不会错误的进入在线编程模式,或者即使错误进入了在线编程模式,也能自行返回正常运行模式。
四 实现在线编程ICP、ISP、IAP的软件考虑点:

1、有些ARM芯片有JTAG口,但内部无固化BootLoader,但均支持烧录一个BootLoader程序。从而实现ISP和IAP功能。
2、IAP同ISP相比,硬件上并无不同。但是会有以下几个安全性方面的问题:
2-1

防止升级代码被反向工程,而泄露机密。一般会利用DES、AES等对称加密算法或RSA、ECC等公开密钥算法对提供的升级程序代码进行加密。需要升级的产品内含有解密密钥,只有密钥能对应上,才能解密升级代码,进行升级。
2-2

升级代码的合法性和完整性。只有原产厂家提供的、未被篡改过的、完整的程序代码才能被产品接受并升级,并且代码提供方不能推脱运行升级代码后产生的责任。一般做法是应用数字消息鉴权(Message Authentication Code)算法对升级代码计算出鉴权校验值附加在升级代码一起传送,并用数字签名的算法(DSA)来签署升级代码。
2-3

要考虑信息传输错误、传输失败、信息丢失等情况。在前面一点“升级代码的合法性和完整性”已经包含对这些情况的检测和防御。
2-4

升级的程序代码传输载体或传输媒介的便利性、成本和安全性。现在普遍采用网络传输。但是某些禁止网络连接的场合,需要考虑其他载体传递升级代码,如SD卡、NOR FLASH卡等。为防止传输过程中出错,需要采取纠错算法。
2-5

升级过程的可操作性良好,并可记录分析整个过程,最好有升级成功的反馈信息返回厂家。由于进行升级操作的并非专业人员,升级过程应该有良好的人机交互界面。而可记录整个过程的话,利于分析升级失败原因及验证是否成功升级。升级成功的反馈结果,起码可以令厂家放心。
2-6

升级失败时的安全性。如果某次升级因某种原因(掉电、硬件故障、操作失误等)导致失败,应该保证产品1、至少能再次升级2、最好能按升级前程序继续工作3、其他符合产品应用场合的表现。
3、一般而言,要实现IAP,必须自行编写 IAP BootLoader,而不能依靠芯片内置的BootLoader。ISP也建议自行编写BootLoader,否则内部应用程序可以在不打开机壳的情况下被擦除,然后烧录其他未被授权的代码,除非你明确知道但不计较这一点。
基于FLASH存储器的微处理器,一个重要的需求是安装到产品中后,仍具有升级固件(firmware)的能力。这种能力称为“在应用中编程”(In-application-programming,IAP)。
    这篇应用笔记以STM32F 32位cortex-M3为例,阐述了构建IAP系统的一些通用概念。并提出了一种新的技术,有助于单片机开发人员更好的构建IAP系统。   STM32系列微处理器基于FLASH存储器。在FLASH中运行的固件可以擦写FLASH本身。FLASH的头4KB具有写保护,适合存储IAP固件(IAP BootLoader)。IAP(In-application-programming)、ICP(In-circuit-programming)、ISP(In-system-programming):ICP是在电路板编程,IAP是在应用编程。ISP大部分时候指ICP,但少数MCU厂家将IAP称为ISP。 1.1 IAP系统的要求:
1.1.1 Safety(安全性):升级代码需要完整的、正确的写到Application Area。另外需要考虑到升级过程中断电、强干扰等意外事件。
1.1.2 Security(保密性):升级过程有可能被商业竞争对手入侵,因此需要采取加密手段。
1.1.3 Smart(灵巧性):BootLoader会挤占FLASH空间,因此应该尽量减小BootLoader占用的FLASH大小。
1 只占2KB的IAP BootLoader—一种同时满足Safety/Security/Smart的新技术:
1.1 需要解决的2个问题:
1.1.1 由于IAP BootLoader需要包含对FLASH进行擦写的指令,在强干扰的环境中,微处理器可能跑飞。如果跑飞到对FLASH进行擦写的指令段,有机会造成Application Code的失效,后果严重。
1.1.2 在Safety/Security和Smart之间,存在矛盾。要保证安全性和保密性,就会增加BootLoader的复杂性,从而称不上“Smart”。
1.1 要点:
1.1.1 IAP BootLoader In FlashèIAPPreLoader In Flash+IAPBurner In SRAM:
为了减小IAP BootLoader占用的空间,在FLASH中只存储一个装载程序IAPPreLoader(预引导程序),而真正完成IAP工作的代码IAPBurner(烧录者)存储在IAP Server中,或包含在升级代码中。
1.1.2 为了防止装载非法的IAPBurner,采用了散列函数算法。散列函数(Hash)是计算机领域的重要算法。具有以下特性:
1.1.2.1 压缩性。对任意长的数据,经hash算法得到一个固定长度的数据。比如我们常用的BT下载软件,就使用MD5算法的128bit摘要数据来代表文件块。
1.1.2.2 单向性。不可能从hash算法的结果逆推出源数据。
1.1.2.3 弱抗冲突性。给定一组数据,计算上不可能找出另一组具有同样hash结果的源数据。
1.1.2.4 强抗冲突性。计算上也不可能找出任意两组源数据,使它们具有相同的hash结果。
1.1.3 可以重复利用SRAM,装载多段IAPBurner程序,以完成更复杂的功能。
1.1 新IAP方案的有益效果:
1.1.1 减小IAP BootLoader占用的FALSH。
1.1.2 防止长期运行时跑飞到BootLoader,而误擦写代码。
1.1.3 允许增加IAP程序的复杂性,获得更强的加密性能。
1.1.4 由于IAPBurner的代码不存储在FLASH中,可以增加保密性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分