亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nandflash.c

?? S3C2410 NANDFLASH驅動原代碼.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************
【文  件  名  稱】NandFlash.c
【功  能  描  述】FS2410XP教學平臺實驗程序
【程  序  版  本】3.0
【創建及創建日期】優龍公司/2005-XX-XX
【修改及修改日期】2005-5-23
****************************************************************************/
//頭文件定義
#include "../inc/def.h"
#include "../inc/config.h"
#include "../inc/board.h"
#include "2410addr.h"

#ifdef	NAND_FLASH_SUPPORT
struct NFChipInfo {
	U32 id;
	U32 size;
}

static NandFlashChip[] = {
	{0xec73, SIZE_16M},
	{0xec75, SIZE_32M},
	{0xec76, SIZE_64M},
	{0xec79, SIZE_128M},
	{0, 0},
};

#define	BLK_IDXL	8
#define	BLK_IDXH	9
#define	FMT_TAG		15

char format_tags[] = "Formatted For NAND FLASH Driver";	//must be less than 32
/***********************************************************/
//nand ecc utils
typedef	unsigned char u_char;
static u_char eccpos[6] = {0, 1, 2, 3, 6, 7};

/*
 * Pre-calculated 256-way 1 byte column parity
 */
static const u_char nand_ecc_precalc_table[] = {
	0x00, 0x55, 0x56, 0x03, 0x59, 0x0c, 0x0f, 0x5a, 0x5a, 0x0f, 0x0c, 0x59, 0x03, 0x56, 0x55, 0x00,
	0x65, 0x30, 0x33, 0x66, 0x3c, 0x69, 0x6a, 0x3f, 0x3f, 0x6a, 0x69, 0x3c, 0x66, 0x33, 0x30, 0x65,
	0x66, 0x33, 0x30, 0x65, 0x3f, 0x6a, 0x69, 0x3c, 0x3c, 0x69, 0x6a, 0x3f, 0x65, 0x30, 0x33, 0x66,
	0x03, 0x56, 0x55, 0x00, 0x5a, 0x0f, 0x0c, 0x59, 0x59, 0x0c, 0x0f, 0x5a, 0x00, 0x55, 0x56, 0x03,
	0x69, 0x3c, 0x3f, 0x6a, 0x30, 0x65, 0x66, 0x33, 0x33, 0x66, 0x65, 0x30, 0x6a, 0x3f, 0x3c, 0x69,
	0x0c, 0x59, 0x5a, 0x0f, 0x55, 0x00, 0x03, 0x56, 0x56, 0x03, 0x00, 0x55, 0x0f, 0x5a, 0x59, 0x0c,
	0x0f, 0x5a, 0x59, 0x0c, 0x56, 0x03, 0x00, 0x55, 0x55, 0x00, 0x03, 0x56, 0x0c, 0x59, 0x5a, 0x0f,
	0x6a, 0x3f, 0x3c, 0x69, 0x33, 0x66, 0x65, 0x30, 0x30, 0x65, 0x66, 0x33, 0x69, 0x3c, 0x3f, 0x6a,
	0x6a, 0x3f, 0x3c, 0x69, 0x33, 0x66, 0x65, 0x30, 0x30, 0x65, 0x66, 0x33, 0x69, 0x3c, 0x3f, 0x6a,
	0x0f, 0x5a, 0x59, 0x0c, 0x56, 0x03, 0x00, 0x55, 0x55, 0x00, 0x03, 0x56, 0x0c, 0x59, 0x5a, 0x0f,
	0x0c, 0x59, 0x5a, 0x0f, 0x55, 0x00, 0x03, 0x56, 0x56, 0x03, 0x00, 0x55, 0x0f, 0x5a, 0x59, 0x0c,
	0x69, 0x3c, 0x3f, 0x6a, 0x30, 0x65, 0x66, 0x33, 0x33, 0x66, 0x65, 0x30, 0x6a, 0x3f, 0x3c, 0x69,
	0x03, 0x56, 0x55, 0x00, 0x5a, 0x0f, 0x0c, 0x59, 0x59, 0x0c, 0x0f, 0x5a, 0x00, 0x55, 0x56, 0x03,
	0x66, 0x33, 0x30, 0x65, 0x3f, 0x6a, 0x69, 0x3c, 0x3c, 0x69, 0x6a, 0x3f, 0x65, 0x30, 0x33, 0x66,
	0x65, 0x30, 0x33, 0x66, 0x3c, 0x69, 0x6a, 0x3f, 0x3f, 0x6a, 0x69, 0x3c, 0x66, 0x33, 0x30, 0x65,
	0x00, 0x55, 0x56, 0x03, 0x59, 0x0c, 0x0f, 0x5a, 0x5a, 0x0f, 0x0c, 0x59, 0x03, 0x56, 0x55, 0x00
};


/**
 * nand_trans_result - [GENERIC] create non-inverted ECC
 * @reg2:	line parity reg 2
 * @reg3:	line parity reg 3
 * @ecc_code:	ecc 
 *
 * Creates non-inverted ECC code from line parity
 */
static void nand_trans_result(u_char reg2, u_char reg3,
	u_char *ecc_code)
{
	u_char a, b, i, tmp1, tmp2;
	
	/* Initialize variables */
	a = b = 0x80;
	tmp1 = tmp2 = 0;
	
	/* Calculate first ECC byte */
	for (i = 0; i < 4; i++) {
		if (reg3 & a)		/* LP15,13,11,9 --> ecc_code[0] */
			tmp1 |= b;
		b >>= 1;
		if (reg2 & a)		/* LP14,12,10,8 --> ecc_code[0] */
			tmp1 |= b;
		b >>= 1;
		a >>= 1;
	}
	
	/* Calculate second ECC byte */
	b = 0x80;
	for (i = 0; i < 4; i++) {
		if (reg3 & a)		/* LP7,5,3,1 --> ecc_code[1] */
			tmp2 |= b;
		b >>= 1;
		if (reg2 & a)		/* LP6,4,2,0 --> ecc_code[1] */
			tmp2 |= b;
		b >>= 1;
		a >>= 1;
	}
	
	/* Store two of the ECC bytes */
	ecc_code[0] = tmp1;
	ecc_code[1] = tmp2;
}

 /********************************************************************
Function name: nand_calculate_ecc
Parameter    : *dat:要校驗的數據指針  *ecc_code:存放數據校驗碼指針
Description	 : 無
Return		 : void
Argument     : 數據校驗                             
Autor & date :
*********************************************************************/
/**
 * nand_calculate_ecc - [NAND Interface] Calculate 3 byte ECC code for 256 byte block
 * @dat:	raw data
 * @ecc_code:	buffer for ECC
 */
int nand_calculate_ecc(const u_char *dat, u_char *ecc_code)
{
	u_char idx, reg1, reg2, reg3;
	int j;
	
	/* Initialize variables */
	reg1 = reg2 = reg3 = 0;
	ecc_code[0] = ecc_code[1] = ecc_code[2] = 0;
	
	/* Build up column parity */ 
	for(j = 0; j < 256; j++) {
		
		/* Get CP0 - CP5 from table */
		idx = nand_ecc_precalc_table[dat[j]];
		reg1 ^= (idx & 0x3f);
		
		/* All bit XOR = 1 ? */
		if (idx & 0x40) {
			reg3 ^= (u_char) j;
			reg2 ^= ~((u_char) j);
		}
	}
	
	/* Create non-inverted ECC code from line parity */
	nand_trans_result(reg2, reg3, ecc_code);
	
	/* Calculate final ECC code */
	ecc_code[0] = ~ecc_code[0];
	ecc_code[1] = ~ecc_code[1];
	ecc_code[2] = ((~reg1) << 2) | 0x03;
	return 0;
}



struct Partition *pNandPart;

U32 NandFlashSize;

static U16 NandAddr;
static U16 support;

#define	READCMD0	0
#define	READCMD1	1
#define	READCMD2	0x50
#define	ERASECMD0	0x60
#define	ERASECMD1	0xd0
#define	PROGCMD0	0x80
#define	PROGCMD1	0x10
#define	QUERYCMD	0x70
#define	READIDCMD	0x90

void NFChipSel(U32);
int  NFIsReady(void);
void NFWrCmd(int);
void NFWrAddr(int);
void NFWrDat(int);
U8   NFRdDat(void);

#define	NFChipEn()	NFChipSel(1)
#define	NFChipDs()	NFChipSel(0)
#define	NFIsBusy()	(!NFIsReady())

/********************************************************************
Function name: NFChipSel(U32 sel)
Parameter    : U32 sel : 用來使能NAND FLASH的
                      0:禁止  1:使能 
Description	 : 無
Return		 : void
Argument     : 用來使能或禁止NAND FLASH芯片                               
Autor & date :
*********************************************************************/
void NFChipSel(U32 sel)
{
	if(sel)
		rNFCONF &= ~0x800;
	else
		rNFCONF |= 0x800;
}

/********************************************************************
Function name: NFIsReady(void)
Parameter    : void               
Description	 : 返回NAND FLASH R/B腳的狀態
Return		 : 返回R/B腳的狀態
Argument     : R/B輸出低時,表示讀寫,擦除操作正在進行                           
Autor & date : 
*********************************************************************/
int NFIsReady(void)
{
	return rNFSTAT&1;
}

/********************************************************************
Function name: NFWrCmd(int cmd)
Parameter    : int cmd : 命令參數         
Description	 : 向NAND FLASH 輸入一個命令
Return		 : void
Argument     :                            
Autor & date : void
*********************************************************************/
void NFWrCmd(int cmd)
{
	rNFCMD = cmd;
}

/********************************************************************
Function name: NFWrAddr(int addr)
Parameter    : int addr : 地址         
Description	 : 向NAND FLASH 輸入一個地址
Return		 : void
Argument     :                            
Autor & date : void
*********************************************************************/
void NFWrAddr(int addr)
{
	rNFADDR = addr;
}

/********************************************************************
Function name: NFWrDat(int dat)
Parameter    : int dat : 數據         
Description	 : 向NAND FLASH 輸入一個數據
Return		 : void
Argument     :                            
Autor & date : void
*********************************************************************/
void NFWrDat(int dat)
{
	rNFDATA = dat;
}

/********************************************************************
Function name: NFRdDat(int dat)
Parameter    : int dat : 數據         
Description	 : 向NAND FLASH讀一個數據
Return		 : void
Argument     :                            
Autor & date : void
*********************************************************************/
U8 NFRdDat(void)
{
	return rNFDATA;
}

/********************************************************************
Function name: NFWaitBusy
Parameter    : void        
Description	 : 檢測NAND FLASH是否忙
Return		 : 返回相應的狀態信息
Argument     :                            
Autor & date : void
*********************************************************************/
#ifdef	WIAT_BUSY_HARD
#define	NFWaitBusy()	while(NFIsBusy())
#else
static U32 NFWaitBusy(void)
{
	U8 stat;
	
	NFWrCmd(QUERYCMD);
	do {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品亚洲日本在线桃色| 日韩一区二区三区视频在线观看| 欧美日韩黄视频| 欧美经典一区二区| 久久97超碰国产精品超碰| 色噜噜狠狠色综合欧洲selulu| 亚洲精品一区二区三区香蕉| 亚洲青青青在线视频| 国产成人精品一区二| 精品国产精品网麻豆系列| 亚洲18色成人| 欧美色精品天天在线观看视频| 国产精品色一区二区三区| 国产真实乱子伦精品视频| 91精品麻豆日日躁夜夜躁| 性做久久久久久免费观看| 色综合一区二区| 中文字幕中文字幕在线一区| 九一久久久久久| 日韩一区二区视频| 五月激情综合色| 制服丝袜一区二区三区| 亚洲一区在线观看视频| 一本久久a久久精品亚洲| 国产精品国产a级| 91视频在线观看| 亚洲日本电影在线| 99国产精品久久久久| 国产精品卡一卡二卡三| av网站一区二区三区| 国产精品国产三级国产aⅴ无密码| 国产iv一区二区三区| 久久一区二区三区四区| 国产曰批免费观看久久久| 精品少妇一区二区三区视频免付费| 日韩电影免费在线观看网站| 日韩一区二区三区视频在线| 久久精品久久99精品久久| 日韩欧美中文字幕制服| 国产一区二三区好的| 国产精品系列在线| 99久久精品免费| 夜夜夜精品看看| 欧美色男人天堂| 毛片av一区二区三区| 精品久久久久久久久久久久久久久久久 | 一区二区三区产品免费精品久久75| 91久久精品一区二区二区| 亚洲高清不卡在线| 7777精品伊人久久久大香线蕉的| 久久99精品久久久久久国产越南| 久久精品欧美日韩精品| 91香蕉视频污| 欧美va日韩va| 精品国产免费一区二区三区四区| 亚洲久草在线视频| 激情综合色综合久久综合| 久久久国产午夜精品| 欧美一级一区二区| 麻豆91精品91久久久的内涵| 国产亚洲精品久| 欧美日韩一区二区三区四区| 经典三级视频一区| 夜夜嗨av一区二区三区四季av| 欧美日本高清视频在线观看| 国产一区二区在线视频| 亚洲精品国产成人久久av盗摄| 欧美日本一道本| 高清视频一区二区| 日韩激情av在线| 综合久久久久久| 精品国产一区二区三区忘忧草| 99re在线精品| 国产真实乱对白精彩久久| 一区二区三区日韩在线观看| 国产经典欧美精品| 欧美影院精品一区| 26uuu精品一区二区| 国产传媒日韩欧美成人| 亚洲一区二区三区在线播放| 久久久亚洲综合| 91精品国产91久久综合桃花 | 日本视频中文字幕一区二区三区| 久久久美女毛片| 91精品国产综合久久久蜜臀粉嫩| 成人av在线网| 国产精品一区在线观看你懂的| 亚洲一级二级三级在线免费观看| 中文一区二区完整视频在线观看| 欧美高清视频一二三区 | 国产精品国产馆在线真实露脸 | 一区视频在线播放| 99久久精品免费| 99久久免费视频.com| 国产精品高潮呻吟| 久久影院午夜论| 日韩午夜激情视频| 欧美猛男超大videosgay| 色哦色哦哦色天天综合| 99久久婷婷国产精品综合| 国产成人在线免费观看| 国产精品一区二区视频| 激情六月婷婷综合| 日韩不卡一区二区| 丝袜美腿亚洲综合| 亚洲v日本v欧美v久久精品| 亚洲中国最大av网站| 亚洲女厕所小便bbb| 亚洲精品视频在线看| 最新成人av在线| 亚洲欧美国产毛片在线| 亚洲猫色日本管| 亚洲免费高清视频在线| 玉足女爽爽91| 亚洲国产中文字幕在线视频综合| 91色婷婷久久久久合中文| 喷水一区二区三区| 欧美日韩免费在线视频| 欧美精品黑人性xxxx| 欧美日韩一区在线观看| 欧美精品黑人性xxxx| 欧美肥妇bbw| 日韩精品中文字幕一区| 2欧美一区二区三区在线观看视频| 日韩美女一区二区三区四区| 精品日本一线二线三线不卡| 日韩免费看网站| 欧美国产激情二区三区| 亚洲欧美另类在线| 五月激情丁香一区二区三区| 麻豆高清免费国产一区| 风间由美一区二区av101| 一本一本大道香蕉久在线精品| 欧洲中文字幕精品| 日韩一区二区三区四区五区六区 | 亚洲综合色噜噜狠狠| 日韩精品乱码免费| 狠狠色狠狠色综合系列| jlzzjlzz亚洲日本少妇| 成人aaaa免费全部观看| 欧美男男青年gay1069videost| 亚洲影视在线观看| 国产欧美视频一区二区三区| ...av二区三区久久精品| 亚洲成人1区2区| 国产精品综合视频| 91久久奴性调教| 欧美一级一级性生活免费录像| 国产婷婷色一区二区三区| 亚洲最新视频在线观看| 精品综合久久久久久8888| 成人h版在线观看| 日韩一区二区在线观看视频播放| 国产欧美日韩久久| 日韩av网站免费在线| 成人国产精品免费| 91精品国产一区二区三区香蕉 | 国内精品写真在线观看| 色激情天天射综合网| 26uuu国产电影一区二区| 亚洲人妖av一区二区| 国产自产视频一区二区三区| 欧美亚洲国产一区二区三区| 国产视频911| 性做久久久久久| 一区二区三区高清在线| 不卡视频一二三四| 9人人澡人人爽人人精品| 欧美日韩国产欧美日美国产精品| 久久久精品欧美丰满| 热久久一区二区| 在线观看日产精品| 国产女人水真多18毛片18精品视频| 亚洲午夜一区二区三区| 91婷婷韩国欧美一区二区| 久久久影视传媒| 蜜桃视频一区二区三区在线观看| 日本韩国欧美在线| 国产精品天天摸av网| 国产一区二区在线视频| 欧美tk丨vk视频| 免费成人性网站| 日韩女优av电影| 男女激情视频一区| 4438成人网| 日本美女一区二区三区| 欧美日本一道本在线视频| 亚洲高清免费观看高清完整版在线观看| www.在线成人| 欧美激情一区二区| 国产一区二区三区高清播放| 久久综合久久鬼色| 久久99蜜桃精品| 欧美精品一区视频| 免费人成精品欧美精品| 欧美激情综合在线| 欧美一区二区三区在线电影| 视频一区视频二区中文字幕| 91视频免费看| 樱花影视一区二区|