uboot杂记之搬移代码操作

来源:互联网 发布:网络安全法 编辑:程序博客网 时间:2024/05/19 02:30

首先列出搬移操作的代码:

int CopyCode2Ram(unsigned long start_addr, unsigned char *buf, int size){unsigned int *pdwDest;unsigned int *pdwSrc;int i;if (bBootFrmNORFlash()){pdwDest = (unsigned int *)buf;pdwSrc  = (unsigned int *)start_addr;/* 浠?NOR Flash鍚姩 */for (i = 0; i < size / 4; i++){pdwDest[i] = pdwSrc[i];}return 0;}else{/* 鍒濆鍖朜AND Flash */nand_init_ll();/* 浠?NAND Flash鍚姩 */if (NF_ReadID() == 0x76 )nand_read_ll(buf, start_addr, (size + NAND_BLOCK_MASK)&~(NAND_BLOCK_MASK));elsenand_read_ll_lp(buf, start_addr, (size + NAND_BLOCK_MASK_LP)&~(NAND_BLOCK_MASK_LP));return 0;}}
对于为什么要搬移代码到sdram和如何判断是nand启动还是nor启动的方法,可以参考前面文章:

uboot第一阶段分析

下面只是分析nand启动的话,是如何对硬件进行操作的。

参考:Nandflash驱动深度分析

一、nand_init_ll分析:

void nand_init_ll(void){S3C2440_NAND * s3c2440nand = (S3C2440_NAND *)0x4e000000;#define TACLS   0#define TWRPH0  3#define TWRPH1  0/* 璁剧疆鏃跺簭 */s3c2440nand->NFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4);/* 浣胯兘NAND Flash鎺у埗鍣? 鍒濆鍖朎CC, 绂佹鐗囬€?*/s3c2440nand->NFCONT = (1<<4)|(1<<1)|(1<<0);/* 澶嶄綅NAND Flash */nand_reset();}