⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.h

📁 在ARM ADS开发环境下,做的一个通过串口下载接收bootloader的程序,包含对flash的操作.
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////////
// Copyright(c) 2001-2002 Hybus Co,.ltd. All rights reserved.
//  
// Module name:
//      main.c
//  
// Description:
//  
//  
// Author:
//      bedguy
//  
// Created:
//      2002.10

//
///////////////////////////////////////////////////////////////////////////////

#ifndef _FLASH_H_4671264823649239432432
#define _FLASH_H_4671264823649239432432

#include "types.h"
#include "config.h"
#include "other.h"
#include "lstring.h"

#define CMD_TBL_FLASH																				\
				{"flash", DoWriteToFlashBlocks,														\
				"  flash {loader/kernel/root}       Copy to Flash from SDRAM of Area.\n"			\
				"  flash [dest] [src] [len]         Copy to Flash from src to dest.\n",			\
				"  flash {loader/kernel/root}       Copy to Flash from SDRAM.\n",					\
				"  flash {loader/kernel/root}       Copy to Flash from SDRAM of Area.\n"			\
				"  flash [dest] [src] [len]         Copy to Flash from src to dest.\n"			\
				}

#define CMD_TBL_ERASE																				\
				{"erase", DoEraseFlashBlocks,														\
				"  erase [addr]                     Erase One Flash Block.\n"						\
				"  erase [addr] [len]               Erase Flash Blocks.\n"						\
				"  erase {loader/kernel/root}       Erase Flash Blocks of Area.\n",				\
				0,																					\
				"  erase [addr]                     Erase One Flash Block.\n"						\
				"  erase [addr] [len]               Erase Flash Blocks.\n"						\
				"  erase {loader/kernel/root}       Erase Flash Blocks of Area.\n"				\
				}

#define CMD_TBL_LOCK																				\
				{"lock", DoFlashLock,																\
				"  lock [addr]                      Set Flash Lock-Bit of One Block.\n"			\
				"  lock [addr] [len]                Set Flash Lock-Bit of Blocks.\n"				\
				"  lock {kernel/root}               Set Flash Lock-Bit of Area.\n",				\
				"  lock {kernel/root}               Set Flash Lock-Bit of Area.\n",				\
				"  lock [addr]                      Set Flash Lock-Bit of One Block.\n"			\
				"  lock [addr] [len]                Set Flash Lock-Bit of Blocks.\n"				\
				"  lock {kernel/root}               Set Flash Lock-Bit of Area.\n"				\
				}


#define CMD_TBL_UNLOCK																				\
				{"unlock", DoFlashUnlock,															\
				"  unlock                           Clear All Flash Lock-Bit.\n",					\
				"  unlock                           Clear All Flash Lock-Bit.\n",					\
				"  unlock                           Clear All Flash Lock-Bit.\n"					\
				}


#define    FLASH_BASE                   SRAM_BASE_ADDR


#define    FLASH_BLOCK_SIZE	         SRAM_BLOCK_SIZE


#define FLASH_SIZE		             SRAM_SIZE


#if (FLASHBIT*FLASHNUM)==8
#define FUNIT                           uchar
#define FBOUND                          0x1
#elif (FLASHBIT*FLASHNUM)==16
#define FUNIT                           ushort
#define FBOUND                          0x2
#elif (FLASHBIT*FLASHNUM)==32
#define FUNIT                           ulong
#define FBOUND                          0x4
#endif

#ifdef XHYPER255A
// Flash Commands.
#define READ_ARRAY              (0xFF)
#define READ_ID                 (0x90)
#define READ_QUERY              (0x98)
#define STATUS_READ             (0x70)
#define STATUS_CLEAR            (0x50)
#define WRITE_BUF               (0xE8)
#define PGM_SETUP               (0x40)
#define ERASE_SETUP             (0x20)
#define ERASE_CONFIRM           (0xD0)
#define ERASE_PROGRAM_SUSPEND   (0xB0)
#define ERASE_PROGRAM_RESUME    (0xD0)
#define FLASH_CFG               (0xB8)
#define FLASH_SETUP             (0x60)
#define SET_READ_CFG            (0x03)
#define BLOCK_LOCK_BIT_SET      (0x01)
#define BLOCK_LOCK_BIT_CLEAR    (0xD0)
#define PROTECTION_PROGRAM      (0xC0)
#define WRITE_BUF_COMFIRM       (0xD0)

// Status bits.
#define STATUS_BUSY             (0x80)
#define STATUS_ERR_FILTER       (0x7E)
#define STATUS_LOCK_DETECT      (0x02)
#define STATUS_VOLT_RANG_ERR    (0x08)
#define STATUS_CMD_SEQ_ERR      (0x30)
#define STATUS_PGM_ERR          (0x10)
#define STATUS_LOCK_ERR         (0x10)
#define STATUS_ERASE_ERR        (0x20)
#define STATUS_UNLOCK_ERR       (0x20)
#define STATUS_LOCK_ERR_FILTER  (0x38)

#define FlashCMD(A)		((FUNIT)(A))

#else

// Flash Commands.
#define READ_ARRAY		(0x00FF00FF)
#define READ_ID			(0x00900090)
#define READ_QUERY		(0x00980098)
#define	STATUS_READ		(0x00700070)
#define	STATUS_CLEAR		(0x00500050)
#define WRITE_BUF		(0x00E800E8)
#define	PGM_SETUP		(0x00400040)
#define ERASE_SETUP		(0x00200020)
#define ERASE_CONFIRM		(0x00D000D0)
#define ERASE_PROGRAM_SUSPEND	(0x00B000B0)
#define ERASE_PROGRAM_RESUME	(0x00D000D0)
#define FLASH_CFG		(0x00B800B8)
#define FLASH_SETUP		(0x00600060)
#define SET_READ_CFG		(0x00030003)
#define BLOCK_LOCK_BIT_SET	(0x00010001)
#define BLOCK_LOCK_BIT_CLEAR	(0x00D000D0)
#define PROTECTION_PROGRAM	(0x00C000C0)
#define WRITE_BUF_COMFIRM	(0x00D000D0)


// Status bits.
#define STATUS_BUSY		(0x00800080)
#define STATUS_ERR_FILTER	(0x007E007E)
#define STATUS_LOCK_DETECT	(0x00020002)
#define STATUS_VOLT_RANG_ERR	(0x00080008)
#define STATUS_CMD_SEQ_ERR	(0x00300030)
#define STATUS_PGM_ERR		(0x00100010)
#define STATUS_LOCK_ERR		(0x00100010)
#define STATUS_ERASE_ERR	(0x00200020)
#define STATUS_UNLOCK_ERR	(0x00200020)
#define STATUS_LOCK_ERR_FILTER	(0x00380038)

#define FlashCMD(A)		((FUNIT)(A))
#endif

bool	DoWriteToFlashBlocks(CMD_TBL *cptr, int argc, char **argv);
bool	DoEraseFlashBlocks	(CMD_TBL *cptr, int argc, char **argv);
bool	DoFlashLock			(CMD_TBL *cptr, int argc, char **argv);
bool	DoFlashUnlock		(CMD_TBL *cptr, int argc, char **argv);
bool	WriteToFlash		(void *dest, void *src, ulong len);
bool	WriteToFlashBuffer	(void *dest, void *src);

bool    WriteProToFlash(int file_len);


bool    ReadCharsFromFlash(void *dest, ulong len);
void    save_file(char c,uint len);

#endif		// end _FLASH_H_4671264823649239432432.

⌨️ 快捷键说明

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