sst39flash.c

来自「DownLoad_sst39sf010.zip--嵌入式系统中关于SST39SF」· C语言 代码 · 共 82 行

C
82
字号
/*********************************************************************
 
  (c) copyright Extell Company 2001 
  ALL RIGHTS RESERVED
 
 *********************************************************************
        ESR-700 Demonstration Program for Voice Recognition Application
 *********************************************************************

  File:		SST39Flash.c
 
  Project:      ESR-700 demo program for Voice Recognition Application
 
  Description:  SST Flash memory Fuctions
 
  Date:         Sep. 2001
   
 ********************************************************************/
#include "main.h"
#include "extell51.h"


#define	UNLOCK1_OFFSET	0x5555
#define	UNLOCK2_OFFSET	0x2aaa
#define	COMMAND_OFFSET	0x5555

#define FLASH_CMD_UNLOCK1		0xAA
#define FLASH_CMD_UNLOCK2		0x55
#define FLASH_CMD_READ_RESET	0xF0
#define FLASH_CMD_AUTOSELECT	0x90
#define FLASH_CMD_BYTE_PROGRAM	0xA0
#define FLASH_CMD_ERASE_SETUP	0x80
#define FLASH_CMD_CHIP_ERASE	0x10
#define FLASH_CMD_SECTOR_ERASE	0x30
#define FLASH_CMD_ERASE_SUSPEND	0xB0
#define FLASH_CMD_ERASE_RESUME	0x30

#define DQ7						0x80
#define DQ6						0x40
#define DQ5						0x20
void FlashWrite(unsigned int addr, unsigned char fdata);
unsigned char FlashWriteConfirm(unsigned int addr, unsigned char fdata);
unsigned char ChipErase(void);
unsigned char SectorErase(unsigned int SectorAddr);


void FlashWrite(unsigned int addr, unsigned char fdata)
{
	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
	write_XDATA(COMMAND_OFFSET,FLASH_CMD_BYTE_PROGRAM);
	write_XDATA(addr,fdata);
}


unsigned char SectorErase(unsigned int SectorAddr)
{
	unsigned char data prev,next;
	bit PollingCheck=0;
	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
	write_XDATA(COMMAND_OFFSET,FLASH_CMD_ERASE_SETUP);
	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
	write_XDATA(SectorAddr,FLASH_CMD_SECTOR_ERASE);
	prev = read_XDATA(0);
	next= read_XDATA(0);
	while((prev&DQ6)!= (next&DQ6))
	{
		prev = next;
		next= read_XDATA(0);
		if(next&DQ7) PollingCheck = 1;
	}
	if(!PollingCheck)
	{
		next= read_XDATA(0);
		if(next&DQ7) return(OK);
		else return(ERROR);
	}
	return(OK);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?