STC新型单片机的ISP程序设计
随着单片机技术的不断发展,IAP(In-Application-Programming)功能的支持越来越普遍,这给应用系统程序代码升级带来了极大的方便。但是,ISP(In-System-Programming)程序的设计以及程序空间的安排等,是需要开发者认真细致考虑的。本文针对STC新型单片机的应用ISP程序设计作了详细的介绍,以STC11F62X为例,详细说明了具体实现过程,并给出了Keil-C源代码。
STC新型单片机介绍
STC11/10xx系列单片机是宏晶科技设计生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成的FLASH寿命可达10万次,并且完全支持ISP和IAP功能。该系列针对不同功能、电压、封装等的型号规格非常齐全。所有的STC11/10xx系列单片机内部都固化了宏晶科技的ISP程序,不需要并行编程器,通过RS232串口就可以烧录用户程序。但一些系统为了程序保密或者采用其他诸如RS485通讯或其他通讯方式的需要,仍然需要自己编写ISP程序用于系统升级。在STC11/10xx系列单片机中以IAP打头的芯片型号,用户程序和数据FLASH是统一寻址,允许在用户程序中擦写FLASH,因此可以编写自己的ISP程序。
本程序例子中选用的单片机是IAP11F62X,包含内部可用的62kFLASH空间和扩展的1024字节XRAM。
单片机内部FLASH存储器安排
为了充分使用单片机内部FLASH,将FLASH划分为三部分:
FLASH地址 使用分区 地址划分例子
高地址: 低地址(0000): 数据存储区 0xF400~0xF7FF
ISP监控程序区 0xF000~0xF3FF
用户程序区 0x0000~0xEFFF
用户程序区从低地址0000开始,主体程序运行不受任何影响。当满足特定条件(需要进入ISP监控程序)时,跳转到ISP监控程序区运行,可对用户程序区进行擦除和改写。剩下的高地址FLASH可用作数据存储。
用户程序可以有多种方式判断是否跳转ISP监控程序:
串口接收到特殊格式指令;
用户板上指定的按键或跳线组合;
由用户板操作功能选择。
IAP程序设计
IAP程序设计比较简单,只需对几个特殊功能寄存器进行操作就可以完成FLASH的擦除和改写。
附件二.IAP_11_10.C是IAP程序的C源代码;附件三. IAP_11_10.h是头文件说明,其中可以看到对FLASH存储器的安排:
#define FPRG_END 0xEFFF /* 用户程序末地址(60k) */
#define BOOT_ADR 0xF000 /* 在线升级监控程序地址(1k)*/
#define FDAT_ADR 0xF400 /* 数据FLASH地址(1k数据) */
#define FDAT_PGN 2 /* 数据FLASH页数(1k字节2页) */
程序中需要说明的几点是:开启IAP功能前,将中断允许EA暂存到位变量ea_tmp,并将中断禁止;关闭IAP功能时再将中断恢复。另外,根据硬件选择的振荡器频率,在IAP_11_10.h中设置适当的参数。
ISP程序设计
ISP程序中主要是根据串口接收到的指令,调用IAP函数进行操作。附件四. ISP_DEMO.C是ISP程序的C源代码。附件五.BOOT.A51是程序初始化代码,由于ISP程序被安排从0xF000地址开始,因此与普通程序初始化代码STARTUP.A51不同,BOOT.A51中指定了代码地址是从0xF000开始,即:“CSEG AT 0xF000”。
生成ISP_DEMO程序需要在Keil-C中建立工程文件,除了包含ISP_DEMO.C,还应包含IAP_11_10.C及BOOT.A51。另外还需设置程序空间地址范围:在Target选项卡中,Off-chip Codememory设置Start:0xF000,Size:0x0400
另外,ISP_DEMO程序中同时支持EEPROM读写。程序开始时将1k字节FLASH数据读入xdata缓冲区备用。指令操作过程中,实际都只在xdata缓冲区中操作,直到退出ISP程序前,才将数据FLASH扇区擦除并将1k字节数据全部写入。
如果用户程序开启了看门狗,进入ISP监控程序后,在看门狗最长复位时间内,如果串口没有收到有效的系统复位通讯指令数据,芯片会自动复位返回用户程序区运行。这样可以防止ISP程序的误入,当然还可以修改ISP监控程序作更多的标志和判断以及程序陷阱,进一步防止ISP程序的误操作。
用户程序设计
在用户程序设计中,应该包含有判断以及跳转ISP监控程序的代码段。附件六.TEST.C是一个简单的用户程序的例子,程序通过两种方式可进入ISP监控程序:同时按下两个按键或者串口在250mS之内接收到特殊字符’Z’和’z’。
生成TEST程序也需要在Keil-C中建立工程文件,除了包含TEST.C,还应包含IAP_11_10.C
与计算机连接的通讯协议
升级用户代码时,需要与计算机进行通讯,一般采用RS232串行通讯,数据协议采用简单协议。本文例子采用的通讯协议可以用串口测试程序(RS232.EXE)进行程序升级测试,注意:选择22.1184晶体2倍速再复位,这样通讯速率才是115.2kBps。
复位指令(计算机->单片机)
计算机发送四字节复位指令:21H,5AH,00H,A6H,单片机返回复位信息。
复位信息(单片机->计算机)
复位信息为25字节,前三字节为单片机公司特征字符(如:“ADI”“SST”“STC”),最后一字节为效验和。
数据包格式
计算机发送数据包格式:07H,0EH,长度,数据,效验和(长度与数据的效验和)。
擦除指令
计算机发送数据包,其中数据只有一字节,内容为:字符’A’或’C’。单片机擦除用户程序区后返回一字节06H表示成功;05H表示失败。
编程指令
计算机发送数据包,其中数据内容:’W’,00H,地址高字节,地址低字节,程序数据。单片机返回一字节06H表示成功;05H表示失败。
读EEPROM指令
计算机发送数据包,其中数据内容:’R’,长度,地址高字节,地址低字节。单片机返回一字节05H表示失败;06H表示成功然后紧跟的是读出的数据字节和效验。
写EEPROM指令
计算机发送数据包,其中数据内容:’E’,00H,地址高字节,地址低字节,EEPROM数据。单片机返回一字节06H表示成功;05H表示失败。
运行用户程序
计算机发送数据包,其中数据只有一字节,内容为:字符’U’。单片机返回一字节06H表示成功,然后跳转用户程序运行。
结束语
根据以上ISP程序设计,大家可以修改ISP代码,丰富其他的ISP功能(如:口令控制、数据加密等),尝试设计自己的ISP程序。
www.STCMCU.com2009-6-25
如有需要,请通过百度Hi我或留下邮箱,获得本文提到的相关代码。
追问请提供相关代码给我,多谢。
追答请给邮箱吧!
追问你好,我的邮箱:[email protected] 多谢。