diff options
Diffstat (limited to 'include/dataflash.h')
| -rw-r--r-- | include/dataflash.h | 176 | 
1 files changed, 176 insertions, 0 deletions
| diff --git a/include/dataflash.h b/include/dataflash.h new file mode 100644 index 000000000..cc4badfd1 --- /dev/null +++ b/include/dataflash.h @@ -0,0 +1,176 @@ +/* + * (C) Copyright 2003 + * Data Flash Atmel Description File + * Author : Hamid Ikdoumi (Atmel) + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* File Name		: dataflash.h					*/ +/* Object		: Data Flash Atmel Description File		*/ +/* Translator		:						*/ +/*									*/ +/* 1.0 03/04/01 HI	: Creation					*/ +/* 1.2 20/10/02 FB	: Adapatation Service and Lib v3		*/ +/*----------------------------------------------------------------------*/ + +#ifndef _DataFlash_h +#define _DataFlash_h + + +#include <asm/arch/hardware.h> +#include "config.h" + + +typedef struct { +	unsigned long base;		/* logical base address for a bank */ +	unsigned long size;		/* total bank size */ +	unsigned long page_count; +	unsigned long page_size; +	unsigned long id;		/* device id */ +	unsigned char protect[CFG_MAX_DATAFLASH_PAGES]; /* page protection status */ +} dataflash_info_t; + + +typedef unsigned int AT91S_DataFlashStatus; + +/*----------------------------------------------------------------------*/ +/* DataFlash Structures							*/ +/*----------------------------------------------------------------------*/ + +/*---------------------------------------------*/ +/* DataFlash Descriptor Structure Definition   */ +/*---------------------------------------------*/ +typedef struct _AT91S_DataflashDesc { +	unsigned char *tx_cmd_pt; +	unsigned int tx_cmd_size; +	unsigned char *rx_cmd_pt; +	unsigned int rx_cmd_size; +	unsigned char *tx_data_pt; +	unsigned int tx_data_size; +	unsigned char *rx_data_pt; +	unsigned int rx_data_size; +	volatile unsigned char state; +	volatile unsigned char DataFlash_state; +	unsigned char command[8]; +} AT91S_DataflashDesc, *AT91PS_DataflashDesc; + +/*---------------------------------------------*/ +/* DataFlash device definition structure       */ +/*---------------------------------------------*/ +typedef struct _AT91S_Dataflash { +	int pages_number;			/* dataflash page number */ +	int pages_size;				/* dataflash page size */ +	int page_offset;			/* page offset in command */ +	int byte_mask;				/* byte mask in command */ +	int cs; +} AT91S_DataflashFeatures, *AT91PS_DataflashFeatures; + +/*---------------------------------------------*/ +/* DataFlash Structure Definition	       */ +/*---------------------------------------------*/ +typedef struct _AT91S_DataFlash { +	AT91PS_DataflashDesc pDataFlashDesc;	/* dataflash descriptor */ +	AT91PS_DataflashFeatures pDevice;	/* Pointer on a dataflash features array */ +} AT91S_DataFlash, *AT91PS_DataFlash; + + + +typedef struct _AT91S_DATAFLASH_INFO { + +	AT91S_DataflashDesc Desc; +	AT91S_DataflashFeatures Device; /* Pointer on a dataflash features array */ +	unsigned long logical_address; +	unsigned int id;			/* device id */ +	unsigned char protect[CFG_MAX_DATAFLASH_PAGES]; /* page protection status */ +} AT91S_DATAFLASH_INFO, *AT91PS_DATAFLASH_INFO; + + +/*-------------------------------------------------------------------------------------------------*/ + +#define AT45DB161	0x2c +#define AT45DB321	0x34 +#define AT45DB642	0x3c + +#define AT91C_DATAFLASH_TIMEOUT		10000	/* For AT91F_DataFlashWaitReady */ + +/* DataFlash return value */ +#define DATAFLASH_BUSY			0x00 +#define DATAFLASH_OK			0x01 +#define DATAFLASH_ERROR			0x02 +#define DATAFLASH_MEMORY_OVERFLOW	0x03 +#define DATAFLASH_BAD_COMMAND		0x04 +#define DATAFLASH_BAD_ADDRESS		0x05 + + +/* Driver State */ +#define IDLE		0x0 +#define BUSY		0x1 +#define ERROR		0x2 + +/* DataFlash Driver State */ +#define GET_STATUS	0x0F + +/*-------------------------------------------------------------------------------------------------*/ +/* Command Definition										   */ +/*-------------------------------------------------------------------------------------------------*/ + +/* READ COMMANDS */ +#define DB_CONTINUOUS_ARRAY_READ	0xE8	/* Continuous array read */ +#define DB_BURST_ARRAY_READ		0xE8	/* Burst array read */ +#define DB_PAGE_READ			0xD2	/* Main memory page read */ +#define DB_BUF1_READ			0xD4	/* Buffer 1 read */ +#define DB_BUF2_READ			0xD6	/* Buffer 2 read */ +#define DB_STATUS			0xD7	/* Status Register */ + +/* PROGRAM and ERASE COMMANDS */ +#define DB_BUF1_WRITE			0x84	/* Buffer 1 write */ +#define DB_BUF2_WRITE			0x87	/* Buffer 2 write */ +#define DB_BUF1_PAGE_ERASE_PGM		0x83	/* Buffer 1 to main memory page program with built-In erase */ +#define DB_BUF1_PAGE_ERASE_FASTPGM	0x93	/* Buffer 1 to main memory page program with built-In erase, Fast program */ +#define DB_BUF2_PAGE_ERASE_PGM		0x86	/* Buffer 2 to main memory page program with built-In erase */ +#define DB_BUF2_PAGE_ERASE_FASTPGM	0x96	/* Buffer 1 to main memory page program with built-In erase, Fast program */ +#define DB_BUF1_PAGE_PGM		0x88	/* Buffer 1 to main memory page program without built-In erase */ +#define DB_BUF1_PAGE_FASTPGM		0x98	/* Buffer 1 to main memory page program without built-In erase, Fast program */ +#define DB_BUF2_PAGE_PGM		0x89	/* Buffer 2 to main memory page program without built-In erase */ +#define DB_BUF2_PAGE_FASTPGM		0x99	/* Buffer 1 to main memory page program without built-In erase, Fast program */ +#define DB_PAGE_ERASE			0x81	/* Page Erase */ +#define DB_BLOCK_ERASE			0x50	/* Block Erase */ +#define DB_PAGE_PGM_BUF1		0x82	/* Main memory page through buffer 1 */ +#define DB_PAGE_FASTPGM_BUF1		0x92	/* Main memory page through buffer 1, Fast program */ +#define DB_PAGE_PGM_BUF2		0x85	/* Main memory page through buffer 2 */ +#define DB_PAGE_FastPGM_BUF2		0x95	/* Main memory page through buffer 2, Fast program */ + +/* ADDITIONAL COMMANDS */ +#define DB_PAGE_2_BUF1_TRF		0x53	/* Main memory page to buffer 1 transfert */ +#define DB_PAGE_2_BUF2_TRF		0x55	/* Main memory page to buffer 2 transfert */ +#define DB_PAGE_2_BUF1_CMP		0x60	/* Main memory page to buffer 1 compare */ +#define DB_PAGE_2_BUF2_CMP		0x61	/* Main memory page to buffer 2 compare */ +#define DB_AUTO_PAGE_PGM_BUF1		0x58	/* Auto page rewrite throught buffer 1 */ +#define DB_AUTO_PAGE_PGM_BUF2		0x59	/* Auto page rewrite throught buffer 2 */ + +/*-------------------------------------------------------------------------------------------------*/ + +extern int addr_dataflash (unsigned long addr); +extern int read_dataflash (unsigned long addr, unsigned long size, char *result); +extern int write_dataflash (unsigned long addr, unsigned long dest, unsigned long size); +extern void dataflash_print_info (void); +extern void dataflash_perror (int err); + +#endif |