UBoot初始化DDR解析:内存地址范围与配置
需积分: 9 2 浏览量
更新于2024-08-05
收藏 7KB TXT 举报
"uboot第一阶段初始化DDR的详细解析"
在深入探讨UBOOT的第一阶段时,我们关注的是如何初始化DDR(Double Data Rate)内存。DDR是嵌入式系统中常用的高速RAM类型,对于启动过程至关重要。在UBOOT的源代码中,这个过程由函数`mem_ctrl_asm_init`执行,它位于`uboot/cpu/s5pc11x/s5pc110/cpu_init.S`文件内。此函数与裸机初始化DDR的代码非常相似,实际上,很多裸机项目中的DDR初始化代码就是直接或间接地从这里借鉴的。
DDR的配置值对它的正确工作至关重要。在裸机环境中,我们可能会遇到一个配置值,如`DMC0_MEMCONFIG_0`,被设置为0x20E01323,而在UBOOT中,这个值变成了0x30F01313。这个差异会导致DDR映射的内存地址范围发生改变。在裸机环境下,DMC0的256MB内存地址范围为0x20000000-0x2FFFFFFF,而在UBOOT中,则变为0x30000000-0x3FFFFFFF。这种变化表明,尽管DDR的实际容量没有变,但其在系统地址空间中的位置已经移动。
这种调整的原因在于,S5PC110 SoC允许在20000000到3FFFFFFF的地址范围内配置256MB的内存,而不仅仅局限于2开头的地址。因此,UBOOT选择了一个3开头的地址,确保了更大的可用物理地址范围:0x30000000-0x4FFFFFFF,总计512MB,其中30000000-3FFFFFFF对应DMC0,40000000-4FFFFFFF对应DMC1。
为了适应不同的系统时钟配置,内存的配置值在`x210_sd.h`文件的438至468行之间定义,并且使用条件编译进行管理。这意味着,无论客户的具体时钟需求如何,都可以找到适合的内存配置。
UBOOT的第一阶段还涉及栈的设置。在DDR初始化之前,程序运行在SRAM中,因此在`start.S`的284-287行中首次设置了栈。然而,随着DDR的初始化完成,栈需要迁移到DDR中,所以在`start.S`的297-299行进行了第二次设置,将栈地址设定为0x33E00000,这个地址位于UBOOT的地址空间内。
UBOOT的第一阶段包含了DDR的初始化和栈的迁移,这些操作确保了系统在加载后续代码和执行过程中能够正确地使用DDR内存和栈空间,从而为系统的稳定运行奠定了基础。理解这些细节对于进行UBOOT的移植、优化或故障排查至关重要。
2011-09-05 上传
2023-11-30 上传
2023-05-01 上传
2023-06-09 上传
2023-05-24 上传
2023-10-13 上传
2023-06-06 上传
2023-05-26 上传
![](https://profile-avatar.csdnimg.cn/d381d6c4d1084f9f800118607fa2b54c_weixin_52372485.jpg!1)
DayBreak923
- 粉丝: 99
- 资源: 3
最新资源
- 解决本地连接丢失无法上网的问题
- BIOS报警声音解析:故障原因与解决方法
- 广义均值移动跟踪算法在视频目标跟踪中的应用研究
- C++Builder快捷键大全:高效编程的秘密武器
- 网页制作入门:常用代码详解
- TX2440A开发板网络远程监控系统移植教程:易搭建与通用解决方案
- WebLogic10虚拟内存配置详解与优化技巧
- C#网络编程深度解析:Socket基础与应用
- 掌握Struts1:Java MVC轻量级框架详解
- 20个必备CSS代码段提升Web开发效率
- CSS样式大全:字体、文本、列表样式详解
- Proteus元件库大全:从基础到高级组件
- 74HC08芯片:高速CMOS四输入与门详细资料
- C#获取当前路径的多种方法详解
- 修复MySQL乱码问题:设置字符集为GB2312
- C语言的诞生与演进:从汇编到系统编程的革命