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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? flash.c

?? bootload for ARM 4510 developement
?? C
字號:
#include "types.h"#include "bioscall.h"#include "flash.h"const struct flash_info table[] = {	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF040,		name: "SST SST39VF040",		size: 0x00080000,		erasesize: 0x01000	},	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF080,		name: "SST SST39VF080",		size: 0x00100000,		erasesize: 0x01000	},	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF016,		name: "SST SST39VF016",		size: 0x00200000,		erasesize: 0x01000        },        {                mfr_id: MANUFACTURER_HY,                dev_id: HY29LV320B,                name: "HY29LV320B",                size: 0x00400000,                erasesize: 0x02000	}};
struct mtd_info mtd;static unsigned char read8(struct mtd_info *mtd, unsigned long adr){	return *(unsigned char *)((mtd->offset + adr) | NOCACHE_BIT);}static unsigned short read16(struct mtd_info *mtd, unsigned long adr){	return *(unsigned short *)((mtd->offset + adr) | NOCACHE_BIT);}static unsigned long read32(struct mtd_info *mtd, unsigned long adr){	return *(unsigned long *)((mtd->offset + adr) | NOCACHE_BIT);}static void write8(struct mtd_info *mtd, unsigned char d, unsigned long adr){	*(unsigned char *)((mtd->offset + adr) | NOCACHE_BIT) = d;}static void write16(struct mtd_info *mtd, unsigned short d, unsigned long adr){	*(unsigned short *)((mtd->offset + adr) | NOCACHE_BIT) = d;}static void write32(struct mtd_info *mtd, unsigned long d, unsigned long adr){	*(unsigned long *)((mtd->offset + adr) | NOCACHE_BIT) = d;}static wide_read(struct mtd_info *mtd, unsigned long addr){	if (mtd->buswidth == 1) {		return read8(mtd, addr);	} else if (mtd->buswidth == 2) {		return read16(mtd, addr);	} else if (mtd->buswidth == 4) {		return read32(mtd, addr);        }	return 0;}static void wide_write(struct mtd_info *mtd, unsigned long val, unsigned long addr){	if (mtd->buswidth == 1) {		write8(mtd, val, addr);	} else if (mtd->buswidth == 2) {		write16(mtd, val, addr);	} else if (mtd->buswidth == 4) {		write32(mtd, val, addr);	}}static unsigned long make_cmd(struct mtd_info *mtd, unsigned long cmd){	return cmd;}static void send_unlock(struct mtd_info *mtd, unsigned long base){	wide_write(mtd, (CMD_UNLOCK_DATA_1 << 16) | CMD_UNLOCK_DATA_1,		   base + (mtd->buswidth * ADDR_UNLOCK_1));	wide_write(mtd, (CMD_UNLOCK_DATA_2 << 16) | CMD_UNLOCK_DATA_2,		   base + (mtd->buswidth * ADDR_UNLOCK_2));}static void send_cmd(struct mtd_info *mtd, unsigned long base, unsigned long cmd){	send_unlock(mtd, base);	wide_write(mtd, make_cmd(mtd, cmd),		   base + (mtd->buswidth * ADDR_UNLOCK_1));}static void send_cmd_to_addr(struct mtd_info *mtd, unsigned long base,				    unsigned long cmd, unsigned long addr){	send_unlock(mtd, base);	wide_write(mtd, make_cmd(mtd, cmd), addr);}static int probe_chip(struct mtd_info *mtd, unsigned long base, struct flchip *chip){	unsigned long mfr_id;	unsigned long dev_id;	int table_size = sizeof(table) / sizeof(table[0]);	int i;	/* Enter autoselect mode. */	send_cmd(mtd, base, CMD_RESET_DATA);	send_cmd(mtd, base, CMD_MANUFACTURER_UNLOCK_DATA);	mfr_id = wide_read(mtd, base + (mtd->buswidth * ADDR_MANUFACTURER));	dev_id = wide_read(mtd, base + (mtd->buswidth * ADDR_DEVICE_ID));	/* Exit autoselect mode. */	send_cmd(mtd, base, CMD_RESET_DATA);#if 0//HHTECH wing.z	for (i = 0; i < table_size; i++) {		if ((mfr_id == table[i].mfr_id) &&		    (dev_id == table[i].dev_id)) {			if (chip) {				chip->start = base;				chip->size = table[i].size;				chip->erasesize = table[i].erasesize;				printf("Found ");				printf(table[i].name);				printf(" at %08x\r\n", base);			}			break;		}	}#endif	if (chip) {			chip->start = 0x00000000;			chip->size = 0x00200000;			chip->erasesize = 0x10000;//erasesize should not larger then 8K for the begining of 64k flash.		  }//HHTECH modified by wing.z	if (i == table_size)		return -1;	return 0;}static int flash_is_busy(struct mtd_info *mtd, unsigned long addr){	return ((wide_read(mtd, addr) & D6_MASK) !=		(wide_read(mtd, addr) & D6_MASK));}static int erase_one_block(struct mtd_info *mtd, struct flchip *chip,	unsigned long adr, unsigned long size){	int times_left;	int ret = 0;	adr += chip->start;	send_cmd(mtd, chip->start, CMD_SECTOR_ERASE_UNLOCK_DATA);	send_cmd_to_addr(mtd, chip->start, CMD_SECTOR_ERASE_UNLOCK_DATA_2, adr);	times_left = 250000;//times_left = 500000;	while (times_left-- && flash_is_busy(mtd, adr));	if (!times_left) {		ret = -1;	}	return 0;}static int flash_erase_internal(struct mtd_info *mtd, unsigned long adr, unsigned long size){	struct flchip *chip;	int chip_start, chip_end;	int i, n;	printf("Flash Erasing\r\n");	for (i = 0; i < mtd->numchips; i++) {		chip = &mtd->chips[i];		chip_start = chip->start;		chip_end = chip->start + chip->size;		if ((adr >= chip_end) || (adr + size <= chip_start))			continue;		if (chip_start < adr)			chip_start = adr;		if (chip_end > adr + size)			chip_end = adr + size;//HHTECH erase begining 64K flash with 8k erasesizefor(n=chip_start; n<0x0010000; n +=0x2000){			erase_one_block(mtd, chip, n - chip->start, mtd->erasesize);}//by HHTECH wing.z#if 0		for (n = chip_start; n < chip_end; n += mtd->erasesize) {			erase_one_block(mtd, chip, n - chip->start, mtd->erasesize);		}#endif		for (n = 0x0010000; n < chip_end; n += mtd->erasesize) {			erase_one_block(mtd, chip, n - chip->start, mtd->erasesize);		}	}	return 0;}static int flash_read_internal(struct mtd_info *mtd, unsigned long from,	unsigned long len, unsigned long *retlen, unsigned char *buf){	if ((from + len) > mtd->size)		return -1;	memcpy(buf, (char *)((mtd->offset + from) | NOCACHE_BIT), len);	*retlen = len;	return 0;}static int write_one_word(struct mtd_info *mtd, struct flchip *chip,			  unsigned long adr, unsigned long datum){	int times_left;	int ret = 0;	adr += chip->start;	send_cmd(mtd, chip->start, CMD_PROGRAM_UNLOCK_DATA);	wide_write(mtd, datum, adr);	times_left = 500000;	while (times_left-- && flash_is_busy(mtd, adr));	if (!times_left) {		ret = -1;	}	return ret;}static int flash_write_internal(struct mtd_info *mtd, unsigned long to,	unsigned long len, unsigned long *retlen, const unsigned char *buf){	struct flchip *chip;	int chip_start, chip_end;	int i, n;	*retlen = 0;	for (i = 0; i < mtd->numchips; i++) {		chip = &mtd->chips[i];		chip_start = chip->start;		chip_end = chip->start + chip->size;		if ((to >= chip_end) || (to + len <= chip_start))			continue;		if (chip_start < to)			chip_start = to;		if (chip_end > to + len)			chip_end = to + len;		for (n = chip_start; n < chip_end; n=n+2) {			write_one_word(mtd, chip, n - chip->start, buf[n+1 - to]*256 + buf[n - to]);		}		*retlen += chip_end - chip_start;	}	return 0;}int flash_init(void){	unsigned long flash_base;	struct flchip *chip;	int i;	mtd.offset = bios_rom_base();	mtd.buswidth = 2;	mtd.size = 0;	mtd.numchips = 0;	flash_base = 0;	for (i = 0; i < MAX_CHIPS; i++) {		chip = &mtd.chips[i];		if (probe_chip(&mtd, flash_base, chip) == 0) {			if (i == 0)				mtd.erasesize = chip->erasesize;			else {				if (mtd.erasesize != chip->erasesize)					break;			}			mtd.size += chip->size;			mtd.numchips++;			flash_base+= chip->size;		} else			break;	}	return 0;}int flash_erase(unsigned long adr, unsigned long size){	return flash_erase_internal(&mtd, adr, size);}int flash_read(unsigned long from,	unsigned long len, unsigned long *retlen, unsigned char *buf){	return flash_read_internal(&mtd, from, len, retlen, buf);}int flash_write(unsigned long to,	unsigned long len, unsigned long *retlen, const unsigned char *buf){	return flash_write_internal(&mtd, to, len, retlen, buf);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品区一区二区| 欧美日韩激情一区二区三区| 久久影院视频免费| 国内成人免费视频| 国产精品欧美经典| 色av一区二区| 午夜精品影院在线观看| 日韩视频在线你懂得| 国产在线精品一区二区| 国产精品美女久久久久久久久| 91麻豆高清视频| 香蕉久久夜色精品国产使用方法| 欧美一级欧美三级在线观看| 久久精品国产一区二区| 亚洲国产精品av| 欧美日韩另类一区| 激情五月激情综合网| 亚洲色图另类专区| 777亚洲妇女| 国产白丝精品91爽爽久久 | 欧美顶级少妇做爰| 国产一区久久久| 亚洲狠狠丁香婷婷综合久久久| 欧美一区二区三区爱爱| 高清视频一区二区| 亚洲一二三区不卡| 国产视频一区二区三区在线观看| 在线免费观看视频一区| 久久成人精品无人区| 亚洲欧美电影院| 久久亚洲一级片| 欧美日韩亚洲另类| 成人av午夜电影| 青青青伊人色综合久久| 国产精品久久看| 精品国产一区二区在线观看| 在线观看不卡视频| 国产成人av一区二区三区在线| 亚洲国产成人va在线观看天堂| 国产人久久人人人人爽| 欧美日韩午夜精品| 95精品视频在线| 国产九色sp调教91| 亚洲福利电影网| 中文字幕中文字幕在线一区 | 久久久99精品久久| 欧美三日本三级三级在线播放| 国产suv精品一区二区6| 免播放器亚洲一区| 亚洲小说欧美激情另类| 日韩毛片在线免费观看| 久久一区二区三区国产精品| 在线播放欧美女士性生活| 99精品视频中文字幕| 国产精品亚洲午夜一区二区三区 | 久久精品噜噜噜成人88aⅴ| 一个色在线综合| 亚洲人精品一区| 国产精品美日韩| 久久久激情视频| 精品精品国产高清a毛片牛牛 | 国产夫妻精品视频| 免费不卡在线观看| 日韩av中文字幕一区二区三区| 亚洲一区二区精品视频| 亚洲色图清纯唯美| 17c精品麻豆一区二区免费| 国产女主播视频一区二区| 久久久国产精品午夜一区ai换脸| 日韩精品资源二区在线| 欧美一级淫片007| 91精品在线麻豆| 欧美老年两性高潮| 欧美日韩国产在线观看| 欧美精品一卡两卡| 欧美日韩第一区日日骚| 欧美日本不卡视频| 欧美精品在线观看一区二区| 7777精品伊人久久久大香线蕉经典版下载| 欧美视频第二页| 欧美精品日韩精品| 日韩欧美123| www国产精品av| 久久久久国产精品免费免费搜索| 久久九九99视频| 国产精品乱码一区二区三区软件| 国产欧美日韩在线观看| 国产精品麻豆视频| 一区二区三区日韩欧美| 天天av天天翘天天综合网色鬼国产| 亚洲国产成人tv| 老色鬼精品视频在线观看播放| 狠狠久久亚洲欧美| 成人国产在线观看| 欧美色国产精品| 日韩精品一区二区三区视频| 国产亚洲欧美色| 亚洲精品国产无套在线观| 婷婷综合在线观看| 国产美女精品人人做人人爽 | 色婷婷激情久久| 欧美情侣在线播放| 精品国产青草久久久久福利| 亚洲国产精品ⅴa在线观看| 一区二区三区精品在线观看| 日韩国产欧美在线观看| 国模一区二区三区白浆| 日本久久一区二区| 日韩一级黄色大片| 中文字幕制服丝袜一区二区三区| 亚洲午夜视频在线观看| 极品少妇一区二区| 91网上在线视频| 欧美成人一区二区三区片免费| 国产精品免费观看视频| 日本午夜一本久久久综合| 粉嫩13p一区二区三区| 欧美日韩在线综合| 日本一区二区三区久久久久久久久不 | 国产色产综合产在线视频| 亚洲视频综合在线| 蜜臀久久久久久久| 色婷婷综合久久久久中文| 精品久久久久99| 午夜精品一区二区三区电影天堂 | 久久国产三级精品| 日本高清不卡aⅴ免费网站| xfplay精品久久| 亚洲高清免费观看高清完整版在线观看 | 免费欧美在线视频| 91麻豆免费看片| 精品999在线播放| 亚洲综合免费观看高清完整版在线| 国内偷窥港台综合视频在线播放| 91老师片黄在线观看| 久久久久国产精品厨房| 婷婷国产v国产偷v亚洲高清| heyzo一本久久综合| 日韩欧美激情在线| 亚洲r级在线视频| 91成人网在线| 中文字幕一区二区视频| 国产成人精品在线看| 欧美一级高清片在线观看| 亚洲一二三区视频在线观看| 99国产精品视频免费观看| 国产喷白浆一区二区三区| 蜜臀久久99精品久久久久宅男| 欧美日韩国产精品自在自线| 亚洲免费高清视频在线| 成人国产精品免费观看动漫| 26uuuu精品一区二区| 精品一区二区三区蜜桃| 欧美一级理论片| 日韩av一二三| 91精品国产乱码久久蜜臀| 亚洲第一在线综合网站| 欧美午夜精品一区二区三区| 亚洲免费大片在线观看| 91亚洲午夜精品久久久久久| 国产精品超碰97尤物18| 99久久综合狠狠综合久久| 国产精品三级av| 99久久99久久精品免费看蜜桃| 日本一区二区免费在线 | 日av在线不卡| 日韩欧美国产精品一区| 麻豆91免费观看| 亚洲精品在线网站| 国模无码大尺度一区二区三区| 欧美电影免费观看高清完整版在线观看 | 亚洲精品国产精品乱码不99 | 欧美一区二区视频免费观看| 午夜精品福利一区二区三区av| 欧美三级蜜桃2在线观看| 亚洲国产婷婷综合在线精品| 欧美亚洲一区三区| 婷婷综合另类小说色区| 欧美成人福利视频| 国产乱子伦视频一区二区三区 | 亚洲欧洲三级电影| 91污在线观看| 亚洲成av人片在线观看无码| 91精品国产高清一区二区三区蜜臀| 久久精品国产一区二区三区免费看 | 69堂精品视频| 精品亚洲国内自在自线福利| 久久一日本道色综合| 成人91在线观看| 一区二区三区在线免费观看| 制服丝袜亚洲色图| 国产美女精品人人做人人爽| 中文字幕日韩一区| 欧美片在线播放| 国产一本一道久久香蕉| 亚洲日本中文字幕区| 在线播放一区二区三区| 高清视频一区二区| 午夜欧美视频在线观看 | 精品国产一区二区三区不卡|