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

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

?? norflash驅動寫法.c

?? 本人總結的noflash驅動寫法
?? C
字號:
//**************************************************************************************************
//***	linux-2.6內核中等待的使用例子 : norflash擦除時等待
static int erase_one_block(struct map_info *map, struct flchip *chip,
			   unsigned long addr, unsigned long size)
{
	schedule_timeout(HZ);

	while (flash_is_busy(map, chip->start))
	{
		unsigned long timeout = jiffies + HZ;
		
		/* OK Still waiting */
		if (time_after(jiffies, timeout))
		{
			// 在規定時間沒有等到的出錯處理
			chip->state = FL_READY;
			spin_unlock_bh(chip->mutex);
			printk(KERN_WARNING "%s: waiting for erase to complete "
				"timed out.\n", map->name);

			return -EIO;
		}
	}

}


//**************************************************************************************************
//***
(1)對norflash的認識:
1.norflash有生產ID(用于區分某個廠商的flash)和設備ID(用于區分一個廠商的某種型號的flash)之分
2.norflash的block分為兩類:parameter block 和main block
一般parameter   block的總的size為一個main block的size
3.
塊:是norflash擦除的單位(有32KB和128KB兩種)
分區:屬于同一個分區的共享同一個狀態寄存器

//**************************************************************************************************
//***	norflash操作原理:假設現在討論的norflash連接在cpu的地址空間的0x0C000000位置的intel L18F256 32MB norflash(塊大小為128KB)
/*
intel E28F128J3A150 16MB 16bit norflash 和bf561相連的接法為 :
bf561		<=>	E28F128J3A150

A[23:1] 	=> 	A[23:1]		//bf561給norflash的地址信號
D[15:0]		=>	D[15:0]		//bf561給norflash的數據信號
/AMS0		=>	/CE		//bf561給norflash的片選信號
/AOE		=>	/OE		//bf561給norflash的讀信號
/AWE		=>	/WE		//bf561給norflash的寫信號

			/BYTE		//上拉為高			
			VPEN		//上拉為高
			/RP		//上拉為高
					
*/

1.norflash讀取生產ID和設備ID的步驟:
	1)執行相應的命令序列:=>向norflash的基地址發送命
	*(0x0C000000 + 0x5555) = 0x00AA;
	*(0x0C000000 + 0x2AAA) = 0x0055;
	*(0x0C000000 + 0x5555) = 0x0090;
	2)開始讀取生產ID:
  	(u16)mnfID=*(0x0C000000+0x0);
  	3)開始讀取設備ID:
  	(u16)devID=*(0x0C000000+0x2);
2.以塊為單位擦除norflash的步驟:(假設擦除uboot所在分區:0x0C100000)
	1)禁止flash的寫保護:	//設置EMIFS_CONFIG寄存器的最低位為1(即讓wp引腳輸出為高)
	2)Block unlock 
	*((short*)0x0C100000) = 0x0060;			//塊對齊地址
	*((short*)0x0C100000) = 0x00D0;			//塊對齊地址
	while(!(*((short*)0x0C100000) & 0x0080));	//塊對齊地址
	*((short*)0x0C100000) = 0x00FF;			//設置norflash為read array模式
	3)執行擦除命令序列:=>向要操作的塊地址發送命令
	*((short*)0x0C100000) = 0x0020;			//塊對齊地址,INTEL_ERASE_CMD0
	*((short*)0x0C100000) = 0x00D0;			//塊對齊地址,INTEL_ERASE_CMD1
	while (!(*((short*)0x0C100000) & 0x0080));	//塊對齊地址,等待直到擦除結束	
	5)設置norflash為read array模式
	*((short*)0x0C100000) = 0x00FF;			//讓norflash重新進入read array模式
	6)使能flash的寫保護://設置EMIFS_CONFIG寄存器的最低位為0(即讓wp引腳輸出為低)
3.以塊為單位寫norflash的步驟:(假設寫uboot所在分區:0x0C100000)
/*
發送寫命令(0xE8)->發送數據->發送確認寫命令(0xD0)->確認狀態寄存器命令(0x70)->清掉狀態寄存器命令(0x50)
塊對齊		  字對齊    塊對齊		 字對齊			   字對齊
*/
	1)禁止flash的寫保護://設置EMIFS_CONFIG寄存器的最低位為1(即讓wp引腳輸出為高)
	2)發送寫命令:			//塊對齊地址
	*((short*)0x0C100000)=0x00E8;	//塊對齊地址,program setup command
	while(!(*0x0C100000 & 0x0080));  //塊對齊地址
	3)開始發送要寫到flash的數據 =>(這些數據會在norflash芯片內部的buffer中鎖存起來) =>每次2個字節,因為數據總線寬度為16位
	(short *)ulData = 0x10010000		=>SDRAM的地址
	(long *)psAddress = 0x0C000000		=>Norflash的地址
	for(i=0; i<15; i++)
	 {
	 	*psAddress = ulData[i];
		psAddress++;
	 }
	4)通知norflash將存在自己buffer中的數據寫到norflash的介質上:
	*((short*)0x0C100000)=0x00D0;	//塊對齊地址
	5)讀狀態寄存器,確保步驟4)已經完成
	*0x0C100000 = 0x0070; 	  	//Check Status Register  ,這里是字對齊的地址
	while(!(*0x0C100000 & BIT7));	//字對齊地址
	6)// Check program status.
	if ( *0x0C100000 & 0x0010 )	//字對齊地址
	{	
		*0x0C100000 = 0x0050;	//字對齊地址, Clear Status 		
		*((short*)0x0C100000) = 0x00FF;	//塊對齊地址 Put chip back into read array mode.
		return 1;
	}
	7)使能flash的寫保護://設置EMIFS_CONFIG寄存器的最低位為0(即讓wp引腳輸出為低)		
//**************************************************************************************************
//***	norflash操作原理:假設現在討論的norflash連接在cpu的地址空間的0x0C000000位置的st stm29w640d 8MB norflash(塊大小為64KB,16位寬度)	
//=> 注意ST和intel norflash是有區別的 : 
//   ST的norflash A0可用,  故對16bit的接法為A1接A0,后面引腳類推		   
//intel的norflash A0不可用,故對16bit的接法為A1接A1,后面引腳類推
//
/*
1).st stm29w640d 8MB 16bit norflash 和bf561相連的接法為 :
bf561		<=>	stm29w640d

/ABE3		=>	A0		//注意ABE[3]在這里被當成A1來使用:
A[22:2] 	=> 	A[21:1]		//bf561給norflash的地址信號
D[15:0]		=>	D[15:0]		//bf561給norflash的數據信號
/AMS0		=>	/CE		//bf561給norflash的片選信號
/AOE		=>	/OE		//bf561給norflash的讀信號
/AWE		=>	/WE		//bf561給norflash的寫信號

			RDY		//上拉為高
			/BYTE		//上拉為高
			WP_/VPP		//上拉為高
			/RP		//上拉為高
2).注意ABE[3]在這里被當成A1來使用:
The ABE[3] pin of bf561 has two different functions. When the AMC is configured
to do 16-bit data packing via the Asynchronous Memory Global Control
Register,the ABE[3] pin of bf561 functions as the least significant bit of the address bus (ABE[3] = A1).			
*/
1.norflash讀取生產ID和設備ID的步驟:
	1)執行相應的命令序列:=>向norflash的基地址發送命
	*(0x0C000000 + 0x5555) = 0x00AA;
	*(0x0C000000 + 0x2AAA) = 0x0055;
	*(0x0C000000 + 0x5555) = 0x0090;
	
	2)開始讀取生產ID:
  	(u16)mnfID=*(0x0C000000+0x0);  
  		
  	3)開始讀取設備ID:
  	(u16)devID=*(0x0C000000+0x2); 
  	 	
2.以塊為單位擦除norflash的步驟:(假設擦除uboot所在分區:0x0C100000)
	1)禁止flash的寫保護:	//設置EMIFS_CONFIG寄存器的最低位為1(即讓wp引腳輸出為高)
	2)Block unlock 		//無
	3)執行擦除命令序列:=>向要操作的塊地址發送命令
	*((short*)0x0C100000 + 0x555) = 0x00AA;
	*((short*)0x0C100000 + 0x2AA) = 0x0055;
	*((short*)0x0C100000 + 0x555) = 0x0080;
	*((short*)0x0C100000 + 0x555) = 0x00AA;
	*((short*)0x0C100000 + 0x2AA) = 0x0055;
	*((short*)0x0C100000) = 0x0030;			//塊對齊地址
	while (!(*((short*)0x0C100000) & 0x0080));	//塊對齊地址,等待直到擦除結束	
	
	5)設置norflash為read array模式
	*((short*)0x0C100000) = 0x00FF;			//讓norflash重新進入read array模式
	6)使能flash的寫保護://設置EMIFS_CONFIG寄存器的最低位為0(即讓wp引腳輸出為低)
	
3.以塊為單位寫norflash的步驟:(假設寫uboot所在分區:0x0C100000)
/*
*/
	1)禁止flash的寫保護:		//設置EMIFS_CONFIG寄存器的最低位為1(即讓wp引腳輸出為高)
	2)發送寫命令:			//塊對齊地址
	*((short*)0x0C100000 + 0x555) = 0x00AA;
	*((short*)0x0C100000 + 0x2AA) = 0x0055;
	*((short*)0x0C100000 + 0x555) = 0x00A0;
		
	3)開始發送要寫到flash的數據 =>(這些數據會在norflash芯片內部的buffer中鎖存起來) =>每次2個字節,因為數據總線寬度為16位
	*(volatile U16 *)0x0C100000 = j;
	
	4)通知norflash將存在自己buffer中的數據寫到norflash的介質上:
	
	5)讀狀態寄存器,確保步驟4)已經完成
	while(!(*0x0C100000 & 0x80));	//字對齊地址
	
	6)// Check program status.

	7)使能flash的寫保護://設置EMIFS_CONFIG寄存器的最低位為0(即讓wp引腳輸出為低)		
	
4.讀norflash的步驟:(假設寫uboot所在分區:0x0C100000)	
	1)方法一:
	*((short*)0x0C100000 + 0x555) = 0x00AA;
	*((short*)0x0C100000 + 0x2AA) = 0x0055;	
	
	(short)data = *((short *)0x0C100000+);
	2)方法二:直接讀
	(short)data = *((short *)0x0C100000+);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线视频一区二区三区| 日韩一区二区三区免费观看| 91国产成人在线| 欧美α欧美αv大片| 亚洲综合自拍偷拍| 国产成人欧美日韩在线电影| 欧美日韩小视频| 中文字幕一区二区5566日韩| 裸体一区二区三区| 欧美日韩久久一区二区| 成人欧美一区二区三区视频网页 | 亚洲午夜私人影院| 成人三级伦理片| 久久一日本道色综合| 青青国产91久久久久久| 91精品1区2区| 亚洲美女在线一区| a亚洲天堂av| 亚洲国产成人私人影院tom| 久久不见久久见免费视频7| 精品视频色一区| 亚洲一区二区三区四区五区中文| 99久久99久久精品国产片果冻| 久久综合狠狠综合久久综合88| 午夜国产不卡在线观看视频| 欧美日韩五月天| 亚洲国产一区视频| 在线观看日韩av先锋影音电影院| 一区在线观看视频| 91片黄在线观看| 亚洲精品免费电影| 欧美午夜精品一区二区三区 | 丁香一区二区三区| 日本一区二区高清| proumb性欧美在线观看| 国产精品久久三| 99久久精品免费看| 亚洲综合av网| 欧美绝品在线观看成人午夜影视| 偷拍自拍另类欧美| 69p69国产精品| 老司机免费视频一区二区三区| 日韩精品一区二区三区在线| 韩国毛片一区二区三区| 亚洲国产精品t66y| 91久久香蕉国产日韩欧美9色| 亚洲自拍偷拍av| 91精品国产91综合久久蜜臀| 麻豆成人久久精品二区三区红 | 337p粉嫩大胆色噜噜噜噜亚洲| 国产美女在线精品| 国产精品护士白丝一区av| 在线免费一区三区| 乱一区二区av| 中文字幕一区二区三区在线观看| 欧美在线三级电影| 久久精品国产网站| 中文字幕在线不卡| 91精品国产综合久久精品性色| 极品少妇xxxx精品少妇偷拍| 国产精品久久久久久福利一牛影视 | 成人黄色软件下载| 亚洲欧美视频在线观看| 欧美精品xxxxbbbb| 国产69精品久久久久毛片| 有码一区二区三区| 精品国产1区二区| 91丨porny丨户外露出| 日本一不卡视频| 免费观看久久久4p| 中文字幕av一区二区三区免费看| 在线视频一区二区三| 久久精品国产免费| 亚洲资源中文字幕| 国产亚洲精品aa| 欧美高清www午色夜在线视频| 国产.欧美.日韩| 三级欧美韩日大片在线看| 国产精品水嫩水嫩| 日韩三级免费观看| 欧洲一区二区三区在线| 国产精品白丝jk黑袜喷水| 亚洲午夜久久久久久久久电影网| 久久久综合视频| 7777精品伊人久久久大香线蕉的| 成人毛片在线观看| 国产揄拍国内精品对白| 亚洲一区二区三区自拍| 国产精品美女久久久久久久网站| 欧美一区二区精品久久911| 一本一道久久a久久精品| 国产一区二区三区在线看麻豆| 午夜精品福利一区二区蜜股av| 中文字幕在线观看一区| 国产欧美一区二区精品性色| 精品三级在线看| 欧美福利一区二区| 欧洲亚洲精品在线| 91麻豆123| 91一区二区三区在线观看| 国产成人免费网站| 国产麻豆成人精品| 黄色日韩三级电影| 九九久久精品视频| 久久99国产精品免费网站| 免费高清在线一区| 日本不卡视频在线| 日韩激情中文字幕| 日韩二区在线观看| 日韩av午夜在线观看| 天天色天天操综合| 秋霞电影网一区二区| 奇米色一区二区| 日本vs亚洲vs韩国一区三区二区| 性感美女极品91精品| 亚洲一区二区三区四区在线| 亚洲国产人成综合网站| 亚洲午夜电影在线| 午夜视频一区在线观看| 午夜在线成人av| 天天操天天干天天综合网| 首页国产丝袜综合| 久久精品国产77777蜜臀| 国内精品国产成人| 成人国产精品免费观看视频| 成人丝袜18视频在线观看| 91网站在线播放| 欧美中文字幕久久| 日韩写真欧美这视频| 亚洲精品在线一区二区| 欧美a一区二区| 国产一区不卡精品| 成人午夜在线免费| 欧洲国产伦久久久久久久| 欧美日韩国产首页| 久久午夜电影网| 亚洲三级在线播放| 日日夜夜精品视频免费| 韩国成人福利片在线播放| 成人黄色电影在线| 欧美撒尿777hd撒尿| 精品噜噜噜噜久久久久久久久试看| 久久免费美女视频| 一区二区三区中文字幕精品精品 | 国产91综合一区在线观看| 99久久亚洲一区二区三区青草 | 一区二区三区美女视频| 麻豆一区二区三| 99久久精品国产麻豆演员表| 欧美影视一区二区三区| 精品国产乱子伦一区| 综合av第一页| 六月丁香综合在线视频| 91丨九色丨黑人外教| 日韩欧美一区中文| 亚洲天堂精品视频| 久热成人在线视频| 欧美在线视频全部完| 久久婷婷色综合| 亚洲图片欧美色图| 成人禁用看黄a在线| 日韩一区二区三区视频| 国产精品不卡在线观看| 麻豆一区二区三区| 在线观看欧美黄色| 日本一区二区在线不卡| 日韩和的一区二区| 97精品久久久久中文字幕| 久久在线观看免费| 日本女人一区二区三区| 国产视频不卡一区| 日韩影院免费视频| 色综合久久综合网97色综合| 久久久久久久久久美女| 麻豆中文一区二区| 欧美日韩另类国产亚洲欧美一级| 国产精品婷婷午夜在线观看| 久久国产婷婷国产香蕉| 欧美日韩视频第一区| 亚洲美腿欧美偷拍| 99久久婷婷国产综合精品| 久久久久国产精品厨房| 蜜桃在线一区二区三区| 欧美色国产精品| 一区二区三区在线视频观看58 | 亚洲综合久久久| 91丨porny丨国产入口| 中文在线一区二区| 国产精品自拍一区| 久久久久久久久久久黄色| 久久精品国产久精国产| 日韩一区二区在线看| 免费成人美女在线观看.| 欧美日韩精品二区第二页| 亚洲午夜一二三区视频| 在线观看一区二区视频| 一区二区欧美视频| 欧美三级中文字幕在线观看| 一区二区在线看| 欧美亚洲高清一区二区三区不卡|