天嵌 ARM开发社区

 找回密码
 注册
查看: 2319|回复: 6

uboot移植到Nand flash无法启动

[复制链接]
2424330594 发表于 2013-10-31 14:25:23 | 显示全部楼层 |阅读模式
我用SecureCRT [1] Download u-boot or STEPLDR.nb1 or other bootloader to Nand Flash第一项,下载u-boot到Nand flash,开关拨到Nand重新上电后白屏,led没有亮,SecureCRT输出一个乱码,下面是start.S代码,谁帮我分析一下原因,谢谢了。

  1. start_code:
  2.         /*
  3.          * set the cpu to SVC32 mode
  4.          */
  5.         mrs        r0,cpsr
  6.         bic        r0,r0,#0x1f
  7.         orr        r0,r0,#0xd3
  8.         msr        cpsr,r0

  9.         /*bl coloured_LED_init
  10.         bl red_LED_on*/

  11. #if        defined(CONFIG_AT91RM9200DK) || defined(CONFIG_AT91RM9200EK)
  12.         /*
  13.          * relocate exception table
  14.          */
  15.         ldr        r0, =_start
  16.         ldr        r1, =0x0
  17.         mov        r2, #16
  18. copyex:
  19.         subs        r2, r2, #1
  20.         ldr        r3, [r0], #4
  21.         str        r3, [r1], #4
  22.         bne        copyex
  23. #endif

  24. #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
  25.         /* turn off the watchdog */

  26. # if defined(CONFIG_S3C2400)
  27. #  define pWTCON                0x15300000
  28. #  define INTMSK                0x14400008        /* Interupt-Controller base addresses */
  29. #  define CLKDIVN        0x14800014        /* clock divisor register */
  30. #else
  31. #  define pWTCON                0x53000000
  32. #  define INTMSK                0x4A000008        /* Interupt-Controller base addresses */
  33. #  define INTSUBMSK        0x4A00001C
  34. #  define CLKDIVN        0x4C000014        /* clock divisor register */
  35. # endif

  36.         ldr     r0, =pWTCON
  37.         mov     r1, #0x0
  38.         str     r1, [r0]

  39.         /*
  40.          * mask all IRQs by setting all bits in the INTMR - default
  41.          */
  42.         mov        r1, #0xffffffff
  43.         ldr        r0, =INTMSK
  44.         str        r1, [r0]
  45. # if defined(CONFIG_S3C2410)
  46.         ldr        r1, =0x3ff
  47.         ldr        r0, =INTSUBMSK
  48.         str        r1, [r0]
  49. # endif

  50. # if defined(CONFIG_S3C2440)
  51.         ldr        r1, =0x7fff
  52.         ldr        r0, =INTSUBMSK
  53.         str        r1, [r0]
  54. # endif

  55. #if defined(CONFIG_S3C2440)
  56. #define MPLLCON 0x4C000004
  57. #define UPLLCON 0x4C000008
  58.         ldr r0, =CLKDIVN
  59.         mov r1, #5
  60.         str r1, [r0]

  61.         ldr r0, =MPLLCON
  62.         ldr r1, =0x7f021
  63.         str r1, [r0]

  64.         ldr r0, =UPLLCON
  65.         ldr r1, =0x38022
  66.         str r1, [r0]
  67. #else
  68.         /* FCLK:HCLK:PCLK = 1:2:4 */
  69.         /* default FCLK is 120 MHz ! */
  70.         ldr        r0, =CLKDIVN
  71.         mov        r1, #3
  72.         str        r1, [r0]
  73. #endif
  74. #endif        /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */

  75.         /*
  76.          * we do sys-critical inits only at reboot,
  77.          * not when booting from ram!
  78.          */
  79. #ifndef CONFIG_SKIP_LOWLEVEL_INIT
  80.         bl        cpu_init_crit
  81. #endif

  82. #if defined(CONFIG_S3C2440)
  83. #define GPBCON 0x56000010
  84. #define GPBDAT 0x56000014
  85. #define GPBUP 0x56000018

  86.         ldr r0, =GPBUP
  87.         ldr r1, =0x7FF
  88.         str r1, [r0]

  89.         ldr r0, =GPBCON
  90.         ldr r1, =0x154FD
  91.         ldr r1, [r0]

  92.         ldr r0, =GPBDAT
  93.         ldr r1, =0xC0
  94.         str r1, [r0]
  95. #endif

  96. /* #define BOOT_FROM_NOR_FLASH 1 */

  97. #ifdef BOOT_FROM_NOR_FLASH
  98. #ifndef CONFIG_SKIP_RELOCATE_UBOOT
  99. relocate:                                /* relocate U-Boot to RAM            */
  100.         adr        r0, _start                /* r0 <- current position of code   */
  101.         ldr        r1, _TEXT_BASE                /* test if we run from flash or RAM */
  102.         cmp     r0, r1                  /* don't reloc during debug         */
  103.         beq     stack_setup

  104.         ldr        r2, _armboot_start
  105.         ldr        r3, _bss_start
  106.         sub        r2, r3, r2                /* r2 <- size of armboot            */
  107.         add        r2, r0, r2                /* r2 <- source end address         */

  108. copy_loop:
  109.         ldmia        r0!, {r3-r10}                /* copy from source address [r0]    */
  110.         stmia        r1!, {r3-r10}                /* copy to   target address [r1]    */
  111.         cmp        r0, r2                        /* until source end addreee [r2]    */
  112.         ble        copy_loop
  113. #endif        /* CONFIG_SKIP_RELOCATE_UBOOT */
  114. #else
  115.         /* boot from Nand flash */
  116.         mov r1, #NAND_CTL_BASE
  117.         ldr r2, =((3<<12)|(7<<8)|(7<<4))
  118.         str r2, [r1, #oNFCONF]
  119.         ldr r2, [r1, #oNFCONF]

  120.         ldr r2, =((1<<4) | 1)
  121.         str r2, [r1, #oNFCONT]
  122.         ldr r2, [r1, #oNFCONT]

  123.         ldr r2, =0x04
  124.         str r2, [r1, #oNFSTAT]
  125.         str r2, [r1, #oNFSTAT]

  126.         mov r2, #0xff
  127.         strb r2, [r1, #oNFCMD]
  128.         mov r3, #0        /* wait */
  129.        
  130. nand1:
  131.         add r3, r3, #0x1        /* */
  132.         cmp r3, #0xa
  133.         blt nand1

  134. nand2:
  135.         ldr r2, [r1, #oNFSTAT] /*  */
  136.         tst r2, #0x4
  137.         beq nand2
  138.         ldr r2, [r1, #oNFCONT]
  139.         orr r2, r2, #0x2                /* */
  140.         str r2, [r1, #oNFCONT]
  141.        
  142.         /* get ready to call C functions */
  143.         ldr sp, DW_STACK_START
  144.         mov fp, #0

  145.         /* copy U-Boot to RAM */
  146.         ldr r0, =TEXT_BASE        /* first parameter for C function */
  147.         mov r1, #0                        /* second parameter for C function */
  148.         mov r2, #0x30000        /* the size of u-boot,third param for C function */
  149.         bl nand_read_ll /* Call C function */
  150.         tst r0, #0
  151.         beq ok_nand_read
  152. bad_nand_read:
  153. loop2:
  154.         b loop2                                /* infinite loop */
  155. ok_nand_read:
  156.         /*  */
  157.         mov r0, #0
  158.         ldr r1, =TEXT_BASE
  159.         mov r2, #0x400                /* 1024*4bytes = 4KB,  */
  160. go_next:
  161.         ldr r3, [r0], #4
  162.         ldr r4, [r1], #4
  163.         teq r3, r4
  164.         bne notmath
  165.         subs r2, r2, #1
  166.         beq stack_setup
  167.         bne go_next
  168. notmath:
  169. loop3:
  170.         ldr r0, =GPBUP
  171.         ldr r1, =0x7FF
  172.         str r1, [r0]

  173.         ldr r0, =GPBCON
  174.         ldr r1, =0x154FD
  175.         ldr r1, [r0]

  176.         ldr r0, =GPBDAT
  177.         ldr r1, =0xC0
  178.         str r1, [r0]
  179.         b loop3
  180. #endif /* CONFIG_S3C2440_NAND_BOOT */
复制代码


 楼主| 2424330594 发表于 2013-10-31 14:28:02 | 显示全部楼层
主  机:VMWare—RedHat EL 5
开发板:TQ2440--256MB Nand,Kernel: 2.6.18-53.el5
编译器:arm-linux-gcc-3.4.5
u-boot:u-boot-2009.08.tar.bz2

TQ-ZQL 发表于 2013-10-31 14:52:37 | 显示全部楼层
直接烧到内存能不能跑?
 楼主| 2424330594 发表于 2013-10-31 15:21:26 | 显示全部楼层
写到内存后4个Led都亮,我代码是只点亮两个
Now, Downloading [ADDRESS:30000000h,TOTAL:101758]
RECEIVED FILE SIZE:  101758 (99KB/S, 1S)
## Starting application at 0x30000000 ...
TQ-ZQL 发表于 2013-10-31 16:47:31 | 显示全部楼层
你的代码是只点2灯,其它的保持默认,还是说点2灯,灭其它的灯。
可不可以判断你的代码放到内存都跑不跑起来?
 楼主| 2424330594 发表于 2013-10-31 17:40:05 | 显示全部楼层
在内存也没跑起来,在内存里执行是不是要把cpu_init_crit注释掉?我在内存里运行Nor flash版,led正常,但SecureCRT没有输出
 楼主| 2424330594 发表于 2013-10-31 18:33:28 | 显示全部楼层
193 #define CONFIG_SKIP_LOWLEVEL_INIT 1
194 #define CONFIG_SKIP_RELOCATE_UBOOT 1
我在start.S里加了这两个,在内存里跑,led正常
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 11:18 , Processed in 1.032160 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表