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

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

?? nandboot.c

?? TI DM6446 EVM 串口下載程序 使用環境:windows dos環境或者linux 使用前需安裝mono
?? C
字號:
/* --------------------------------------------------------------------------
    FILE        : nandboot.c 				                             	 	        
    PURPOSE     : NAND user boot loader file
    PROJECT     : DaVinci User Boot-Loader and Flasher
    AUTHOR      : Daniel Allred
    DATE	    : Jan-22-2007
 
    HISTORY
 	     v1.00 completion 							 						      
 	          Daniel Allred - Jan-22-2007   
 	     v1.10 
 	          DJA - Feb-1-2007 - Added support for the magic number written by the
 	                             SDI CCS flashing tool.  They always write a the 
 	                             application as a binary image and use the 
 	                             UBL_MAGIC_DMA magic number in the application
 	                             header.
 ----------------------------------------------------------------------------- */

#ifdef UBL_NAND

#include "ubl.h"
#include "nand.h"
#include "uart.h"
#include "util.h"

// Structure with info about the NAND flash device
extern NAND_INFO gNandInfo;

// Entrypoint for application we are decoding out of flash
extern Uint32 gEntryPoint;

// structure for holding details about UBL stored in NAND
volatile NAND_BOOT	gNandBoot;

// Function to find out where the application is and copy to RAM
Uint32 NAND_Copy() {
	Uint32 count,blockNum;
	Uint32 i;
	Uint32 magicNum;
	Uint8 *rxBuf;		// RAM receive buffer
	Uint32 entryPoint2,temp;
	Uint32 block,page;
	Uint32 readError = E_FAIL;
	Bool failedOnceAlready = FALSE;

    // Maximum application size, in S-record form, is 16 MB
	rxBuf = (Uint8*)ubl_alloc_mem((MAX_IMAGE_SIZE>>1));
	blockNum = START_APP_BLOCK_NUM;

	UARTSendData((Uint8 *)"Starting NAND Copy...\r\n", FALSE);
	
	// NAND Initialization
	if (NAND_Init() != E_PASS)
		return E_FAIL;
    
NAND_startAgain:
	if (blockNum > END_APP_BLOCK_NUM)
		return E_FAIL;  /* NAND boot failed and return fail to main */

	// Read data about Application starting at START_APP_BLOCK_NUM, Page 0
	// and possibly going until block END_APP_BLOCK_NUM, Page 0
	for(count=blockNum; count <= END_APP_BLOCK_NUM; count++)
	{		
		if(NAND_ReadPage(count,0,rxBuf) != E_PASS)
			continue;

		magicNum = ((Uint32 *)rxBuf)[0];

		/* Valid magic number found */
		if((magicNum & 0xFFFFFF00) == MAGIC_NUMBER_VALID)
		{
			UARTSendData((Uint8 *) "Valid MagicNum found.\r\n", FALSE);
			blockNum = count;
			break;
		}

	}

	// Never found valid header in any page 0 of any of searched blocks
	if (count > END_APP_BLOCK_NUM)
	{
		return E_FAIL;
	}

	// Fill in NandBoot header
	gNandBoot.entryPoint = *(((Uint32 *)(&rxBuf[4])));/* The first "long" is entry point for Application */
	gNandBoot.numPage = *(((Uint32 *)(&rxBuf[8])));	 /* The second "long" is the number of pages */
	gNandBoot.block = *(((Uint32 *)(&rxBuf[12])));	 /* The third "long" is the block where Application is stored in NAND */
	gNandBoot.page = *(((Uint32 *)(&rxBuf[16])));	 /* The fourth "long" is the page number where Application is stored in NAND */
	gNandBoot.ldAddress = *(((Uint32 *)(&rxBuf[20])));	 /* The fifth "long" is the Application load address */

	// If the application is already in binary format, then our 
	// received buffer can point to the specified load address
	// instead of the temp location used for storing an S-record
	// Checking for the UBL_MAGIC_DMA guarantees correct usage with the 
	// Spectrum Digital CCS flashing tool, flashwriter_nand.out
	if ((magicNum == UBL_MAGIC_BIN_IMG) || (magicNum == UBL_MAGIC_DMA))
	{
	    // Set the copy location to final run location
		rxBuf = (Uint8 *)gNandBoot.ldAddress;
		// Free temp memory rxBuf used to point to
		set_current_mem_loc(get_current_mem_loc() - (MAX_IMAGE_SIZE>>1));
	}

NAND_retry:
	/* initialize block and page number to be used for read */
	block = gNandBoot.block;
	page = gNandBoot.page;

    // Perform the actual copying of the application from NAND to RAM
	for(i=0;i<gNandBoot.numPage;i++) {
	    // if page goes beyond max number of pages increment block number and reset page number
		if(page >= gNandInfo.pagesPerBlock) {
			page = 0;
			block++;
		}
		readError = NAND_ReadPage(block,page++,(&rxBuf[i*gNandInfo.bytesPerPage]));	/* Copy the data */

		// We attempt to read the app data twice.  If we fail twice then we go look for a new
		// application header in the NAND flash at the next block.
		if(readError != E_PASS) {
			if(failedOnceAlready) {
				blockNum++;
				goto NAND_startAgain;
			}
		    else {
		        failedOnceAlready = TRUE;
				goto NAND_retry;
			}
		}
	}

	// Application was read correctly, so set entrypoint
	gEntryPoint = gNandBoot.entryPoint;

	/* Data is already copied to RAM, just set the entry point */
	if(magicNum == UBL_MAGIC_SAFE)
	{
		// Or do the decode of the S-record 
		if(SRecDecode( (Uint8 *)rxBuf, 
		               gNandBoot.numPage * gNandInfo.bytesPerPage,
					   (Uint32 *) &entryPoint2,
		               (Uint32 *) &temp ) != E_PASS)
		{
		    UARTSendData("S-record decode failure.", FALSE);
			return E_FAIL;
		}
		
		if (gEntryPoint != entryPoint2)
		{
			UARTSendData("WARNING: S-record entrypoint does not match header entrypoint.\r\n", FALSE);
			UARTSendData("WARNING: Using header entrypoint - results may be unexpected.\r\n", FALSE);
		}
	}
	
	return E_PASS;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区国产精品| 久久先锋影音av鲁色资源网| 色av综合在线| 在线播放中文一区| 国产精品久99| 蜜臀久久久久久久| 色狠狠桃花综合| 久久综合色一综合色88| 亚洲综合图片区| 国产高清久久久久| 91精品国产综合久久久久久久 | 国产成人99久久亚洲综合精品| 成人免费毛片片v| 日韩网站在线看片你懂的| 1000精品久久久久久久久| 久久精品国产精品青草| 在线精品视频小说1| 国产精品免费网站在线观看| 另类中文字幕网| 欧洲精品在线观看| 中文字幕亚洲不卡| 国产成人精品网址| 久久综合成人精品亚洲另类欧美 | 美女一区二区三区在线观看| av一二三不卡影片| 久久久夜色精品亚洲| 热久久久久久久| 欧美性感一类影片在线播放| 中文一区一区三区高中清不卡| 久久精品国产精品青草| 91精品国产综合久久精品图片| 亚洲天堂福利av| av在线不卡免费看| 日本一区二区不卡视频| 国产伦精品一区二区三区免费迷| 91精品国产综合久久精品app| 亚洲自拍偷拍图区| 91免费观看视频在线| 国产精品久久午夜| eeuss鲁片一区二区三区在线观看| 久久精品亚洲麻豆av一区二区| 久久精品国产77777蜜臀| 日韩免费一区二区| 国内精品国产三级国产a久久| 日韩免费一区二区| 国产一区二区三区在线观看免费视频| 日韩欧美一区在线| 国模一区二区三区白浆| 国产精品香蕉一区二区三区| 91精品欧美综合在线观看最新| 亚洲精品美腿丝袜| 在线精品视频一区二区| 午夜国产精品一区| 欧美精品三级在线观看| 蜜臀av国产精品久久久久| 日韩免费视频线观看| 国产精品白丝jk黑袜喷水| 国产日韩一级二级三级| 成人高清免费观看| 一区二区免费在线| 91麻豆精品国产自产在线| 久久国产免费看| 亚洲欧洲美洲综合色网| 欧美性生活影院| 美女在线一区二区| 91精品婷婷国产综合久久竹菊| 中文字幕不卡一区| 日本道色综合久久| 日本不卡一区二区| 国产日韩av一区| 欧美在线不卡一区| 国内精品国产三级国产a久久| 国产精品卡一卡二| 欧美日韩国产首页| 国产成人综合视频| 亚洲成人av福利| 久久九九国产精品| 欧美日韩国产免费| 国产成人在线看| 一区二区三区波多野结衣在线观看| 777午夜精品视频在线播放| 韩国女主播一区二区三区| 亚洲天堂精品视频| 日韩欧美色电影| 色一情一伦一子一伦一区| 麻豆精品一二三| 亚洲三级在线播放| 精品国产乱码久久| 91福利精品视频| 国产精品一品二品| 日韩高清国产一区在线| 亚洲欧洲国产专区| 精品成人一区二区三区| 欧美在线播放高清精品| 成人动漫在线一区| 国产一区二区三区免费看| 亚洲综合久久av| 国产午夜精品一区二区| 制服丝袜亚洲精品中文字幕| 99免费精品视频| 国产精品亚洲第一区在线暖暖韩国| 亚洲福中文字幕伊人影院| 亚洲视频一二三| 欧美精品一区二区三区久久久| 欧美精品色综合| 91福利视频网站| av亚洲精华国产精华精华| 国产成人在线观看免费网站| 麻豆极品一区二区三区| 亚洲电影你懂得| 亚洲乱码日产精品bd| 日韩美女精品在线| 国产欧美视频一区二区| 精品国产伦一区二区三区免费| 欧美三级在线看| 日本韩国欧美在线| 91色综合久久久久婷婷| av电影在线观看不卡| 成人做爰69片免费看网站| 国产夫妻精品视频| 国产成都精品91一区二区三| 成人做爰69片免费看网站| 国产91在线观看丝袜| 国产suv精品一区二区6| 国产成a人亚洲| 床上的激情91.| 成人午夜激情在线| 成人app网站| 97精品视频在线观看自产线路二| 成人亚洲精品久久久久软件| 国产.欧美.日韩| av成人老司机| 91视频在线观看免费| 91看片淫黄大片一级在线观看| 91影视在线播放| 色美美综合视频| 欧美伦理影视网| 7777精品伊人久久久大香线蕉| 在线播放日韩导航| 日韩西西人体444www| 久久亚洲春色中文字幕久久久| 久久亚洲综合色| 国产精品国产三级国产| 1000部国产精品成人观看| 夜夜嗨av一区二区三区网页| 亚洲成人www| 麻豆精品视频在线观看视频| 国产成人综合在线| 91蝌蚪porny| 91精品国产综合久久精品| 精品少妇一区二区| 最新不卡av在线| 亚洲va欧美va天堂v国产综合| 另类调教123区| 国产aⅴ综合色| 欧洲一区二区三区在线| 日韩美女在线视频| 最新成人av在线| 日产国产欧美视频一区精品| 国产成人在线色| 欧美日韩二区三区| 亚洲国产精品激情在线观看| 亚洲二区在线观看| 懂色中文一区二区在线播放| 欧美四级电影网| 国产色综合一区| 亚洲 欧美综合在线网络| 国产一区二区美女| 欧美日韩免费观看一区二区三区| 精品国产乱码久久久久久蜜臀| 亚洲日本电影在线| 国产一区二区三区av电影| 在线观看亚洲专区| 欧美国产综合一区二区| 日本强好片久久久久久aaa| aa级大片欧美| 精品播放一区二区| 亚洲成人激情av| 99精品国产视频| 久久久三级国产网站| 婷婷六月综合亚洲| 一本久久精品一区二区| 久久毛片高清国产| 奇米精品一区二区三区在线观看| 99久久er热在这里只有精品15| 欧美v日韩v国产v| 亚洲成人一区二区在线观看| www.av精品| 国产欧美一区二区三区网站| 青青国产91久久久久久| 欧美日韩在线电影| 亚洲乱码国产乱码精品精可以看 | 2023国产精品自拍| 婷婷丁香激情综合| 欧美色图12p| 一区二区三区四区高清精品免费观看 | 成人综合在线网站| 久久尤物电影视频在线观看| 奇米色777欧美一区二区| 欧美色男人天堂|