• uboot移植之建立新板、初始化时钟/SDRAM/UART


    先uboot中建立一个新单板:

    1、在booard/sansung下复制一份smdk2410文件夹,重命名为smdk2440

    2、在include/configs下复制一份smdk2410.h,重命名为smdk2440.h

    3、在uboot的根目录的boards.cfg文件中:

    仿照
    smdk2410 arm arm920t - samsung s3c24x0
    添加:
    smdk2440 arm arm920t - samsung s3c24x0

    smdk2410的uboot启动流程总结如下:

    1、设置cpu为管理模式
    2、关看门狗
    3、屏蔽中断
    4、设置时钟比例
    5、设置内存控制器
    6、设置栈,调用C函数board_init_f
    7、调用函数数组init_sequence里的各个函数
      board_early_init_f : 设置系统时钟、设置GPIO

    SDRAM的初始化与时钟相关,所以应该先初始化时钟,再初始化SDRAM,所以在屏蔽完中断之后直接初始化时钟,把系统时钟设为400MHz:

     修改完时钟以后,SDRAM的初始化也要修改,在u-boot-2012.04.01/board/samsung/smdk2440/lowlevel_init.S路径下修改为如下代码:

    烧写uboot后串口打印出乱码,串口的配置应该也有问题,串口的初始化函数是在init_sequence指针数组的serial_init函数中实现;

    查看串口波特率的设置,发现在get_HCLK里没有定义CONFIG_S3C2440

    处理措施:include/configs/smdk2440.h:

    去掉#define CONFIG_S3C2410

    加上#define CONFIG_S3C2440

    由于去掉了CONFIG_S3C2410的宏定义,导致s3c2410_nand.c的编译因为没有这个宏定义而出错,解决办法是暂时先不编译这个文件:

    //#define CONFIG_CMD_NAND

    修改完的uboot有将近330K的大小,用openjtag下载太慢,可以选择先下载一个200K的小uboot,再用uboot的usb下载功能下载新uboot:

    1、先用usb 1 30000000命令通过dnw软件把uboot下载到SDRAM起始地址0x30000000处,

    2、关闭写保护:protect off all

    3、擦除norflash扇区:erase 0 7FFFF

    4、把内存中的新uboot写入norflash的0地址处:cp.b 30000000 0 80000

    出现如下画面:

     串口成功打印出信息,但flash部分代码还需要修改。

  • 相关阅读:
    静态(static)、虚拟(virtual)、动态(dynamic)或消息处理(message)
    SQLLITE
    SQLite数据表和视图
    SQLite
    DELPHI 泛型
    indy10 学习2
    indy10 线程池
    indy
    Indy10 控件的使用(2)TidTCpServer组件学习
    Socket心跳包机制
  • 原文地址:https://www.cnblogs.com/physworld/p/15031860.html
Copyright © 2020-2023  润新知