Jlink下载u-boot

由于各种原因我的fl2440无启动代码,无任何程序,这时要通过jlink来烧录相关boot程序。

 准备工作:

1、Jlink使用jlink commander工具

2、初始化sdram的程序boot.bin

3、运行SDRAM的程序或者bootloader 这里使用u-boot_sdram.bin(至少包含nand擦写烧录和程序加载)

4、正常的u-boot程序u-boot.bin(这里使用的是u-boot-2013.10的版本,这个版本之后的相关配置使用了linux一样配置方法,功能差不多)

 

Bootloader(u-boot)设计启动原理步骤:

1、由于fl2440-I 只提供了nand flash启动,因此cpu启动是本身会把nand flash4K代码copy到内部sram,并从sram 0x00000000地址开始执行。

2、通过内部sram的前4K代码完成对nand flashu-boot程序的读取,并设置pc跳转到正常的u-boot运行。(在编写正常u-boot时要确保前4k代码能正常,即使用位置无关的代码,函数调用bl)

3、在u-boot里对相关内核参数设置或者维护操作处理。

 

BootLoader启动原理知道后,就应该知道内部4k sram必须要有启动代码。现在板子是白片,所以要用jlink给内部sram烧录程序。

 

步骤如下:

1.连接后打开j-link commander,第一次键入connect命令之后一直按enter确定到正常模式

 

 

2.使用loadbin命令下载boot.bin0x0开始处

 

 

3.设置pc0x00处使用命令setpc  0,使用g命令开始运行程序

 

 

4.因为我的boot.bin里初始化了sdram为后期烧录u-boot_sdram.bin使用。在这里我点亮了一个灯方便调试。使用halt命令cpu停掉。并使用loadbin命令将u-boot_sdram.bin烧录到0x32000000处。最后跳转到0x32000000处运行u-boot进行下一步操作。

这个u-boot_sdram.bin实现了nand flash的烧写和串口的通讯并且定位到0x32000000

 

 

5.进入u-boot程序截图如下:

 

 

6.u-boot下使用loady 31000000命令超级终端的ymodem协议把程序加载到sdram这里我加载到0x31000000,注意不要覆盖你sdram里面的u-boot

 

 

7.使用命令nand erase 0 10000 擦除nand,和命令nand write 31000000 0 10000烧录自己的u-bootnand里,reset命令即可进入新的u-boot的。此后nand里面就有相关的u-boot程序了。

 

 

8.新的u-boot如下:

 

 

 

 

其中boot.bin的程序如下使用汇编处理 u-boot_sdram.bin以附件给出https://files.cnblogs.com/files/stardream/boot_u-boot_sdram_bin.7z。

只针对fl2440

  1 @start.s
  2 
  3 .equ WTCON,     0x53000000  
  4 
  5 .equ BWSCON,    0x48000000  
  6 
  7 .equ CLKDIVN,   0x4c000014    
  8 
  9 .equ MPLLCON,   0x4c000004  
 10 
 11 .equ GPBCON,    0x56000010
 12 
 13 .equ GPBDAT,    0x56000014
 14 
 15   
 16 
 17 .text  
 18 
 19 .global _start  
 20 
 21 _start:  
 22 
 23     bl close_watch_dog  
 24 
 25     bl set_clock  
 26 
 27     bl init_sdram  
 28 
 29     ldr sp, =0x32000000  
 30 
 31     ldr lr, =loop_halt          @设置返回地址  
 32 
 33  
 34 
 35 loop_halt:  
 36 
 37     b loop_halt  
 38 
 39       
 40 
 41 close_watch_dog:  
 42 
 43     ldr r0, =WTCON  
 44 
 45     mov r1, #0  
 46 
 47     str r1, [r0]  
 48 
 49     mov pc, lr  
 50 
 51       
 52 
 53 set_clock:  
 54 
 55     ldr r0, =CLKDIVN  
 56 
 57     mov r1, #0x05   // FCLK:HCLK:PCLK=1:4:8, HDIVN=2,PDIVN=1  
 58 
 59     str r1, [r0]  
 60 
 61       
 62 
 63     mrc p15, 0, r1, c1, c0, 0        /* 读出控制寄存器*/   
 64 
 65     orr r1, r1, #0xc0000000          /* 设置为“asynchronous bus mode?*/  
 66 
 67     mcr p15, 0, r1, c1, c0, 0        /* 写入控制寄存器*/  
 68 
 69       
 70 
 71     ldr r0, =MPLLCON  
 72 
 73     ldr r1, =((0x5c<<12)|(0x01<<4)|(0x01))  //MPLL_400MHZ    
 74 
 75     str r1, [r0]  
 76 
 77       
 78 
 79     /* 启动ICACHE */  
 80 
 81     mrc p15, 0, r0, c1, c0, 0   @ read control reg  
 82 
 83     orr r0, r0, #(1<<12)  
 84 
 85     mcr p15, 0, r0, c1, c0, 0   @ write it back  
 86 
 87       
 88 
 89     mov pc, lr  
 90 
 91   
 92 
 93 init_sdram:  
 94 
 95  
 96 
 97     /*gpiob 5*/
 98 
 99 ldr r0, =GPBCON  
100 
101     mov r1, #0x00
102 
103 bic r1,r1, #((3<<10) | (3<<12))
104 
105 orr r1,r1, #((1<<10) | (1<<12))
106 
107     str r1, [r0]
108 
109  
110 
111 ldr r0, =GPBDAT  
112 
113     mov r1, #0x00
114 
115 bic r1,r1, #(1<<5)
116 
117     str r1, [r0]  
118 
119  
120 
121     /* 如果程序在sdram里,那么就不初始化了 */  
122 
123     adr r0, _start  
124 
125     ldr r1, =0x30000000   
126 
127     cmp r0, r1  
128 
129     beq 2f  
130 
131       
132 
133     mov r0,#BWSCON  
134 
135     adrl r1,mem_cfg_val  
136 
137                             @STr [r1],[r0],#4  
138 
139     mov r4, #0  
140 
141 1:    
142 
143     ldr r3, [r1], #4  
144 
145     str r3, [r0], #4  
146 
147     add r4, #1  
148 
149     cmp r4, #13  
150 
151     bne 1b  
152 
153 2:    
154 
155 ldr r0, =GPBDAT  
156 
157     mov r1, #0x00
158 
159 bic r1,r1, #(1<<6)
160 
161     str r1, [r0]  
162 
163     b .   @stop here
164 
165     mov pc, lr  
166 
167   
168 
169 .align 4  
170 
171 mem_cfg_val:  
172 
173     @ 存储控制器13个寄存器的设置值  
174 
175     .long   0x22011110      @ BWSCON  
176 
177     .long   0x00000700      @ BANKCON0  
178 
179     .long   0x00000700      @ BANKCON1  
180 
181     .long   0x00000700      @ BANKCON2  
182 
183     .long   0x00000700      @ BANKCON3    
184 
185     .long   0x00000700      @ BANKCON4  
186 
187     .long   0x00000700      @ BANKCON5  
188 
189     .long   0x00018005      @ BANKCON6  
190 
191     .long   0x00018005      @ BANKCON7  
192 
193     .long   0x008C07A3      @ rEFrESH  
194 
195     .long   0x000000B1      @ BANKSIZE  
196 
197     .long   0x00000030      @ MrSrB6  
198 
199     .long   0x00000030      @ MrSrB7 
View Code

 

posted @ 2018-02-28 11:34  stardream  阅读(860)  评论(0编辑  收藏  举报