UBoot初始化DDR解析:内存地址范围与配置
需积分: 9 58 浏览量
更新于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 上传
2016-06-24 上传
2022-09-22 上传
261 浏览量
2015-12-15 上传
2014-11-30 上传
2014-06-28 上传
2021-11-09 上传
DayBreak923
- 粉丝: 99
- 资源: 3
最新资源
- Aspose资源包:转PDF无水印学习工具
- Go语言控制台输入输出操作教程
- 红外遥控报警器原理及应用详解下载
- 控制卷筒纸侧面位置的先进装置技术解析
- 易语言加解密例程源码详解与实践
- SpringMVC客户管理系统:Hibernate与Bootstrap集成实践
- 深入理解JavaScript Set与WeakSet的使用
- 深入解析接收存储及发送装置的广播技术方法
- zyString模块1.0源码公开-易语言编程利器
- Android记分板UI设计:SimpleScoreboard的简洁与高效
- 量子网格列设置存储组件:开源解决方案
- 全面技术源码合集:CcVita Php Check v1.1
- 中军创易语言抢购软件:付款功能解析
- Python手动实现图像滤波教程
- MATLAB源代码实现基于DFT的量子传输分析
- 开源程序Hukoch.exe:简化食谱管理与导入功能