由于各种原因我的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 flash前4K代码copy到内部sram,并从sram 的0x00000000地址开始执行。

2、通过内部sram的前4K代码完成对nand flash里u-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.bin到0x0开始处

3.设置pc到0x00处使用命令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-boot到nand里,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

 @start.s

 .equ WTCON,     0x53000000  

 .equ BWSCON,    0x48000000  

 .equ CLKDIVN,   0x4c000014    

 .equ MPLLCON,   0x4c000004  

 .equ GPBCON,    0x56000010

 .equ GPBDAT,    0x56000014

 .text  

 .global _start  

 _start:  

     bl close_watch_dog  

     bl set_clock  

     bl init_sdram  

     ldr sp, =0x32000000  

     ldr lr, =loop_halt          @设置返回地址  

 loop_halt:  

     b loop_halt  

 close_watch_dog:  

     ldr r0, =WTCON  

     mov r1, #  

     str r1, [r0]  

     mov pc, lr  

 set_clock:  

     ldr r0, =CLKDIVN  

     mov r1, #0x05   // FCLK:HCLK:PCLK=::, HDIVN=,PDIVN=  

     str r1, [r0]  

     mrc p15, , r1, c1, c0,         /* 读出控制寄存器*/   

     orr r1, r1, #0xc0000000          /* 设置为“asynchronous bus mode?*/  

     mcr p15, , r1, c1, c0,         /* 写入控制寄存器*/  

     ldr r0, =MPLLCON  

     ldr r1, =((0x5c<<)|(0x01<<)|(0x01))  //MPLL_400MHZ    

     str r1, [r0]  

     /* 启动ICACHE */  

     mrc p15, , r0, c1, c0,    @ read control reg  

     orr r0, r0, #(<<)  

     mcr p15, , r0, c1, c0,    @ write it back  

     mov pc, lr  

 init_sdram:  

     /*gpiob */

 ldr r0, =GPBCON  

     mov r1, #0x00

 bic r1,r1, #((<<) | (<<))

 orr r1,r1, #((<<) | (<<))

     str r1, [r0]

 ldr r0, =GPBDAT  

     mov r1, #0x00

 bic r1,r1, #(<<)

     str r1, [r0]  

     /* 如果程序在sdram里,那么就不初始化了 */  

     adr r0, _start  

     ldr r1, =0x30000000   

     cmp r0, r1  

     beq 2f  

     mov r0,#BWSCON  

     adrl r1,mem_cfg_val  

                             @STr [r1],[r0],#  

     mov r4, #  

 :    

     ldr r3, [r1], #  

     str r3, [r0], #  

     add r4, #  

     cmp r4, #  

     bne 1b  

 :    

 ldr r0, =GPBDAT  

     mov r1, #0x00

 bic r1,r1, #(<<)

     str r1, [r0]  

     b .   @stop here

     mov pc, lr  

 .align   

 mem_cfg_val:  

     @ 存储控制器13个寄存器的设置值  

     .long   0x22011110      @ BWSCON  

     .long   0x00000700      @ BANKCON0  

     .long   0x00000700      @ BANKCON1  

     .long   0x00000700      @ BANKCON2  

     .long   0x00000700      @ BANKCON3    

     .long   0x00000700      @ BANKCON4  

     .long   0x00000700      @ BANKCON5  

     .long   0x00018005      @ BANKCON6  

     .long   0x00018005      @ BANKCON7  

     .long   0x008C07A3      @ rEFrESH  

     .long   0x000000B1      @ BANKSIZE  

     .long   0x00000030      @ MrSrB6  

     .long   0x00000030      @ MrSrB7 

Jlink下载u-boot的更多相关文章

  1. Kinetis Design Studio 下使用J-Link下载程序

    1.安装J-Link驱动. 在KDS安装目录下已自带J-Link驱动,进入以下目录(以我的为例): C:\Freescale\KDS_1.1.1\segger\USBDriver 将看到CDC.x64 ...

  2. 图解Stm32使用jlink下载程序时jtag接口(SW和JTAG模式)的简化方法

    转自: http://www.it165.net/embed/html/201308/2332.html 用过stm32的人都知道stm32有两种常用下载程序的方法,用串口和jlink.串口下载方法和 ...

  3. 痞子衡嵌入式:MCUXpresso IDE下使用J-Link下载算法在Flash调试注意事项(i.MXRT500为例)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下使用J-Link下载算法在Flash调试注意事项. 痞子衡前段时间写过一篇小文<为i.MXRT设计更 ...

  4. JLINK下载出现问题

    JLINK 下载报错: RAM CHECK FAILED 说法一: 有一种说法是版本的问题 http://tieba.baidu.com/p/1902940329?red_tag=d180765763 ...

  5. 龙邱STM32单片机用J-LINK下载无法被识别的解决方法

    问题如下: 按照正常步骤使用keil5给龙邱的stm32下载程序,SWD下载方式提示no cortex-m sw device found,JTAG方式提示no cortex-m device fou ...

  6. Jlink下载问题

    在使用Jlink SWD模式进行下载的时候遇到了无法下载的问题. SWD模式下,共有4跟线,VCC.GND.SWCLK.SWDIO JTAG标准接口如下图所示: 一般情况下,目标板卡的 debug V ...

  7. java代码自动下载Spring Boot用户手册

    本示例演示Spring Boot 1.5.9.RELEASE版本的用户手册下载 pom.xml <?xml version="1.0" encoding="UTF- ...

  8. 【转】【JLINK下载失败,STLINK下载失败万能解决方案】JLINK和STLINK都无法下载时的解决办法,此时芯片并没有报废

    很多时候都会认为这个板子无法下载了,其实不是的,有解决办法. 原因如下: 由于客户设置的晶振频率和PLL配置错误时,就会出现这种问题,下载一次程序锁住一次板子,搞的人痛不欲生. 还有错误的外设配置,S ...

  9. MDK5使用Jlink下载显示 no cortex m sw divice 解决办法

    问题: (1)下面界面中找不到设备 (2)下载程序的时候提示" no cortex m sw divice " 然后是"target dll has been cance ...

随机推荐

  1. node.js常用的fs文件系统

    fs文件系统模块对于系统文件及目录进行一些读写操作. 模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync(). 异步的 ...

  2. php+sqlserver处理读取decimal 类型数据,不满1的数字会去掉0的问题

    php+sqlserver处理读取decimal 类型数据,如果数据不满1,会去掉0的问题.比如读取的数据是 0.05,会显示 .05 function convert_number($number) ...

  3. hadoop生态搭建(3节点)-04.hadoop配置

    如果之前没有安装jdk和zookeeper,安装了的请直接跳过 # https://www.oracle.com/technetwork/java/javase/downloads/java-arch ...

  4. python快速改造:基础知识

    改造"Hacking"并不同于破坏"cracking" python快速改造:基础知识 一行就是一行,不管多少,不用加分号 交互式python解释器可以当作计算 ...

  5. R语言绘图:箱线图

    使用ggplot2绘制箱线图 ######*****绘制箱线图代码*****####### data1$学区房 <- factor(data1$school, levels = 0:1, lab ...

  6. STL 一些常用的STL函数(持续更新

    先说一下  一边要用到算法的东西一般要加#include<algorithm>头文件 一.栈和队列 1 栈 :一种线性表 特点  后进先出 头文件  #include<stack&g ...

  7. 洛谷P4016 负载平衡问题

    题目描述 G 公司有 n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入输出格式 输入格式: ...

  8. PHP.45-TP框架商城应用实例-后台20-权限管理-RBAC表构造与代码生成

    权限管理 三张主表{p39_privilege(权限).p39_role(角色).p39_admin(管理)} 两张中间表{p39_role_pri(角色-权限).p39_admin_role(管理- ...

  9. Jexus支持HTTPS协议

    众所周知,在HTTPS页面请求HTTP资料的时候,现代浏览器会拦截,提示用户是否继续,或者直接拦截,提示都不出来. 最近给自己做了个快速书签工具,点击书签就直接把书签发送到服务器地址,然后保存到我的网 ...

  10. Coap协议学习笔记-第一篇

    1. 物联网应用上一般使用单片机(或者其他SOC),单片机的RAM内存一般只有20KB~~128KB左右,然而一个TCP协议栈可能就20KB,所以只能用UDP,因为UDP相对小很多,然后在UDP上加了 ...