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

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

?? flash.c

?? 最新的BOOTLOADER,供大家參考使用。
?? C
字號:
#include "../inc/44blib.h"


typedef struct {
	unsigned short * start;
	const unsigned int size;
} sector_t;

typedef struct {
	const char * name;
	const int manufactor;
	const int device_id;
	volatile unsigned short * CMD_ADDR0;
	volatile unsigned short * CMD_ADDR1;
	sector_t sector[6];
} flash_t;

flash_t flash_list[] = {
	{
		"SST39VF1601",
		0xbf,
		0x234B,
		(volatile unsigned short *)(0x5555*2),
		(volatile unsigned short *)(0x2aaa*2),
		{
			{(unsigned short *)0x000000, 0x1000},
			{(unsigned short *)0x200000, 0}
		}
	},
	{
		"SST39VF160",
		0xbf,
		0x2782,
		(volatile unsigned short *)(0x5555*2),
		(volatile unsigned short *)(0x2aaa*2),
		{
			{(unsigned short *)0x000000, 0x1000},
			{(unsigned short *)0x200000, 0}
		}
	},
	{
		"MX29LV160T",
		0xc2,
		0x22c4,
		(volatile unsigned short *)(0x555*2),
		(volatile unsigned short *)(0x2aa*2),
		{
			{ (unsigned short *)0x000000, 0x10000 },
			{ (unsigned short *)0x1f0000, 0x8000 },
			{ (unsigned short *)0x1f8000, 0x2000 },
			{ (unsigned short *)0x1fa000, 0x2000 },
			{ (unsigned short *)0x1fc000, 0x4000 },
			{ (unsigned short *)0x200000, 0 }
		}
	},
	{
		"MX29LV160B",
		0xc2,
		0x2249,
		(volatile unsigned short *)(0x555*2),
		(volatile unsigned short *)(0x2aa*2),
		{
			{ (unsigned short *)0x000000, 0x4000 },
			{ (unsigned short *)0x004000, 0x2000 },
			{ (unsigned short *)0x006000, 0x2000 },
			{ (unsigned short *)0x008000, 0x8000 },
			{ (unsigned short *)0x010000, 0x10000 },
			{ (unsigned short *)0x200000, 0 }
		}
	}
};

flash_t * current_flash;



flash_t * flash_probe()
{
	int tmp, i;
	for (i=0; i<sizeof(flash_list)/sizeof(flash_list[0]); i++) {
		current_flash = flash_list + i;
		*current_flash->CMD_ADDR0 = 0xaaaa;
		*current_flash->CMD_ADDR1 = 0x5555;
		*current_flash->CMD_ADDR0 = 0x9090;
		tmp = *(unsigned short *)0;
		if (tmp == current_flash->manufactor) {
			tmp = *(unsigned short *)2;
			*current_flash->CMD_ADDR0 = 0xf0f0;
			if (tmp == current_flash->device_id)
				break;
		}
	}
	if (i == sizeof(flash_list)/sizeof(flash_list[0]))
		current_flash = 0;
	return current_flash;
}

int flash_erase(volatile unsigned short * addr)
{
	int count = 5000000;

	if (!current_flash)
		return 0;

	*current_flash->CMD_ADDR0 = 0xaaaa;
	*current_flash->CMD_ADDR1 = 0x5555;
	*current_flash->CMD_ADDR0 = 0x8080;
	*current_flash->CMD_ADDR0 = 0xaaaa;
	*current_flash->CMD_ADDR1 = 0x5555;
	*addr = 0x3030;

	while (--count && ((*addr & 0xff) != 0xff));
	
	return count;
}

int flash_write(volatile unsigned short * addr, const unsigned short * data, unsigned int len)
{
	int count;
	register unsigned short tmp, tmp2;
	if (!current_flash)
		return 0;

	len = (len+1)/2;
	while (len--) {
		tmp = *data;
		*current_flash->CMD_ADDR0 = 0xaaaa;
		*current_flash->CMD_ADDR1 = 0x5555;
		*current_flash->CMD_ADDR0 = 0xa0a0;
		*addr = tmp;
		count = 10000;
		while (--count && ((tmp2=*addr) != tmp));
		if (count == 0)
			break;
		addr++;
		data++;
	}
	
	if (count == 0)
		Uart_Printf("Failed @ 0x%06x, req: 0x%04x, act: 0x%04x, now: 0x%04x\n", addr, (unsigned)*data, (unsigned)tmp2, (unsigned)*addr);
	return count;
}



/******************************************************************************
【功能說明】獲取Falsh的ID號
******************************************************************************/
unsigned int GetFlashID(void)
{
	flash_t * flash;
	flash = flash_probe();
	if (flash) {
		Uart_Printf("FLASH Type: %s\n", flash->name);
		return (flash->manufactor<<16 | flash->device_id);
	}
	Uart_Printf("Unsupported Flash, ID=0x%08x!\n", flash->manufactor<<16 | flash->device_id);
	return 0;
}

/******************************************************************************
【功能說明】從Flash指定地址Readstart開始讀取Size個數據到DataPtr
******************************************************************************/
void FlashRead(unsigned int ReadStart, unsigned short *DataPtr, unsigned int Size)
{
	int i;

	for(i=0; i<Size/2; i++)
		DataPtr[i] = ((unsigned short *)ReadStart)[i];

}

/******************************************************************************
【功能說明】從指定扇區begin開始,將size個來自指針data的數據編程到Flash
******************************************************************************/
int SectorProg(unsigned int begin, unsigned short *data, unsigned int size)
{
	unsigned int i, actual_size;
	while (size) {
		for (i=0; ; i++) {
			if (current_flash->sector[i].size == 0)
				return 1;
			if ((unsigned int)current_flash->sector[i+1].start > begin)
				break;
		}
		
		if (begin % current_flash->sector[i].size) {
			Uart_Printf("Unaligned sector, ignored!\n");
			return 1;
		}
		
		if (size < current_flash->sector[i].size)
			actual_size = size;
		else
			actual_size = current_flash->sector[i].size;
		
		Uart_Printf("Flash Erase 0x%06x ", begin);
		if (flash_erase((unsigned short *)begin))
			Uart_Printf("OK!\n");
		else {
			Uart_Printf("Failed!\n");
			return 1;
		}
		Uart_Printf("Flash Burn 0x%06x ", begin);
		if (flash_write((unsigned short *)begin, data, actual_size))
			Uart_Printf("OK!\n");
		else {
			//Uart_Printf("Failed!\n");
			return 1;
		}
		begin += current_flash->sector[i].size;
		data += current_flash->sector[i].size/2;
		size -= actual_size;
	}
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区高清| 亚洲国产成人在线| 久久午夜电影网| 欧美性受xxxx黑人xyx性爽| 国产精品18久久久| 国产一区二区精品在线观看| 蜜臀av一区二区在线观看| 日韩精品亚洲一区| 在线视频中文字幕一区二区| 精品一区二区免费看| 麻豆精品久久久| 精品亚洲成a人| 国产剧情一区二区| av电影在线观看不卡| 99精品热视频| 欧美日韩一级片网站| 日韩无一区二区| 欧美亚洲另类激情小说| 久久色在线视频| 精品一区精品二区高清| 欧美一区二区三区免费在线看| 亚洲一区免费观看| 色欲综合视频天天天| 日韩久久一区二区| www.66久久| 18成人在线视频| 99久久精品免费精品国产| 国产欧美日韩另类一区| 国产成人无遮挡在线视频| 国产亚洲欧美在线| 国产成人av一区二区三区在线 | 国产一区久久久| 日韩一级完整毛片| 日韩精品电影一区亚洲| 欧美美女一区二区在线观看| 亚洲福利国产精品| 欧美三级视频在线| 亚洲chinese男男1069| 欧美视频一区二区三区四区| 午夜伊人狠狠久久| 欧美精品久久天天躁| 免费成人在线视频观看| 日韩一级大片在线观看| 国产一区二区三区综合| 国产偷v国产偷v亚洲高清| 成人黄色777网| 一区二区三区在线视频观看| 欧美日韩精品福利| 国产最新精品精品你懂的| 国产欧美日韩三级| 欧美在线一区二区| 免费精品视频在线| 亚洲国产高清aⅴ视频| 色噜噜夜夜夜综合网| 爽好多水快深点欧美视频| 日韩精品一区二区三区在线| 国产精品18久久久久久久久| 自拍偷拍亚洲激情| 欧美日韩视频在线观看一区二区三区| 日韩av电影天堂| 久久久99精品久久| 在线亚洲免费视频| 狠狠色丁香九九婷婷综合五月| 国产精品久久久久久久久免费桃花| 欧美色图天堂网| 有码一区二区三区| 91啦中文在线观看| 亚洲婷婷综合久久一本伊一区| 国产一区二区三区电影在线观看| 欧美一级片在线观看| 日韩激情一区二区| 欧美肥妇bbw| 日韩中文欧美在线| 91精品国产乱码| 日韩福利电影在线观看| 制服丝袜av成人在线看| 日韩精品一级二级 | 日韩一区二区免费高清| 午夜精品一区二区三区电影天堂| 色婷婷av一区| 亚洲第一福利视频在线| 欧美日韩国产a| 日韩精品亚洲专区| 欧美成人女星排名| 国产成人夜色高潮福利影视| 国产精品国产自产拍高清av| 99精品国产视频| 亚洲小说春色综合另类电影| 欧美高清视频www夜色资源网| 午夜电影一区二区三区| 欧美r级在线观看| 国产精品亚洲午夜一区二区三区| 国产精品乱人伦中文| 在线观看一区二区精品视频| 日韩中文字幕1| 久久久99免费| 91麻豆.com| 久久精品国产澳门| 国产精品灌醉下药二区| 在线视频欧美区| 日韩电影在线免费观看| 久久久天堂av| 色综合咪咪久久| 久久久久久久久久电影| 色拍拍在线精品视频8848| 成人h动漫精品一区二| 国产成人8x视频一区二区| 精品在线亚洲视频| 卡一卡二国产精品 | 懂色av一区二区在线播放| 久久99精品久久久久婷婷| 麻豆成人av在线| 美腿丝袜亚洲综合| 国内精品视频一区二区三区八戒| 蜜桃精品视频在线观看| 韩国三级中文字幕hd久久精品| 久久激五月天综合精品| 视频一区免费在线观看| 午夜影院久久久| 青青草一区二区三区| 国产在线一区观看| 国产凹凸在线观看一区二区| av资源站一区| 色综合一区二区三区| 欧美亚洲综合另类| 91精品国产综合久久福利软件| 51精品视频一区二区三区| 欧美成人综合网站| 国产人成一区二区三区影院| 国产欧美日韩在线观看| 亚洲男人的天堂一区二区| 亚洲国产成人porn| 麻豆91精品视频| 国产91丝袜在线18| 色丁香久综合在线久综合在线观看| 欧美亚洲一区三区| 日韩西西人体444www| 久久精品夜色噜噜亚洲aⅴ| 国产精品理论片在线观看| 一区二区在线观看免费视频播放 | 国产亚洲欧美色| 欧美国产在线观看| 亚洲自拍另类综合| 精品一区二区三区在线视频| 成人精品鲁一区一区二区| 日本精品视频一区二区| 欧美α欧美αv大片| 激情五月婷婷综合| 亚洲一区二区影院| 亚洲自拍与偷拍| 亚洲gay无套男同| 视频一区欧美精品| 美女www一区二区| 奇米精品一区二区三区四区| 日本va欧美va欧美va精品| 丝袜a∨在线一区二区三区不卡| 日韩黄色免费网站| 日韩国产成人精品| 国产在线精品不卡| 不卡的av网站| 91福利视频在线| 69av一区二区三区| 26uuuu精品一区二区| 久久精品欧美一区二区三区麻豆| 国产欧美一区二区精品仙草咪| 国产精品久久久久aaaa| 亚洲影视在线观看| 免费久久99精品国产| 国产剧情av麻豆香蕉精品| 成人一道本在线| 欧美丝袜丝交足nylons| 欧美人伦禁忌dvd放荡欲情| 91精品国产综合久久久久久漫画| 精品日本一线二线三线不卡| 欧美激情一区二区在线| 一区二区三区在线视频播放| 日韩av电影天堂| 福利一区二区在线| 欧美日韩一区在线观看| 欧美精品一区二区三区很污很色的 | 高清国产一区二区三区| 99久久婷婷国产| 欧美久久久久久久久中文字幕| 337p日本欧洲亚洲大胆精品| 中文字幕日韩av资源站| 五月天欧美精品| 成人午夜激情影院| 91精品国产综合久久香蕉麻豆| 日本一区二区成人| 日韩精品福利网| 99精品国产视频| 精品国产百合女同互慰| 亚洲摸摸操操av| 精品中文av资源站在线观看| 一本大道久久a久久综合婷婷| 日韩一区二区三区在线视频| 亚洲天堂av一区| 国产一区二区三区在线观看精品| 色8久久人人97超碰香蕉987| 久久久美女毛片|