uboot.2016.03 在mini2440上norfalsh启动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uboot.2016.03 在mini2440上norfalsh启动相关的知识,希望对你有一定的参考价值。

本人有点懒惰,直接在smdk2410的基础上进行修改

(note :红色字体表示修改内容,蓝色字体表示增加内容)

1. 顶层的makefile

  在247行 添加如下两条语句 :

   ARCH :=arm
     CROSS_COMPILE :=arm-linux-

2 修改始终频率

  打开 u-boot-2016.03/arch/arm/cpu/arm920t/start.S

      第77行 #if defined(CONFIG_S3C2410)

      #if defined(CONFIG_S3C2440) 
      第78行  ldr     r1, =0x3ff

       ldr  r1, =0x7ff

      第87行    mov     r1, #3      //FCLK :HCLK : PCLK   = 1:2:4

       mov     r1,#5   //FCLK :HCLK : PCLK   = 1:4:8

  打开 u-boot-2016.03/board/samsung/smdk2410/smdk2410.c

  第25行到27行的内容改为 :

  25:#define M_MDIV   92

 

  26:#define M_PDIV    1

 

  27:#define M_SDIV    1

 

  本开发板的输入晶振频率为12MHz,通过上面的修改,则MPLL频率为400MHz。

  第37行到39行的内容改为:

  54:#define U_M_MDIV     56 

  55:#define U_M_PDIV      2

  56:#define U_M_SDIV      2

  通过上面的修改,则UPLL频率为48MHz。即为USB的时钟

      在board_early_init_f()函数中在给寄存器赋值之前增加如下内容

  __asm__(  "mrc p15, 0, r1, c1, c0, 0\n"
                /* read ctrl register */

                "orr r1, r1, #0xc0000000\n"
                /* Asynchronous */

                "mcr p15, 0, r1, c1, c0, 0\n"
                /* write ctrl register */

                :::"r1"
        );

  从S3C2440芯片书册上有说明:

  If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous
  bus mode using following instructions(S3C2440 does not support synchronous bus mode).
  MMU_SetAsyncBusMode
  mrc p15,0,r0,c1,c0,0
  orr r0,r0,#R1_nF:OR:R1_iA
  mcr p15,0,r0,c1,c0,0  

3.修改内存SDRAM时序

 

    打开  u-boot-2016.03/board/samsung/smdk2410/lowlevel_init.S  

    

  #define B1_BWSCON          (DW16)

  #define B2_BWSCON          (DW16)

  #define B3_BWSCON          (DW16)

  #define B4_BWSCON          (DW32)

  #define B5_BWSCON          (DW16)

  #define B6_BWSCON          (DW32)

  #define B7_BWSCON          (DW32)

 

  /* BANK0CON */  

  #define B0_Tacs                   0x3

  #define B0_Tcos                   0x3

  #define B0_Tacc                   0x7

  #define B0_Tcoh                  0x3

  #define B0_Tah                    0x3

  #define B0_Tacp                  0x1

  #define B0_PMC                  0x0

 

  /* BANK1CON */

  #define B1_Tacs                   0x1

  #define B1_Tcos                   0x1

  #define B1_Tacc                   0x6

  #define B1_Tcoh                  0x1

  #define B1_Tah                    0x1

  #define B1_Tacp                  0x0

  #define B1_PMC                  0x0

  #define B2_Tacs                   0x1

  #define B2_Tcos                   0x1

  #define B2_Tacc                   0x6

  #define B2_Tcoh                  0x1

  #define B2_Tah                    0x1

  #define B2_Tacp                  0x0

  #define B2_PMC                  0x0

 

  #define B3_Tacs                   0x1

  #define B3_Tcos                   0x1

  #define B3_Tacc                   0x6

  #define B3_Tcoh                  0x1

  #define B3_Tah                    0x1

  #define B3_Tacp                  0x0

  #define B3_PMC                  0x0

 

  #define B4_Tacs                   0x1

  #define B4_Tcos                   0x1

  #define B4_Tacc                   0x6

  #define B4_Tcoh                  0x1

  #define B4_Tah                  0x1

  #define B4_Tacp                 0x0

  #define B4_PMC                0x0

 

  #define B5_Tacs                 0x1

  #define B5_Tcos                 0x1

  #define B5_Tacc                 0x6

  #define B5_Tcoh                0x1

  #define B5_Tah                  0x1

  #define B5_Tacp                 0x0

  #define B5_PMC                0x0

 

  #define B6_MT                  0x3

  #define B6_Trcd                 0x1

  #define B6_SCAN                     0x1

 

  #define B7_MT                  0x3

  #define B7_Trcd                 0x1

  #define B7_SCAN                     0x1

 

  /* REFRESH parameter */

  #define REFEN                  0x1

  #define TREFMD               0x0

  #define Trp                 0x1

  #define Trc                 0x1

  #define Tchr                0x2

  #define REFCNT                1268

4. 修改宏定义

  打开 u-boot-2016.03/include/configs/smdk2410.h

  第21行 #define CONFIG_S3C2410         /* specifically a SAMSUNG S3C2410 SoC*/

      #define CONFIG_S3C2440          /* specifically a SAMSUNG S3C2440 SoC */

      s3c2410 和s3c2440有些寄存器不同

     在27行 增加如下内容

  #undef  CONFIG_SYS_PROMPT  
  #define CONFIG_SYS_PROMPT      "jetli# "         //这个在串口输出 [jetli#] 内容

   将定义的CONFIG_SYS_PROMPT释放,然后再定义自己需要的。

 

  第157行“#define CONFIG_FLASH_CFI_LEGACY”改为:

     #define CONFIG_SYS_CFI_FLASH_CONFIG_REGS    {0xFFFF}

  因为在u-boot-2011.06中,使用的是CFI的NorFlash接口,所以不需要定义CONFIG_FLASH_CFI_LEGACY,而是要定义CONFIG_SYS_CFI_FLASH_CONFIG_REGS。

  第162行“#define CONFIG_SYS_MAX_FLASH_SECT (19)”改为:

 

       #define CONFIG_SYS_MAX_FLASH_SECT   (35)

 

  因为本开发板使用的NorFlash是EN29LV160AB,它有35个扇区。

  第164行“#define CONFIG_ENV_ADDR                 (CONFIG_SYS_FLASH_BASE + 0x70000)” 改为

           #define CONFIG_ENV_ADDR                 (CONFIG_SYS_FLASH_BASE + 0x0100000)  

  uboot-2016 make生成的u-boot.bin >512k>0x70000,环境变量地址为0x70000时,如果保存环境变量,则会覆盖了u-boot.bin。saveenv命令后重启后死机

以上是关于uboot.2016.03 在mini2440上norfalsh启动的主要内容,如果未能解决你的问题,请参考以下文章

u-boot-2016.03 在mini2440上移植之nandflash 硬件ecc

C与ARM汇编结合实现mini2440串口uart简单程序

mini2440 使用uClibc编译静态程序

[mini2440] 使用 miniTool 给 mini2440 刷机

最近研究ARM嵌入式,想问问精智的JZ2440和mini2440这两块开发板的区别在哪里!

[Mini2440] 使用 miniTool 给 mini2440 刷机