📄 amdflash.h
字号:
/*****************************************************************************
FILE NAME: amdflash.h
DESCRIPTION:
header file for dual bank AMD flash Driver
Copyright (c) 2002, VIA Technologies, Inc.
*****************************************************************************/
#ifndef __AMD_FLASH_H__
#define __AMD_FLASH_H__
#include "fsmflash.h"
#define FLASH_ERASE_DATA 0xFFFF
/* Status bit masks */
#define DQ2_MASK (0x04)
#define DQ3_MASK (0x08)
#define DQ5_MASK (0x20)
#define DQ6_MASK (0x40)
#define DQ7_MASK (0x80)
/*######################################################################
*##
*##
*##
*######################################################################*/
#define UNLOCK_ADDR_1 (/*LOWLVL_FLASH_START_ADDRESS +*/ (0x555 << 1))
#define UNLOCK_ADDR_2 (/*LOWLVL_FLASH_START_ADDRESS +*/ (0x2AA << 1))
#define UNLOCK_DATA_1 0xAA
#define UNLOCK_DATA_2 0x55
/* Flash commands */
/* Chip erase command */
#define FLASH_CHIP_ERASE_CMD 0x10
/* Sector erase command */
#define FLASH_SECTOR_ERASE_CMD 0x30
/* Unlock bypass mode, faster programming method */
#define FLASH_UNLOCK_BYPASS_CMD 0x20
/* Program flash in bypass mode */
#define FLASH_UNLOCK_BYPASS_PROGRAM_CMD 0xA0
/* Reset bypass mode */
#define FLASH_UNLOCK_BYPASS_RESET_CMD 0x90
/* Reset bypass mode */
#define FLASH_UNLOCK_BYPASS_RESET_CMD_1 0x00
/* Program command, write a word to flash */
#define FLASH_PROGRAM_SETUP_CMD 0xA0
/* Erase setup command, used by erase */
#define FLASH_ERASE_SETUP_CMD 0x80
/* Suspend erase */
#define FLASH_ERASE_SUSPEND_CMD 0xB0
/* Resume erase */
#define FLASH_ERASE_RESUME_CMD 0x30
/* Enter secured silicon sector command */
#define FLASH_ENTER_SECSI_CMD 0x88
/* Exit secured silicon sector command */
#define FLASH_EXIT_SECSI_CMD 0x90
/* AutoSelect Command, get dev id, man id, sector protect status */
#define FLASH_AUTOSELECT_CMD 0x90
/* Reset command, places flash back in read mode */
#define FLASH_RESET_CMD 0xF0
#define WRITE_TO(address, data) \
*((volatile FLASH_DATA *)(address)) = (data);
#define RESET_TO_READ(address) \
WRITE_TO(address, FLASH_RESET_CMD);
#define WRITE_FLASH(address,data, start_addr) \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, UNLOCK_DATA_1); \
WRITE_TO(UNLOCK_ADDR_2 + start_addr, UNLOCK_DATA_2); \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, FLASH_PROGRAM_SETUP_CMD); \
WRITE_TO(address, data);
#define UNLOCK_BYPASS(start_addr) \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, UNLOCK_DATA_1); \
WRITE_TO(UNLOCK_ADDR_2 + start_addr, UNLOCK_DATA_2); \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, FLASH_UNLOCK_BYPASS_CMD);
#define UNLOCK_BYPASS_WRITE_FLASH(address, data) \
WRITE_TO(address, FLASH_UNLOCK_BYPASS_PROGRAM_CMD); \
WRITE_TO(address, data);
#define UNLOCK_BYPASS_RESET(start_addr) \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, FLASH_UNLOCK_BYPASS_RESET_CMD); \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, FLASH_UNLOCK_BYPASS_RESET_CMD_1);
#define ERASE_BLOCK(sector_addr, start_addr) \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, UNLOCK_DATA_1); \
WRITE_TO(UNLOCK_ADDR_2 + start_addr, UNLOCK_DATA_2); \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, FLASH_ERASE_SETUP_CMD); \
WRITE_TO(UNLOCK_ADDR_1 + start_addr, UNLOCK_DATA_1); \
WRITE_TO(UNLOCK_ADDR_2 + start_addr, UNLOCK_DATA_2); \
WRITE_TO(sector_addr, FLASH_SECTOR_ERASE_CMD);
#define ERASE_SUSPEND(bank_addr) \
WRITE_TO(bank_addr, FLASH_ERASE_SUSPEND_CMD);
#define ERASE_RESUME(bank_addr) \
WRITE_TO(bank_addr, FLASH_ERASE_RESUME_CMD);
typedef enum
{
BANK_STATUS_READY = 0,
BANK_STATUS_BUSY,
BANK_STATUS_TIMEOUT
} BANK_STATUS;
#endif /* __AMD_FLASH_H__ */
/*****************************************************************************
* $Log: amdflash.h $
* Revision 1.3 2004/03/17 12:58:00 zgy
* Revision 1.2 2004/03/16 15:56:20 jjs
* Revision 1.1 2003/10/27 09:48:36 jjs
* Initial revision
* Initial revision -- jjs
*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -