ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-19 19:32:27  阅读:185  来源: 互联网

标签:初始化 SDRAM uboot UART smdk2440 init 串口 时钟


先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有将近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

出现如下画面:

 

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

标签:初始化,SDRAM,uboot,UART,smdk2440,init,串口,时钟
来源: https://www.cnblogs.com/physworld/p/15031860.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有