SST单片机IAP编程示例(C语言)

程序说明:

本程序用的单片机是SST89x564RD、SST89x554RC、SST89x58RD2、SST89x54RD2和SST89x52RD2。示例程序代码中,执行IAP指令的程序放在单片机低端程序空间,也就是BLOCK0,IAP的程序包括了扇区擦除(Sector-Erase)、字节编程(Byte-Program)和字节校验(Byte-Verify)(注:字节校验相当于读数据指令)。IAP程序做成子程序,主程序可以调用这些子程序执行IAP操作,把数据烧写到另外一块的FLASH空间中(BLOCK1)。主程序中,目标扇区先被擦除,然后把数据(0,1,2,…,n,n等于一个扇区的大小)写入到BLOCK1目标地址BLK1-DST-ADDR,IAP成功完成后,ErrorCode变为0,如果有错误出现时,程序保持错误功能,ErrorCode还是为1。

/***********************************************************************************************************

* demoIAP.c - SST89x564RD IAP C51示范代码

*

* SST89x564RD、SST89x554RC、SST89x58RD2、SST89x54RD2和SST89x53RD2

* MCU有两个内部FLASH存储器块,本代码是从BLOCK0执行IAP指令改写。

* BLOCK1的1000H(SST89x564RD)或E000H (SST89x554RC、SST89x58RD2、SST89x54RD2

* 和SST89x53RD2)的数据。

* 本程序默认是SST89x564RD,如果使用SST89x554RC、SST89x58RD2、SST89x54RD2

* 和SST89x53RD2,只要修改变量BLK1_DST_ADDR就可以。

*

***********************************************************************************************************/

/***********************************************************************************************************

* MCU特殊功能寄存器地址

***********************************************************************************************************/

sfr SFCF = 0xB1; /*FLASH配置位*/

sfr SFCM = 0xB2; /*FLASH命令位*/

sfr SFAL = 0xB3; /*FLASH地址低位*/

sfr SFAH = 0xB4; /*FLASH地址高位*/

sfr SFDT = 0xB5; /*FLASH数据位*/

sfr SFST = 0xB6; /*FLASH状态位*/

/***********************************************************************************************************

* MCU IAP命令

***********************************************************************************************************/

#define SFCM_SE 0x0B; /*扇区擦除IAP指令*/

#define SFCM_VB 0x0C; /*字节校读IAP指令*/

#define SFCM_PB 0x0E; /*字节编程IAP指令*/

/***********************************************************************************************************

* 全局变量定义

***********************************************************************************************************/

const unsigned short int BLK1_DST_ADDR = 0x1000;

/*SST89x564RD准备写入的目标地址(在另外一块的片内FLASH)

如果是用SST89x554RC、SST89x58RD2、SST89x54RD2和SST89x53RD2,请删除这句,

改为用下面一句。*/

/*const unsigned short int BLK1_DST_ADDR = 0x0F000; */

/*SST89x554RC、SST89x58RD2、SST89x54RD2和SST89x53RD2准备写入的目标地址。*/

const unsigned char SECT_SIZE = 0x80; /*一个扇区的字节数*/

unsigned char ErrorCode; /*标示操作的结果*/

/***********************************************************************************************************

* Function Prototype

***********************************************************************************************************/

void sector_erase(unsigned short int dataAddr);

void byte_program(unsigned short int dataAddr, unsigned char dataByte);

unsigned char byte_verify(unsigned short int dataAddr);

int ready();

void error();

/***********************************************************************************************************

* 主程序

SST单片机IAP编程示例(C语言)相关文档

最新文档

返回顶部