以文本方式查看主题

-  单片机在线编程网  (http://mcuisp.com/bbs/index.asp)
--  综合-ISP/IAP  (http://mcuisp.com/bbs/list.asp?boardid=3)
----  单片机在线编程技术纵览  (http://mcuisp.com/bbs/dispbbs.asp?boardid=3&id=15)

--  作者:McuIsp
--  发布时间:2009-05-13 20:22:15
--  单片机在线编程技术纵览

 
一、MCU芯片程序烧录的五个时机:

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

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

                       ii.代烧业务: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相比,硬件上并无不同。但是会有以下几个安全性方面的问题:

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

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

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

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

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

                     vi.升级失败时的安全性。如果某次升级因某种原因(掉电、硬件故障、操作失误等)导致失败,应该保证产品1、至少能再次升级2、最好能按升级前程序继续工作3、其他符合产品应用场合的表现。

3)一般而言,要实现IAP,必须自行编写 IAP BootLoader,而不能依靠芯片内置的BootLoader。ISP也建议自行编写BootLoader,否则内部应用程序可以在不打开机壳的情况下被擦除,然后烧录其他未被授权的代码,除非你明确知道但不计较这一点。


--  作者:反复记号
--  发布时间:2009-06-09 10:57:13
--  

 

 

 

 

很不错的 顶一下


                       \\\\\\|///
                     \\\\  - -  //
                      (  @ @  )
┏━━━━━━━━oOOo-(_)-oOOo━┓
┃网海茫茫,认识你是我的福份;    ┃
┃网语缠绵,那是我们注定的缘份。  ┃
┃                         Oooo  ┃
┗━━━━━━━━ oooO━-(   )━┛
                   (   )   ) /
                    \\ (   (_/
                     \\_)


人生伟业的建立,不在能知,乃在能行。
水过滤器


--  作者:EndMYLife
--  发布时间:2009-09-23 11:31:53
--  
很棒的文章!