首页 » 技术文章 » 如何编写STC单片机的ISP协议

如何编写STC单片机的ISP协议

作者:  时间:2011-01-21 11:50  来源:EDN

  STC单片机包含两个Flash块,在一块Flash中运行的程序可对另一块Flash进行擦除和重新编程。一般都将ISP程序存放在容量较小的一块Flash(Block1),而将用户代码存放在容量较大的一块Flash(Block0)Block1中的ISP程序对Block0中的用户代码进行擦除和重新编程。在做STC单片机解密或是使用的朋友都知道,在STC单片机的程序存储区后,还有一段大约3K的代码,这段代码就是STC单片机的ISP程序,在STC单片机的数据手册里有关于对于ISP的生机资料,既然这段代码是可以升级的,那么我们就可以肯定这个区域是可以改写的,呵呵,这些涉及到了对STC单片机软解密的技术,我不多提了,大家可以动用自己的智慧。

  下面为大家提供一些自己设计STC ISP协议的资料。许多应用系统中都需要进行程序代码升级,如果程序代码在外部Flash存储器中,实现程序代码升级可以对外部Flash直接操作。但对于在单片机内部的一些系统程序代码,就要求此单片机支持IAP(In-Application-Programming)功能。本文即介绍此情况下的ISP(In-System-Programming)程序设计方法,以及在SSTSTC单片机上的具体实现。

  1  ISP实现基本结构

  ISP的实现方式有很多种,但大致都遵循图1所示流程。

1

  其中,判断用户ISP选择,一般有以下几种方式。

  (1)  连接计算机系统,由系统的命令选择

  进入用户ISP选择判断时,先由单片机发送特定特征数据,然后等待命令数据,如果在一定的时间内,接收到计算机系统发出的选择命令则进入用户代码升级,否则直接跳转到用户代码执行。

  (2)  由用户板上的跳线选择

  一般利用单片机空余的端口,设计一个代码升级选择跳线。进入用户ISP选择判断时,单片机可以直接根据此端口的状态判断进入用户代码升级还是直接跳转到用户代码执行。

  (3)  由用户板操作功能选择

  在用户板的功能菜单或功能组合中,允许用户选择代码升级功能,同时,在外部存储器中存放相应的标志。当选择代码升级功能时,在外部存储器中写入特定数据,然后程序复位。进入用户ISP选择判断时,判断外部存储器中的数据,如果符合条件则进入用户代码升级,否则直接跳转到用户代码执行。

  2  IAP程序设计

   目前,许多单片机都支持IAP功能,一般这些单片机内部都包含两个Flash块,在一块Flash中运行的程序可对另一块Flash进行擦除和重新编程。一般都将ISP程序存放在容量较小的一块Flash(Block1),而将用户代码存放在容量较大的一块Flash(Block0)Block1中的ISP程序对Block0中的用户代码进行擦除和重新编程。

  下面以两种51系列兼容的Flash单片机为例,介绍IAP的程序设计。一种是SST89C54,另一种是STC89C516RD

  (1)  SST89C54相关特性

  SST89C54内部有20KB(16KB+4KB)程序存储器,统一编址。Block00000H~3FFFH;Block1F000H~FFFFHBlock1可以选择映射到0000H地址开始的1KB/2KB/4KB程序区。

  (2)  STC89C516RD相关特性

  SST89C516RD内部有72KB(64KB+8KB)程序存储器。Block00000H~FFFFHBlock1可以选择映射到0000H地址开始的8KB程序区(上电复位缺省为地址映射)

  SSTSTC单片机的IAP操作几乎完全相同,本刊网站(wwwdpjcomcn)中给出了IAP函数的C程序源代码IAPC。要特别注意的是,Block0_erase函数中对于block0的选择,两种单片机是不同的(正好相反)

  3  ISP程序到用户代码的切换

  在设计中一般都将ISP程序设计为上电复位后运行的程序,如果不需要用户代码升级或升级完成后,就要将程序切换到用户代码执行。ISP程序到用户代码的切换,不同的单片机各不相同。

  (1)  SST89C54程序区Block1Block0的切换实现

  SST89C54单片机在烧录时,将ISP程序写到Block1,并且烧录映射选择位RB0/RB1(RE-MAP[1:0])。这样程序上电复位时,自动将Block1映射到0000H地址开始的4KB程序区,进入ISP程序执行。由于Block1同时还分配在地址F000H~FFFFH,因此,编译生成ISP程序代码时,设定所有的地址范围都在F000H~FFFFH。需要切换到用户代码(Block0)运行时,修改SFCF[7]控制位VIS,将Block10000H地址映射取消,然后程序跳转到地址0000H执行,则开始运行Block0中的用户代码程序。

相关推荐

嵌入式系统的固件更新

嵌入式  Flash  RAM  缓冲区  2013-09-12

苹果再胜诉 三星特定Galaxy产品在荷兰禁售

苹果  Galaxy  blue flash  2012-11-29

把面向数字家庭的Adobe Flash引进到MIPS-Based平台

TPI  Adobe  Flash  2011-09-02

最炫Flash性能 歌美HD8900 LE拆机评测

2011-08-03

基于FAT32文件系统嵌入式软件的实现

Flash  FAT32  2011-07-21

三星、东芝NAND Flash市占差距缩减至0.3%

三星  Flash  2011-07-13
在线研讨会
焦点