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

📄 nflash_1.h

📁 ARM
💻 H
字号:
#ifndef _NFLASH_1_H
#define _NFLASH_1_H


	#ifdef __cplusplus
    	extern "C" {
    #endif
    	
    #include "ioep9315.h"
    
    #include "PUBLIC.h"
    	
	/*硬件连接描述
	NAND_CE#       portG3 cs2 =0x20000000
	NAND_ALE       a14
	NAND_CLE       a15
	NAND_WE        WE|STRIB
	NAND_RD		RD|STRIB
	NAND_RB        READY 或者portG2
	WP 	      VCC 不允许保护
	*/
	
	#define  NAND_BASE       0x30000000
	#define  DEV0_K9F_COMMAND  	(*(unsigned char *)(NAND_BASE+0x8000)) //写命令 A25=0,A15/CLE=1,A14/ALE=0,
	#define  DEV0_K9F_ADDR 	(*(unsigned char *)(NAND_BASE+0x4000)) //写地址 A25=0,A15/CLE=0,A14/ALE=1,
	#define  DEV0_K9F_DATA  	(*(unsigned char *)(NAND_BASE+0x0000)) //读写数据A25=0,AD15/CLE=0,A14/ALE=0,
	
	//卡上的NAND-FLASH
	#define  NAND1_BASE          0x32000000
	#define  DEV1_K9F_COMMAND  		(*(unsigned char *)(NAND1_BASE+0x8000)) //写命令 A25=1,A15/CLE=1,A14/ALE=0,
	#define  DEV1_K9F_ADDR 			(*(unsigned char *)(NAND1_BASE+0x4000)) //写地址 A25=1,A15/CLE=0,A14/ALE=1,
	#define  DEV1_K9F_DATA  		(*(unsigned char *)(NAND1_BASE+0x0000)) //读写数据A25=1,AD15/CLE=0,A14/ALE=0,
	
	//硬件忙判别
	//#define NAND_WAIT_READY(nand)	{ while((GPIO_PGDR)&0x08==0); }	//等待PORTG2=1
	#define DEV0_K9F_ENABLE   GPIO_PGDR &= ~0x04  	//PORTG3=0;set to 0 enable
	#define DEV0_K9F_DISABLE  GPIO_PGDR |=  0x04		//PORTG3=1;set to 1 disable
	
	
	//卡上的NAND-FLASH--EN.EGPIO9,PB1
	#define SET_K9F_ENABLE   GPIO_PBDDR |= 0x02  	//PORTB1=1;set to 1 enable
	
	#define DEV1_K9F_ENABLE   GPIO_PBDR &= ~0x02  		//PORTB1=0;set to 0 enable
	#define DEV1_K9F_DISABLE  GPIO_PBDR |=  0x02		//PORTB1=1;set to 1 disable
	
	
	//定义命令标识.控制K9f1208命令
	#define K9F_RESET    	0x0FF		//RESET
	#define READ_K9F_ID   	0x90		//READ ID
	#define READ_STATUS    	0x70    //READ BUSY OR READY
	
	#define WRITE_START  	0x80		//PRO_START_COMMOND
	#define WRITE_END   	0x10		//PRO_END_COMMOND
	
	#define ERASE_START   	0x60		//ERASE_START_COMMOND
	#define ERASE_END   	0x0d0		//ERASE_END_COMMOND
	
	#define READ_FIRST_ARRAY   0x00		//first half array 0-255
	#define READ_SECOND_ARRAY  0x01   //second half array 256-512
	#define READ_SPARE_ARRAY   0x50    //spare  array  512-527
	
	 
	#define K9F1208_ID (0x0ec76A5C0)
	#define K9F5608_ID (0x0ec75A5BD)
	#define NandAllPageSize	528
	

	//NAND_FLASH结构定义(该结构存放于第0块,第4PAGE)
	struct _K9fInfo{
		unsigned short IsCreat; 	//0x55aa,表示建立了坏块表
		unsigned short BlockAmount; //块总数目4096/k9f1208 2048/k9f5608(标志设备号)
		unsigned short BlockUsed;   //可利用块数目,4016/k9f1208,2008/k9f5608
		unsigned short BadBlockAmount;//坏块总数目
		unsigned short BadBlockNum[80]; //最大支持80个坏块,超过该数目不在使用。
		unsigned short BlockTableNum;   //坏块替换表项数
		unsigned short BlockNextMux;    //下一个可替换的坏块号,初始为BlockUsed。
		unsigned short BlockTable[160]; //坏块替换表,超过80个块不再使用
		unsigned short 	AppLen;         //应用程序的长度,占用BLOCK的数目(255占用4MBYTE空间)
		unsigned short 	AppFlag;
		unsigned short Reserved[8];
	};
	
	union _K9fUnion
	{
		struct _K9fInfo K9fInfo;
		unsigned char Dbuf[512];
	};
	/*K9f1208应用函数声明*/
	void K9F_Init(unsigned char dev);
	unsigned char K9F_Erase_Block(unsigned char dev,unsigned int block);
	void K9F_ReadPage(unsigned char dev,unsigned int block,unsigned int page,unsigned char *pData);
	unsigned char K9F_WritePage(unsigned char dev,unsigned int block,unsigned int page,unsigned char *pData);
	unsigned char K9F_ReadInfo(unsigned char dev);
	unsigned char K9F_WriteInfo(unsigned char dev);
	unsigned int K9F_GetBlock(unsigned char dev,unsigned int block);
	void K9F_CreatInfo(unsigned char dev);
	void AddToBadBlock(unsigned char dev,unsigned int block);
	void TestNandFlash(unsigned char dev);
	
	extern union _K9fUnion DEV[2]; //支持0/1两个设备
	
	//--------------------------------------------------
	//write for file32 system
	//07.10.25
		#define		CS373						0x18003
		#define		DATA						0x18001

		#define 	SEQUENTIAL_DATA_INPUT_CMD	0x80
		#define 	READ1_CMD					0x00
		#define 	READ2_CMD					0x50
		#define 	READID_CMD					0x90
		#define 	RESET_CMD					0xff
		#define 	PAGE_PROGRAM_CMD			0x10
		#define 	BLOCK_ERASE_CMD				0x60
		#define 	BLOCK_ERASE_CONFIRM_CMD		0xd0
		#define 	READ_STATUS_CMD				0x70
		
		typedef struct	stNandFlash
		{
		uint16			device_maker;	// 0xec:samsung, 0x98:toshiba
		uint16			device_type;    // 1:1M, 2:2M, 4:4M, 8:8M, 16:16M, 32:32M ...bytes
		uint16			blocks_disk;    // blocks in a disk
		uint16			pages_block;    // pages in a block
		uint16			page_size;      // page_size in bytes
		uint16			data_size;      // data_size in bytes
		uint16			spare_size;     // spare_size in bytes
		} stNandFlash;

		extern stNandFlash	_Nand_Flash;

		uint8 	BlockErase (uint32 in_page_add); 		// Erasing single block
		uint8 	BlockRead (uint8 *in_page_data, uint32 in_page_add);
		uint8 	PageOneWrite (uint8 *in_write_data, uint32 in_page_add);
		uint8 	PageRead (uint8 *in_page_data, uint32 in_page_add);
		uint8 	PageWrite (uint8 *in_write_data, uint32 in_page_add);

	#ifdef __cplusplus
	}
   	#endif
#endif

⌨️ 快捷键说明

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