微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC单片机之ICSP

PIC单片机之ICSP

时间:11-26 来源:互联网 点击:
今次要说的是ICSP。ICSP,全称In-Circuit Serial Programming,在线串行编程。这行英文和ICSP这四个字母,一般使用时都带有TM标记的,也就是说,这是MICROCHIP的商标。也是MC独有的吧。呵呵。

从名字可以看出来,ICSP是一种编程方法,也就是说是一种烧写手段。这种手段可以在线烧写——即不需要将芯片取下就可以在板子上烧写。而这种烧写方法使用串行的数据。在线烧写其实也不是什么新闻了,大家熟悉的TI的DSP,一向可以使用JTAG口进行烧写,那就是标准的在线烧写。

MC的ICSP,使用起来极为方便,应用ICSP进行烧写,只需要使用芯片上的5个脚就可以,其中包括VDD VSS,这两个电源一定要供上。然后就是VPP编程电压,这个是肯定的,对FLASH进行烧写,当然需要高一点的电压。随后就是输入的数据和时钟两个脚。一般是PORTB口的RB6和RB7——当然,那些不分PORT只有GPIO的芯片请参看DATASHEET找到相应的ICSP口——那么也就是说,其实,真正的和烧写数据有关的就两个脚。标准的串行的风格呢,呵呵。

其原理,MICROCHIP官方没有说的太多,只是对每一种芯片都给了一个Programming Specification。上面详细给出了通过ICSP方式连接芯片时,对芯片内存储空间操作的各指令的具体形式。从那些文档中推断,我们可以简单的认为在PIC芯片中,烧写模式下,FLASHROM和外部接口之间有一个“处理接口”,该接口从外部通过串行方式接收命令,移位译码后进行外部设备需要的操作,随后如需要结果的话就把结果同样串行输出。当然实际上这个所谓的接口可能只是一块电路。但是可以肯定的是,FLASH并不是暴露在外直接和外界连接的,而是先要连到ICSP模块,然后才能连上外界。

这就有个好处,就是加密安全性的问题。因为FLASHROM并不是直接和外界相连,所以外界如果要读取FLASHROM内部的内容,正常情况下就必须通过ICSP模块。而ICSP模块如果检测到加密位有设置的话,那就拒绝执行外部的相应的读取命令,返回全0值。但是其实,数据在芯片内部并没有被加密,所以正常的程序访问不会受到干扰。

呵呵,不过其实,我想现在的芯片应该都是这个原理来加密的吧。要不然让软件自己实现软解密再执行也忒有点难度了。。那么这个原理加密的芯片就有几点不好,第一就是数据在FLASHROM里面是未加密的。也就是说,数据的安全性完全取决于ICSP模块的安全性。如果ICSP模块设计有任何的考虑不周,那么程序基本就等于没加密。。事实上MICROCHIP的某些老产品的ICSP模块设计就有问题。我手里一块解密的16F73芯片,据说只是使用了一些很简单的手法就绕过了ICSP加密。。。另外,还是因为数据没有加密,所以,物理解密仍然是不可防御的。只要别人能够到达你的FLASHROM区域,那么你的程序就宣告破解了。这一点是没有办法的。目前所有的单片机都会有这样的问题。但是貌似TI的DSP在这一块做的非常好。据前辈透露:TI的DSP内核是两层,上层是应用及处理层,下层才是FLASHROM层。这样即使物理法拿出了内核,也会因为内核是两层,无法较好的去除上一层而露出下一层的FLASHROM。从而大大加强了芯片的安全性。。。当然,同时也大大加强了成本。。

另外要补充一点的是:ICSP这种方式,外部实现是极为简单的,只要能提供完全符合Programming Specification的信号就行。所以网上可以看见很多种骨灰级玩家自制的烧写器。使用起来和原厂的PICSTART+之类没什么区别——事实上,也有自制PICSTART+的。。——并且,在有新芯片出来时,烧写器可以很方便的升级,只要重写一下烧写器内部芯片的代码,加入新芯片的烧写命令代码就行了。而烧写器的内部芯片。。一般也是PIC。。。可以ICSP升级。。嗯。。用ICSP升级PIC以支持新的PIC的ICSP。。是不是很像绕口令?呵呵。。

那么,ICSP这个东西具体应该怎么使用呢?呵呵,这个问题问的好。首先我们要解释一点就是:除了一些很老的产品如16C5X系列之外,基本所有的MICROCHIP芯片均采用ICSP技术。而且,只要采用了ICSP技术,那么烧写时肯定使用ICSP烧写。也就是说:在烧芯片时,虽然看起来是把芯片的28pin或者40pin全部放在烧写器的芯片座上的,但是实际上,起作用的也就那5个脚。。。很惊讶吧,呵呵。有时候有的东西就是这么神奇。去看看自制烧写器的原理图就明白了~

那么,真正用在板子上的话,就是把我们要用到的5个脚引出来,就可以使用ICSP了。但是,当然也有需要注意的地方:首先,VPP脚,就是芯片的MCLR脚,一般是1脚,在编程时会有大

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top