搜索各个引脚的值,比如R/nB接在Xm0FRnB0上,搜索Xm0FRnB0,发现Xm0FRnB0和ONDXL_INT0/MP03_4共用一个引脚,上图中将各个信号线的复用引脚全部在左边用红色标注出来。
2.1配置片选信号引脚
查找到nCE接在复用引脚Xm0CSn2/NFCSn0/MP01_2上,打开S5PV210芯片手册,P185页查找到MP0_1 Control Registe,MP0_1CON[2]的配置如下:
所以,只需将这一位,配置成011,才能识别成Nand Flash。
/*ELFIN_GPIO_BASE 0xE0200000*/ ldr r0, =ELFIN_GPIO_BASE /*Nand Flash nCE pin*/ ldr r1, [r0, #MP01CON_OFFSET] @0x2E0 bic r1, r1, #(0xf<<8) orr r1, r1, #(0x3<<8) str r1, [r0, #MP01CON_OFFSET] @0x2E0将Port Group MP0_1 Control Register 的4-5位全部清为0
/*MP01PUD_OFFSET 0x2E8*/ ldr r1, [r0, #MP01PUD_OFFSET] bic r1, r1, #(0x3<<4) str r1, [r0, #MP01PUD_OFFSET]我们的nCE片选信号是低电平有效,在电路图中,像我们的三星的原理图中,nXX表示低电平有效,而在TI的芯片手册中,XXn表示低电平有效,比如,上面的芯片手册中nCE表示低电平有效,而在TI的芯片手册中,则是CEn,表示的也是低电平片选信号有效,反正看到带n的引脚,即表示低电平有效。
/*MP03CON_OFFSET 0x320*/ ldr r1, [r0, #MP03CON_OFFSET] bic r1, r1, #0xFFFFFF ldr r2, =0x22222222 orr r1, r1, r2 str r1, [r0, #MP03CON_OFFSET]将Port Group MP0_3 Control Register的0-23位全部清为0
/*MP03PUD_OFFSET 0x328*/ ldr r1, [r0, #MP03PUD_OFFSET] ldr r2, =0x3fff bic r1, r1, r2 str r1, [r0, #MP03PUD_OFFSET]2.3 配置Nandf Flash控制器的寄存器NFCONF
/*ELFIN_NAND_BASE 0xB0E00000*/ ldr r0, =ELFIN_NAND_BASE ldr r1, [r0, #NFCONF_OFFSET] ldr r2, =0x777F bic r1, r1, r2 /* NFCONF_VAL (1<<12)|(4<<8)|(1<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0) */ ldr r2, =NFCONF_VAL orr r1, r1, r2 str r1, [r0, #NFCONF_OFFSET]ECC我们先不开,其余的全部配置为0,OK,到此,全部位配置完成。
2.4配置CONTROL REGISTER
ldr r1, [r0, #NFCONT_OFFSET] ldr r2, =0x707C7 bic r1, r1, r2 /*NFCONT_VAL (0x1<<23)|(0x1<<22)|(0<<18)|(0<<17)|(0<<16)|(0<<10)|(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0x2<<1)|(1<<0)*/ ldr r2, =NFCONT_VAL orr r1, r1, r2 str r1, [r0, #NFCONT_OFFSET]OK,至此Nand Flash的低级初始化完成,代码整理如下:
/* * Nand Interface Init for SMDKC110 */ nand_asm_init: /* Setting GPIO for NAND */ /* This setting is NAND initialze code at booting time in iROM. */ ldr r0, =ELFIN_GPIO_BASE ldr r1, [r0, #MP01CON_OFFSET] bic r1, r1, #(0xf<<8) orr r1, r1, #(0x3<<8) str r1, [r0, #MP01CON_OFFSET] /*MP01PUD_OFFSET 0x2E8*/ ldr r1, [r0, #MP01PUD_OFFSET] bic r1, r1, #(0x3<<4) str r1, [r0, #MP01PUD_OFFSET] /*MP03CON_OFFSET 0x320*/ ldr r1, [r0, #MP03CON_OFFSET] bic r1, r1, #0xFFFFFF ldr r2, =0x22222222 orr r1, r1, r2 str r1, [r0, #MP03CON_OFFSET] /*MP03PUD_OFFSET 0x328*/ ldr r1, [r0, #MP03PUD_OFFSET] ldr r2, =0x3fff bic r1, r1, r2 str r1, [r0, #MP03PUD_OFFSET] /*ELFIN_NAND_BASE 0xB0E00000*/ ldr r0, =ELFIN_NAND_BASE ldr r1, [r0, #NFCONF_OFFSET] ldr r2, =0x777F bic r1, r1, r2 /* NFCONF_VAL (0<<12)|(1<<8)|(0<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0) */ ldr r2, =NFCONF_VAL orr r1, r1, r2 str r1, [r0, #NFCONF_OFFSET] ldr r1, [r0, #NFCONT_OFFSET] ldr r2, =0x707C7 bic r1, r1, r2 /*NFCONT_VAL (0x1<<23)|(0x1<<22)|(0<<18)|(0<<17)|(0<<16)|(0<<10)|(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0x2<<1)|(1<<0)*/ ldr r2, =NFCONT_VAL orr r1, r1, r2 str r1, [r0, #NFCONT_OFFSET] mov pc, lrOK,下一步,开始去分析Nand Flash的代码搬移那一块的代码,看Nand Flash是如何工作的。