[ZLG-ARM] u-boot在s3c2410开发板上移植(NAND Flash Boot)过程

[复制链接]
 楼主| tmake 发表于 2009-7-4 13:33 | 显示全部楼层 |阅读模式
1)u-boot版本1.1.3,gcc&nbsp;version&nbsp;3.3.3&nbsp;(DENX&nbsp;ELDK&nbsp;3.1.1&nbsp;3.3.3-9)<br /><br />2)在Makefile中加入<br />bks2410_config&nbsp;:&nbsp;unconfig<br />@./mkconfig&nbsp;$(@:_config=)&nbsp;arm&nbsp;arm920t&nbsp;bks2410&nbsp;NULL&nbsp;s3c24x0<br />我把我的板子起名叫bks2410,可以依自己的喜好修改<br /><br />3)建立board/bks2410目录,拷贝board/smdk2410下的文件到board/bks2410目录,将smdk2410.c更名为bks2410.c<br /><br />4)cp&nbsp;include/configs/smdk2410.h&nbsp;include/configs/bks2410.h<br /><br />5)将arm-linux-gcc的目录加入到PATH环境变量中,我的是目录/opt/eldk/usr/bin:/opt/eldk/bin<br /><br />6)测试编译能否成功:<br />make&nbsp;bks2410_config<br />make&nbsp;all&nbsp;ARCH=arm<br />生成u-boot.bin就OK了<br /><br />7)依照你自己开发板的内存地址分配情况修改board/bks2410/memsetup.S文件,我的程序:<br />#include&nbsp;<br />#include&nbsp;<br /><br />#define&nbsp;BWSCON&nbsp;0x48000000<br /><br />/*&nbsp;BWSCON&nbsp;*/<br />#define&nbsp;DW8&nbsp;&nbsp;&nbsp;&nbsp;(0x0)<br />#define&nbsp;DW16&nbsp;&nbsp;&nbsp;&nbsp;(0x1)<br />#define&nbsp;DW32&nbsp;&nbsp;&nbsp;&nbsp;(0x2)<br />#define&nbsp;WAIT&nbsp;&nbsp;&nbsp;&nbsp;(0x1&lt&lt2)<br />#define&nbsp;UBLB&nbsp;&nbsp;&nbsp;&nbsp;(0x1&lt&lt3)<br /><br />#define&nbsp;B1_BWSCON&nbsp;&nbsp;&nbsp;&nbsp;(DW32)<br />#define&nbsp;B2_BWSCON&nbsp;&nbsp;&nbsp;&nbsp;(DW16)<br />#define&nbsp;B3_BWSCON&nbsp;&nbsp;&nbsp;&nbsp;(DW16&nbsp;+&nbsp;WAIT&nbsp;+&nbsp;UBLB)<br />#define&nbsp;B4_BWSCON&nbsp;&nbsp;&nbsp;&nbsp;(DW16)<br />#define&nbsp;B5_BWSCON&nbsp;&nbsp;&nbsp;&nbsp;(DW16)<br />#define&nbsp;B6_BWSCON&nbsp;&nbsp;&nbsp;&nbsp;(DW32)<br />#define&nbsp;B7_BWSCON&nbsp;&nbsp;&nbsp;&nbsp;(DW32)<br /><br />/*&nbsp;BANK0CON&nbsp;*/<br />#if&nbsp;0<br />#define&nbsp;B0_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B0_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B0_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7&nbsp;/*&nbsp;14clk&nbsp;*/<br />#define&nbsp;B0_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B0_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B0_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B0_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;normal&nbsp;*/<br />#endif<br /><br />#define&nbsp;B0_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B0_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B0_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7&nbsp;/*&nbsp;14clk&nbsp;*/<br />#define&nbsp;B0_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B0_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B0_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x1<br />#define&nbsp;B0_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;normal&nbsp;*/<br /><br />/*&nbsp;BANK1CON&nbsp;*/<br />#if&nbsp;0<br />#define&nbsp;B1_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B1_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B1_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7&nbsp;/*&nbsp;14clk&nbsp;*/<br />#define&nbsp;B1_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B1_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B1_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B1_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#endif<br /><br />#define&nbsp;B1_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B1_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B1_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7&nbsp;/*&nbsp;14clk&nbsp;*/<br />#define&nbsp;B1_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B1_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B1_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x3<br />#define&nbsp;B1_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0<br /><br />#define&nbsp;B2_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B2_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B2_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7<br />#define&nbsp;B2_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B2_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B2_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B2_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0<br /><br />#if&nbsp;0<br />#define&nbsp;B3_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B3_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;&nbsp;4clk&nbsp;*/<br />#define&nbsp;B3_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7&nbsp;/*&nbsp;14clk&nbsp;*/<br />#define&nbsp;B3_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x1&nbsp;/*&nbsp;&nbsp;1clk&nbsp;*/<br />#define&nbsp;B3_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B3_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;6clk&nbsp;*/<br />#define&nbsp;B3_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;normal&nbsp;*/<br />#endif<br /><br />#define&nbsp;B3_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B3_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;4clk&nbsp;*/<br />#define&nbsp;B3_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7&nbsp;/*&nbsp;14clk&nbsp;*/<br />#define&nbsp;B3_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;1clk&nbsp;*/<br />#define&nbsp;B3_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B3_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;6clk&nbsp;*/<br />#define&nbsp;B3_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;normal&nbsp;*/<br /><br />#define&nbsp;B4_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B4_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B4_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7&nbsp;/*&nbsp;14clk&nbsp;*/<br />#define&nbsp;B4_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B4_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B4_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B4_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;normal&nbsp;*/<br /><br />#define&nbsp;B5_Tacs&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B5_Tcos&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B5_Tacc&nbsp;&nbsp;&nbsp;&nbsp;0x7&nbsp;/*&nbsp;14clk&nbsp;*/<br />#define&nbsp;B5_Tcoh&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B5_Tah&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;&nbsp;0clk&nbsp;*/<br />#define&nbsp;B5_Tacp&nbsp;&nbsp;&nbsp;&nbsp;0x0<br />#define&nbsp;B5_PMC&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;normal&nbsp;*/<br /><br />#define&nbsp;B6_MT&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;SDRAM&nbsp;*/<br />#define&nbsp;B6_Trcd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1<br />#define&nbsp;B6_SCAN&nbsp;&nbsp;&nbsp;&nbsp;0x1&nbsp;/*&nbsp;9bit&nbsp;*/<br /><br />#define&nbsp;B7_MT&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;SDRAM&nbsp;*/<br />#define&nbsp;B7_Trcd&nbsp;&nbsp;&nbsp;&nbsp;0x1&nbsp;/*&nbsp;3clk&nbsp;*/<br />#define&nbsp;B7_SCAN&nbsp;&nbsp;&nbsp;&nbsp;0x1&nbsp;/*&nbsp;9bit&nbsp;*/<br /><br />/*&nbsp;REFRESH&nbsp;parameter&nbsp;*/<br />#define&nbsp;REFEN&nbsp;&nbsp;&nbsp;&nbsp;0x1&nbsp;/*&nbsp;Refresh&nbsp;enable&nbsp;*/<br />#define&nbsp;TREFMD&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;CBR(CAS&nbsp;before&nbsp;RAS)/Auto&nbsp;refresh&nbsp;*/<br />#define&nbsp;Trp&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;/*&nbsp;2clk&nbsp;*/<br />#define&nbsp;Trc&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;/*&nbsp;7clk&nbsp;*/<br />#define&nbsp;Tchr&nbsp;&nbsp;&nbsp;&nbsp;0x2&nbsp;/*&nbsp;3clk&nbsp;*/<br />#define&nbsp;REFCNT&nbsp;&nbsp;&nbsp;&nbsp;1113&nbsp;/*&nbsp;period=15.6us,&nbsp;HCLK=60Mhz,&nbsp;(2048+1-15.6*60)&nbsp;*/<br />/**************************************/<br /><br />_TEXT_BASE:<br />.word&nbsp;TEXT_BASE<br /><br />.globl&nbsp;memsetup<br />memsetup:<br />/*&nbsp;memory&nbsp;control&nbsp;configuration&nbsp;*/<br />/*&nbsp;make&nbsp;r0&nbsp;relative&nbsp;the&nbsp;current&nbsp;location&nbsp;so&nbsp;that&nbsp;it&nbsp;*/<br />/*&nbsp;reads&nbsp;SMRDATA&nbsp;out&nbsp;of&nbsp;FLASH&nbsp;rather&nbsp;than&nbsp;memory&nbsp;!&nbsp;*/<br />adr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;SMRDATA<br />/*ldr&nbsp;r1,&nbsp;_TEXT_BASE*/<br />/*sub&nbsp;r0,&nbsp;r0,&nbsp;r1*/<br />ldr&nbsp;r1,&nbsp;=BWSCON&nbsp;/*&nbsp;Bus&nbsp;Width&nbsp;Status&nbsp;Controller&nbsp;*/<br />add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r0,&nbsp;#13*4<br />0:<br />ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r0],&nbsp;#4<br />str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r1],&nbsp;#4<br />cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r0<br />bne&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0b<br /><br />/*&nbsp;everything&nbsp;is&nbsp;fine&nbsp;now&nbsp;*/<br />mov&nbsp;pc,&nbsp;lr<br /><br />.ltorg<br />/*&nbsp;the&nbsp;literal&nbsp;pools&nbsp;origin&nbsp;*/<br /><br />SMRDATA:<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;(0+(B1_BWSCON&lt&lt4)+(B2_BWSCON&lt&lt8)+(B3_BWSCON&lt&lt12)+(B4_BWSCON&lt&lt16)+(B5_BWSCON&lt&lt20)+(B6_BWSCON&lt&lt24)+(B7_BWSCON&lt&lt28))<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;((B0_Tacs&lt&lt13)+(B0_Tcos&lt&lt11)+(B0_Tacc&lt&lt8)+(B0_Tcoh&lt&lt6)+(B0_Tah&lt&lt4)+(B0_Tacp&lt&lt2)+(B0_PMC))<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;((B1_Tacs&lt&lt13)+(B1_Tcos&lt&lt11)+(B1_Tacc&lt&lt8)+(B1_Tcoh&lt&lt6)+(B1_Tah&lt&lt4)+(B1_Tacp&lt&lt2)+(B1_PMC))<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;((B2_Tacs&lt&lt13)+(B2_Tcos&lt&lt11)+(B2_Tacc&lt&lt8)+(B2_Tcoh&lt&lt6)+(B2_Tah&lt&lt4)+(B2_Tacp&lt&lt2)+(B2_PMC))<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;0x1f7c/*((B3_Tacs&lt&lt13)+(B3_Tcos&lt&lt11)+(B3_Tacc&lt&lt8)+(B3_Tcoh&lt&lt6)+(B3_Tah&lt&lt4)+(B3_Tacp&lt&lt2)+(B3_PMC))*/<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;((B4_Tacs&lt&lt13)+(B4_Tcos&lt&lt11)+(B4_Tacc&lt&lt8)+(B4_Tcoh&lt&lt6)+(B4_Tah&lt&lt4)+(B4_Tacp&lt&lt2)+(B4_PMC))<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;((B5_Tacs&lt&lt13)+(B5_Tcos&lt&lt11)+(B5_Tacc&lt&lt8)+(B5_Tcoh&lt&lt6)+(B5_Tah&lt&lt4)+(B5_Tacp&lt&lt2)+(B5_PMC))<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;((B6_MT&lt&lt15)+(B6_Trcd&lt&lt2)+(B6_SCAN))<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;((B7_MT&lt&lt15)+(B7_Trcd&lt&lt2)+(B7_SCAN))<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;((REFEN&lt&lt23)+(TREFMD&lt&lt22)+(Trp&lt&lt20)+(Trc&lt&lt18)+(Tchr&lt&lt16)+REFCNT)<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;0x31<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;0x30<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;0x30<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />8)在board/bks2410加入NAND&nbsp;Flash读函数,建立nand_read.c,加入如下内容(copy&nbsp;from&nbsp;vivi):<br />#include&nbsp;<br /><br />#define&nbsp;__REGb(x)&nbsp;(*(volatile&nbsp;unsigned&nbsp;char&nbsp;*)(x))<br />#define&nbsp;__REGi(x)&nbsp;(*(volatile&nbsp;unsigned&nbsp;int&nbsp;*)(x))<br />#define&nbsp;NF_BASE&nbsp;&nbsp;0x4e000000<br />#define&nbsp;NFCONF&nbsp;&nbsp;__REGi(NF_BASE&nbsp;+&nbsp;0x0)<br />#define&nbsp;NFCMD&nbsp;&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x4)<br />#define&nbsp;NFADDR&nbsp;&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x8)<br />#define&nbsp;NFDATA&nbsp;&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0xc)<br />#define&nbsp;NFSTAT&nbsp;&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x10)<br /><br />#define&nbsp;BUSY&nbsp;1<br />inline&nbsp;void&nbsp;wait_idle(void)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while(!(NFSTAT&nbsp;&&nbsp;BUSY))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt10;&nbsp;i++);<br />}<br /><br />#define&nbsp;NAND_SECTOR_SIZE&nbsp;512<br />#define&nbsp;NAND_BLOCK_MASK&nbsp;&nbsp;(NAND_SECTOR_SIZE&nbsp;-&nbsp;1)<br /><br />/*&nbsp;low&nbsp;level&nbsp;nand&nbsp;read&nbsp;function&nbsp;*/<br />int<br />nand_read_ll(unsigned&nbsp;char&nbsp;*buf,&nbsp;unsigned&nbsp;long&nbsp;start_addr,&nbsp;int&nbsp;size)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;j;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((start_addr&nbsp;&&nbsp;NAND_BLOCK_MASK)&nbsp;||&nbsp;(size&nbsp;&&nbsp;NAND_BLOCK_MASK))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;&nbsp;/*&nbsp;invalid&nbsp;alignment&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;chip&nbsp;Enable&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NFCONF&nbsp;&=&nbsp;~0x800;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt10;&nbsp;i++);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=start_addr;&nbsp;i&nbsp;&lt&nbsp;(start_addr&nbsp;+&nbsp;size);)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;READ0&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFCMD&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Write&nbsp;Address&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;i&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;9)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;17)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;25)&nbsp;&&nbsp;0xff;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait_idle();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;&nbsp;j&nbsp;&lt&nbsp;NAND_SECTOR_SIZE;&nbsp;j++,&nbsp;i++)&nbsp;{<br />*buf&nbsp;=&nbsp;(NFDATA&nbsp;&&nbsp;0xff);<br />buf++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;chip&nbsp;Disable&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NFCONF&nbsp;|=&nbsp;0x800;&nbsp;/*&nbsp;chip&nbsp;disable&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />9)修改board/bks2410/Makefile为<br />OBJS&nbsp;:=&nbsp;bks2410.o&nbsp;flash.o&nbsp;nand_read.o<br /><br />10)修改cpu/arm920t/start.S文件<br />在ldr&nbsp;pc,&nbsp;_start_armboot之前加入:<br />#ifdef&nbsp;CONFIG_S3C2410_NAND_BOOT<br />&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;copy_myself<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;@&nbsp;jump&nbsp;to&nbsp;ram<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r1,&nbsp;=on_the_ram<br />&nbsp;&nbsp;add&nbsp;&nbsp;pc,&nbsp;r1,&nbsp;#0<br />&nbsp;&nbsp;nop<br />&nbsp;&nbsp;nop<br />&nbsp;&nbsp;1:&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;infinite&nbsp;loop<br />&nbsp;&nbsp;<br />on_the_ram:<br />#endif<br /><br />在_start_armboot:&nbsp;.word&nbsp;start_armboot之后加入:<br />#ifdef&nbsp;CONFIG_S3C2410_NAND_BOOT<br />copy_myself:<br />&nbsp;&nbsp;mov&nbsp;r10,&nbsp;lr<br />@&nbsp;reset&nbsp;NAND<br />&nbsp;&nbsp;mov&nbsp;r1,&nbsp;#NAND_CTL_BASE<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r2,&nbsp;=0xf830&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;initial&nbsp;value<br />&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;bic&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;#0x800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;enable&nbsp;chip<br />&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;mov&nbsp;r2,&nbsp;#0xff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;RESET&nbsp;command<br />&nbsp;&nbsp;strb&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCMD]<br />&nbsp;&nbsp;mov&nbsp;r3,&nbsp;#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;wait<br /><br />1:add&nbsp;&nbsp;r3,&nbsp;r3,&nbsp;#0x1<br />&nbsp;&nbsp;cmp&nbsp;r3,&nbsp;#0xa<br />&nbsp;&nbsp;blt&nbsp;&nbsp;&nbsp;1b<br />2:ldr&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFSTAT]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;wait&nbsp;ready<br />&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0x1<br />&nbsp;&nbsp;beq&nbsp;&nbsp;2b<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;orr&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;#0x800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;disable&nbsp;chip<br />&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br /><br />@&nbsp;get&nbsp;read&nbsp;to&nbsp;call&nbsp;C&nbsp;functions&nbsp;(for&nbsp;nand_read())<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;sp,&nbsp;DW_STACK_START&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;setup&nbsp;stack&nbsp;pointer<br />&nbsp;&nbsp;mov&nbsp;fp,&nbsp;#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;no&nbsp;previous&nbsp;frame,&nbsp;so&nbsp;fp=0<br /><br />@&nbsp;copy&nbsp;vivi&nbsp;to&nbsp;RAM<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r0,&nbsp;=UBOOT_RAM_BASE<br />&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;#0x0<br />&nbsp;&nbsp;mov&nbsp;r2,&nbsp;#0x20000<br />&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;nand_read_ll<br />&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;#0x0<br />&nbsp;&nbsp;beq&nbsp;&nbsp;ok_nand_read<br /><br />#ifdef&nbsp;CONFIG_DEBUG_LL<br />&nbsp;&nbsp;bad_nand_read:<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r0,&nbsp;STR_FAIL<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r1,&nbsp;SerBase<br />&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;PrintWord<br />1:b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;infinite&nbsp;loop<br />&nbsp;&nbsp;#endif<br /><br />ok_nand_read:<br />#ifdef&nbsp;CONFIG_DEBUG_LL<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r0,&nbsp;STR_OK<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r1,&nbsp;SerBase<br />&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;PrintWord<br />#endif<br /><br />@&nbsp;verify<br />&nbsp;&nbsp;mov&nbsp;r0,&nbsp;#0<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r1,&nbsp;=UBOOT_RAM_BASE<br />&nbsp;&nbsp;mov&nbsp;r2,&nbsp;#0x400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;4&nbsp;bytes&nbsp;*&nbsp;1024&nbsp;=&nbsp;4K-bytes<br />go_next:<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r3,&nbsp;[r0],&nbsp;#4<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r4,&nbsp;[r1],&nbsp;#4<br />&nbsp;&nbsp;teq&nbsp;&nbsp;&nbsp;r3,&nbsp;r4<br />&nbsp;&nbsp;bne&nbsp;&nbsp;notmatch<br />&nbsp;&nbsp;subs&nbsp;r2,&nbsp;r2,&nbsp;#4<br />&nbsp;&nbsp;beq&nbsp;&nbsp;done_nand_read<br />&nbsp;&nbsp;bne&nbsp;&nbsp;go_next<br /><br />notmatch:<br />#ifdef&nbsp;CONFIG_DEBUG_LL<br />&nbsp;&nbsp;sub&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;#4<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r1,&nbsp;SerBase<br />&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;PrintHexWord<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r0,&nbsp;STR_FAIL<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r1,&nbsp;SerBase<br />&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;PrintWord<br />#endif<br />1:b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1b<br />done_nand_read:<br />#ifdef&nbsp;CONFIG_DEBUG_LL<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r0,&nbsp;STR_OK<br />&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;r1,&nbsp;SerBase<br />&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;PrintWord<br />#endif<br />&nbsp;&nbsp;mov&nbsp;pc,&nbsp;r10<br />@&nbsp;clear&nbsp;memory<br />@&nbsp;r0:&nbsp;start&nbsp;address<br />@&nbsp;r1:&nbsp;length<br />&nbsp;&nbsp;mem_clear:<br />&nbsp;&nbsp;mov&nbsp;r2,&nbsp;#0<br />&nbsp;&nbsp;mov&nbsp;r3,&nbsp;r2<br />&nbsp;&nbsp;mov&nbsp;r4,&nbsp;r2<br />&nbsp;&nbsp;mov&nbsp;r5,&nbsp;r2<br />&nbsp;&nbsp;mov&nbsp;r6,&nbsp;r2<br />&nbsp;&nbsp;mov&nbsp;r7,&nbsp;r2<br />&nbsp;&nbsp;mov&nbsp;r8,&nbsp;r2<br />&nbsp;&nbsp;mov&nbsp;r9,&nbsp;r2<br /><br />clear_loop:<br />&nbsp;&nbsp;stmia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0!,&nbsp;{r2-r9}<br />&nbsp;&nbsp;subs&nbsp;r1,&nbsp;r1,&nbsp;#(8&nbsp;*&nbsp;4)<br />&nbsp;&nbsp;bne&nbsp;&nbsp;clear_loop<br />&nbsp;&nbsp;mov&nbsp;pc,&nbsp;lr<br /><br />#endif&nbsp;@&nbsp;CONFIG_S3C2410_NAND_BOOT<br /><br />在文件的最后加入:<br />&nbsp;&nbsp;&nbsp;.align&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br />DW_STACK_START:<br />.word&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STACK_BASE+STACK_SIZE-4<br /><br />11)修改include/configs/bks2410.h文件,添加如下内容:<br />/*<br />*&nbsp;Nandflash&nbsp;Boot<br />*/<br />#define&nbsp;CONFIG_S3C2410_NAND_BOOT&nbsp;1<br />#define&nbsp;STACK_BASE&nbsp;&nbsp;&nbsp;&nbsp;0x33f00000<br />#define&nbsp;STACK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;0x8000<br />#define&nbsp;UBOOT_RAM_BASE&nbsp;&nbsp;&nbsp;&nbsp;0x33f80000<br />/*&nbsp;NAND&nbsp;Flash&nbsp;Controller&nbsp;*/<br />#define&nbsp;NAND_CTL_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x4E000000<br />#define&nbsp;bINT_CTL(Nb)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__REG(INT_CTL_BASE&nbsp;+&nbsp;(Nb))<br />/*&nbsp;Offset&nbsp;*/<br />#define&nbsp;oNFCONF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00<br />#define&nbsp;oNFCMD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x04<br />#define&nbsp;oNFADDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08<br />#define&nbsp;oNFDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0c<br />#define&nbsp;oNFSTAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10<br />#define&nbsp;oNFECC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x14<br /><br />12)重新编译u-boot<br />make&nbsp;all&nbsp;ARCH=arm<br /><br />13)通过jtag将u-boot烧写到flash中就可以从NAND&nbsp;flash启动了<br /><br /><br />我的u-boot启动信息:<br /><br />U-Boot&nbsp;1.1.3&nbsp;(May&nbsp;&nbsp;6&nbsp;2006&nbsp;-&nbsp;18:13:59)<br /><br />U-Boot&nbsp;code:&nbsp;33F80000&nbsp;-&gt&nbsp;33F967C4&nbsp;&nbsp;BSS:&nbsp;-&gt&nbsp;33F9AAAC<br />RAM&nbsp;Configuration:<br />Bank&nbsp;#0:&nbsp;30000000&nbsp;64&nbsp;MB<br />Flash:&nbsp;512&nbsp;kB<br />***&nbsp;Warning&nbsp;-&nbsp;bad&nbsp;CRC,&nbsp;using&nbsp;default&nbsp;environment<br /><br />In:&nbsp;&nbsp;&nbsp;&nbsp;serial<br />Out:&nbsp;&nbsp;&nbsp;serial<br />Err:&nbsp;&nbsp;&nbsp;serial<br />BKS2410&nbsp;#<br />&nbsp;<br /> &nbsp;&nbsp;<br />
qtopia 发表于 2009-7-4 13:41 | 显示全部楼层

好资料

  
lpc2410 发表于 2009-7-6 13:16 | 显示全部楼层

谢谢分享

  
chun1chun 发表于 2009-7-18 13:35 | 显示全部楼层

不錯,很詳細,有幫助

  
armqt 发表于 2009-7-24 17:37 | 显示全部楼层

很详细的步骤

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

179

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部