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

📄 flash.h

📁 flash 的驱动, 很不错的! 可以看一看.
💻 H
字号:
#ifndef FLASH_H
#define FLASH_H

//#pragma pack(1)

#include "Board.h"
#define  READ_LOCK    ((char) 0xD2) // Main Memory Page Read
#define  WRITE_LOCK   ((char) 0x82) //Main Memory Page Program Through Buffer1
#define  UNLOCK       0
#define SPI_BAUD        5000000
#define MAX_FLASH_DATA_SBUF_SIZE   (528)

#define FLASH_FLAG_POS  ((unsigned int) 256)  //标志位的位置
#define FLASH_CS_POS  ((unsigned int) 256)    //CS的位置

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
} 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;

//* Global Variables
extern AT91S_DataflashFeatures		        DeviceAT45DB;
extern AT91S_DataflashFeatures		        DeviceAT45DCB;

/////////////////////////////////////////////////////////////////////////////////////////////////////
#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

#define DATAFLASH_CLK				10000000
#define DATAFLASH_TIMEOUT			30
/* 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 */

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

#define Flash_ADDR_PRO_LOG        0x00000000  //编程日志
#define Flash_ADDR_ERR_LOG  	  0x00001400  //告警日志
#define Flash_ADDR_OPERAT_LOG  	  0x00002800  //操作日志

#define Flash_ADDR_TASK     	  0x00003C00  //任务1


#define Flash_ADDR_TASK_INTERV    0xDC00    //每个任务有110块

typedef struct
{
    unsigned char wflag; // 0/1  0表示缓冲区为空 ,1表示为满.
    unsigned int addr;   //写入flash中的地址(第几块)
    unsigned char  flash_wbuf[MAX_FLASH_DATA_SBUF_SIZE];//存放数据的缓冲区
}TYPE_FLASH_RW_BUF;

//在调用flash_write()和flash_read()这两个函数之前得先调用spi_init()这个函数
void spi_init(void);
int flash_write(void *buf, int len,  unsigned int BaseAddr);
int flash_read(void *buf, int len,  unsigned int BaseAddr);


#endif

⌨️ 快捷键说明

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