1、什么是ISP
在这里简单解释一下:
ISP——in system programming: ? ? 在系统编程。芯片可以在目标板上,通过烧录器接入特定的接口,进行CODE的烧录。
我们在调试代码阶段一般都是用这种方式烧录代码的,但是量产之后的维护呢,总不可能拆开每一个设备吧,更何况还有一些设备安装在恶劣环境下。
针对本文的主角,宏晶的非IAP系列的单片机,这里以STC12C5A60S2为例。采用ISP的方式,可以在不拆开设备外壳且设备不断电冷启动的情况下,对芯片进行CODE更新。
2、实现方法
从手册中可以在特殊寄存器的列表中找到如下图所示内容
?由上图可知,在非IAP系列的单片机中,是存在ISP相关寄存器的,这就是这篇文章的基础。我们继续顺藤摸瓜找到如下描述
由手册描述可知,非IAP系列的单片机内的IAP接口是用于内部划分的EEPROM进行读写擦除动作的。
看到这里,其实我们应该明白了,就是其实都支持ISP/IAP的,只是厂家没有开发接口而已。那我们就只有利用已知的信息,进行改动了。?
1.采用官方的ISP烧录器
?通过查阅官方渠道,价格有点小贵,不适合个人玩家。如果是工作需要,可以考虑由采购统一购买。
2.采用官方的ISP电路
下图是官方给出了应用的电路,可知需要自己制作一个烧录器或者是直接修改电路板(这个违背了我们的初衷。)?
?
3.前面两点都不想用的低成本
使用常用的PL2312和CH340作为烧录器的伙伴们,可以采用这个办法。
1)修改串口中断
if(RI)//特定指令ISP升级用
{
RI = 0;
ACC = SBUF;
if(ACC == 0x5A)
{
ACC = 0;
IAP_CONTR = 0x60;
}
}
其中0x5A是下载指令,这个可以自由发挥增加多个字符。最关键的是
IAP_CONTR = 0x60;
这个语句是在芯片运行情况下,非冷启动,直接进入代码烧录。
2)配置STC-ISP烧录软件
如下图步骤,其中第三步的5A是上一步所说,可以自由定义(防止被他人无端改写)。有条件的朋友,可以由自家的软件集成进自家的上位机中统一管理。
3)测试
修改完代码之后,要冷启动一次,以后烧录,都是要先发自己设定的指令之后,才可以烧录,且不需要冷启动。
|