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:

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

 

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

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

 

烧写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有将近500K的大小,用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

出现如下画面:

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

 

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

上一篇:UART


下一篇:WK2xxx系列芯片(WK2114 WK2124 WK2132 WK2168 WK2204等),一个异步串口UART /SPI/IIC,扩展为4个串口UART,linux驱动开发