第十二章、Tiny4412 U-BOOT移植十二 DDR3初始化顺序

Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析 U-Boot 属于两阶段的Bootloader,第一阶段的文件为arch/arm/cpu/armv7 /start.S 和 board//lowlevel_init.S,前者是平台相关的,后者是开发板相关的。 uboot启动流程分析如下: 第一阶段: a -- 设置cpu工作模式为SVC模式 b -- 关闭中断,mmu,cache v -- 关看门狗 d -- 初始化内存,串口 e 阅读详情

现在网上很难搜到Exynos4412的源码,基本上我没有找到任何资料有过分析DDR3的内存初始化代码的。在看U-Boot的这段代码时,也徘徊了很久,不知道如下手,很多文章或资料都将这一段分析过程有意无意的隐藏掉了,最多也只是提一下说参考裸板的代码,在找不到任何资料的情况下,我只能依靠芯片手册上,三星在内存控制器这一章,写的关于DDR3的初始化顺序的21个步骤来一条一条去读去看,在安静下来看了芯片手册以后,我发现三星给的U-Boot的DDR初始化代码和芯片手册上的初始化步骤完全一致,有的时候,最好的资料其实就在手边,只是我一直在想着找捷径,学习哪有那么多捷径?

好好研读手册吧,第18章中有下面一段关于初始化的说明:


图12-1、DDR3初始化步骤说明截图

现在开始关注一下芯片手册上关于DDR3的初始化流程,找到手册 1046页,可以看到其有一段关于LPDDR2-S4的初始化步骤,LPDDR2表示低功耗DDR2,DDR3的初始化过程应和这个一样,我们就按这个过程来初始化DDR3:

18.3.1 LPDDR2-S4

Use the sequence givenhere to initialize LPDDR2 devices. Unless specified otherwise, these steps aremandatory. Note that the memory CK/CKn must be less than or equal to 50 MHzbefore you initialize the LPDDR2-S4 device.

1.  DMC must assert and hold CKE to a logic lowlevel to provide stable power for memory device and then apply stable clock.

2.  Set the PhyControl0.ctrl_start_point andPhyControl0.ctrl_inc bit-fields to a correct value according to clockfrequency. Set the PhyControl0.ctrl_dll_on bit-field to "1" toactivate the PHY DLL.

3.  DQS cleaning: Set the PhyControl1.ctrl_shiftcand PhyControl1.ctrl_offsetc bit-fields to the appropriate value according toclock frequency, board delay, and memory tDQSCK parameter.

4.  Set the PhyControl0.ctrl_start bit-field to"1".

5.  Set the ConControl. At this moment, anauto-refresh counter should be disabled.

6.  Set the MemControl. At this moment, all powerdown modes should be disabled.

7.  Set the MemConfig0 register. When there aretwo external memory chips, set the MemConfig1 register.

8.  Set the PrechConfig and PwrdnConfigregisters.

9.  Set the TimingAref, TimingRow, TimingData,and TimingPower registers according to memory AC parameters.

10.  Set the QosControl0 to 15 and QosConfig0 to15 registers when a certain bus master requires QoS scheme.

11.  Wait for the PhyStatus0.ctrl_lockedbit-fields to change to "1". Verify whether PHY DLL is locked.PHY DLLcompensates the changes of delay amount that pressure, volume, and temperaturevariation causes during memory operation. Therefore, you should not power offPHY DLL for reliable operation. It can be in power-off mode except when it runsat low frequency. When you use the power-off mode, set thePhyControl0.ctrl_force bit-field to the correct value according to thePhyStatus0.ctrl_lock_value[9:2] bit-field for fix delay amount. Clear thePhyControl0.ctrl_dll_on bit-field to turn off PHY DLL.

12.  Set the PhyControl1.fp_resync bit-field to"1" to update DLL information.

13.  Confirm that Clock Enable (CKE) is in a logiclow level at least 100ns after power on.

14.  Issue a NOP command by using the DirectCmdregister to assert and hold CKE to a logic high level.

15.  Wait for a minimum of 200 s.

16.  Issue a MRS command by using the DirectCmdregister to reset memory devices and program the operating parameters.

17.  Wait for minimum of 1 s.

18.  Issue a MRR command by using the DirectCmdregister to poll the DAI bit of the MRStatus register. This is to know whetheror not Device Auto-Initialization is complete.

19.  If there are two external memory chips,execute step 14 to 19 for chip1 memory device.

20.  Set the ConControl to turn on an auto-refreshcounter.

21.  Set MemControl register when you requirepower-down modes.

翻译上面的步骤:

1、DMC功能必须设置,并且要保持CKE为低电平,以便可以提供稳定的电源和时钟给DDR

2、根据时钟频率设置PhyControl0.ctrl_start_point 和 PhyControl0.ctrl_inc bit-fields,并且设置PhyControl0.ctrl_dll_on bit-field为 "1" 已启动PHY DLL。

3、DQS 清除,根据时钟频率、板子延时和芯片的tDQSCK参数设置PhyControl1.ctrl_shiftc 和PhyControl1.ctrl_offsetcbit-fields。

4、设置 PhyControl0.ctrl_start bit-field为"1"。

5、设置ConControl,此时,不能使能自动刷新计数器(auto-refresh counter )。

6. 设置MemControl,此时,所有的power down模式应关闭。

7、设置MemConfig0 寄存器,当外面有两片存储芯片时,设置MemConfig1寄存器。

8、设置 PrechConfig和 PwrdnConfig寄存器。

9、根据DDR3的 AC参数设置TimingAref, TimingRow,TimingData, 和 TimingPower寄存器。

10、当总线主控者需要QoS时序参数时,设置QosControl0 到15寄存器和QosConfig0 到 15寄存器。

11、等待 PhyStatus0.ctrl_lockedbit-fields 变成 "1",以确定 PHY DLL 是否锁定。PHY DLL 可以补偿压力、容积和温度等环境的变化,因为在芯片工作期间,我们不能关闭了PHY DLL的电源,只有当他在低的时钟频率时才可以切换到Power-off 模式,当我们用power-off 模式,参考PhyStatus0.ctrl_lock_value[9:2]的延时参数来设置PhyControl0.ctrl_force bit-field,清楚PhyControl0.ctrl_dll_on bit-field来关闭 PHY DLL。

12、设置PhyControl1.fp_resync bit-field 为 "1" 来更新 DLL的设置。

13、确保在电源上电后至少保持Clock Enable (CKE)在低电平100ns。

14、用DirectCmd 寄存器来执行一条NOP指令且保持CKE 为高电平。

15、至少等待200us。

16、发出MRS指令来重新设置存储芯片的操作参数。

17、至少等待1us。

18、用MRR指令来查询MRStatus的寄存器的DAI位,用这们来确定自动初始化过程是否完成。

19、如果外部有别的存储芯片,重复执行14到19步来设置芯片1。

20、设置ConControl来启动auto-refresh counter.

21、当我们要进行power-down模式,设置MemControl寄存器。

 

知道了上面的这些初始化步骤,大家试着去找一下三星给的裸板代码中关于SDRAM的BL1的代码,就比较清楚了。来对照自己板子上的芯片开始设置吧。

xc7vx690tffg1927调试DDR3遇到MMCM的LOCKED信号不稳定 xc7vx690tffg1927调试DDR3遇到MMCM的LOCKED信号不稳定 连续搞了一周发现DDR3初始化不成功,忽高忽低,又由于前期有同事说,板子和程序没有任何问题,一直很稳定,所以不会怀疑硬件问题,调试的PL侧扩展的DDR, 整体工程描述: 直接使用DDR控制器的IP核,对应着使用的DDR进行配置,IP的时钟来之外部参考差分时种,经过MMCM IP提供给DDR。 初始化init_ca... 阅读详情

相关推荐

【强化学习】常用算法之一 “A3C”

A3C(Asynchronous Advantage Actor-Critic)算法是一种在强化学习领域中应用广泛的算法,它结合了策略梯度方法和价值函数的学习,用于近似解决马尔可夫决策过程(Markov Decision Process)问题。A3C算法在近年来备受关注,因为它在处理大规模连续动作空间和高维状态空间方面具有出色的性能。A3C算法是一种基于策略梯度的强化学习算法,通过多个并行的智能体异步地与环境交互,并利用Actor和Critic网络实现策略和价值的近似,从而实现快速而稳定的强化学习训练。

Code_and516的博客 6757

uboot源码学习(9)DDR初始化程序分析之一

本文分析S5PV210板的DDR初始化程序。 一、IO部分配置。从下图管脚定义表来看,Xm1管脚只有单个功能Func0,所以不用配置管脚复用功能。 memory.S文件,20行-40行 mem_init: //1、设置DMC0 Drive Strength (Setting 2X) ldr r0,=ELFIN_GPIO_BASE ldr r1,0x0000AAAA str r1,[r0,#MP1_0DRV_SR_OFFSET] ldr r1,0x0000AAAA str r1,[r0,#MP1

weixin_44837631的博客 2937

重磅!AI实时读取总结微信聊天记录,附MCP协议+智能体配置教程!

【摘要】本文介绍了一套AI实时分析微信聊天记录的解决方案,通过Chatlog+Trae+MCP协议实现智能整理群聊信息。Chatlog作为开源工具本地解析微信数据,确保隐私安全;Trae提供AI分析能力,支持自然语言处理。操作步骤包括:1)下载运行Chatlog并启动HTTP服务;2)安装Trae配置MCP协议;3)创建智能体设置提示词。该方案虽需初始配置,但能有效解决群聊信息过载问题,自动提炼关键内容,避免有价值信息被淹没。文中提供了详细教程链接和网盘资源。

puyihuan的博客 1万+

DDR3内存的初始化过程

DDR3内存的初始化过程在JEDEC有详细的介绍,我看的是Hynix的文档,内容大同小异。 不过初始化过程要对照着图片来看,细心点就能理解。 初始化过程如下: 1.首先上电(RESET#推荐保持在 0.2XVDD;其他的输入没有定义)。RESET#信号需要用稳定电源保持最少200us。在图中可以看出来,CKE需要在RESET#拉高之前被拉低,且最少维持10ns。 2. 在RESET#被...

lxm920714的专栏 1万+

Emscripten安装(wasm编译)

5:配置对应环境变量--替换成自己对应的安装路径(2025最新的Emscripten工具链默认使用LLVM/WebAssembly标准工作流,java依赖已经移除了,所以以下java环境不配,需要使用java的手动添加即可---->emsdk install java-8-152-64bit。3:下载相应的依赖库---->emsdk install latest(我这里下的是最新的,如果有指定版本,把latest替换成版本号即可)6:测试是否成功---> emcc- v/em++ -v。

qq_31578301的博客 556

实现单芯片2400bps 音频编解码方案

终于按照朋友的需求,帮他开发了一款单芯片集音频采集编码传送并接收解码播放功能的方案,交给快递公司邮寄给远在郑州的他.整个项目从开始定型到现在一个样机送出,整整花了1个月时间,感觉挺有成就感,挺有意思,工作是辛苦的,结果却是快乐的.现在将这中快乐的的心情与大家分享一下.    真个项目用一颗主控搞定,ARM9的,200KBytes 片内RAM,主频可以跑到300MHz,64pin LQFP封装

nyxsec的专栏 3684

UBOOT学习之DDR3

DDR3内存简介 1. ROM和RAM简介 - RAM RAM随机存储器,可以随时进行读写操作,速度块,但是掉电以后数据会丢失。比如内存条、SDRAM、SRAM和DDR都是RAM,RAM一般用来保存程序数据、中间结果。 - ROM ROM只读存储器,随着科技发展,ROM演变为FLASH,flash可以写操作,但是相对于读操作,效率低。例如手机配置“8G+128G”,8G指的就RAM,128G指的就是FLASH。EMMC、NAND Flash和UFS都属于ROM。总的来说,RAM读写速度快,但是掉电数据会丢失

qq_37400022的博客 1722

Android开发实战:5分钟搞定全屏沉浸式状态栏(附完整代码示例)

本文提供了Android开发中实现全屏沉浸式状态栏的完整实战指南。通过对比主题配置、动态代码设置和Window标志位三种方法,详细讲解了如何隐藏状态栏并处理布局适配。文章还涵盖了刘海屏、手势导航等高级适配场景,并附有可直接使用的工具类代码,帮助开发者快速提升应用视觉体验。

weixin_29197699的博客 359

Tiny4412裸机程序之DDR3初始化流程

转载:http://www.techbulo.com/1501.htmlTiny4412裸机程序之DDR3初始化流程2014年11月08日 ⁄ 裸机程序 ⁄ 共 4023字 ⁄ 字号 小 中 大 ⁄ 评论 4 条 ⁄ 阅读 1,880 次在三星提供的数据手册《SEC_Exynos4412_Users Manual_Ver.1.00.00》的第1046页提供给了一段关于LPDDR2-S4的初始化步骤...

zjy900507的博客 875

使用Python爬虫抓取政府网站政务信息:公告、通知的自动化抓取与分析

通过结合Requests、BeautifulSoup、Selenium等技术,你能够高效地抓取政府网站的数据,并通过MySQL存储与Pandas分析这些数据。通过自动化手段抓取这些信息,不仅可以提高数据收集的效率,还能够实时获取最新的政务动态,为政策研究、舆情分析等提供宝贵数据。我们将通过Python的Requests、BeautifulSoup、Selenium等工具,结合最新的技术实现一个完整的爬虫系统,帮助你轻松抓取并分析政务信息。通过爬虫,我们可以自动化地从指定网站上抓取公告、新闻、通知等信息。

2201_76125261的博客 1907

超级详细的GNS3最新版3-2.2.50安装配置教程,网工速度收藏!

你好,这里是网络技术联盟站,我是瑞哥。上周给大家分享了GNS3安装包。周末的时候有小伙伴在安装的时候遇到了一些问题,瑞哥周末特地从头安装了一下GNS3,今天给大家出个安装的教程,每一步的步骤我都截图了下来,希望对大家有所帮助!

网络技术联盟站 1109

4412学习日记 - DDR3初始化

是

张小尘的专栏 5528

数字IC/FPGA 秋招知识点不全面整理

数字IC/FPGA 秋招知识点不全面整理

w0shishabi的博客 7866

第七章、Tiny4412 U-BOOT移植七 DDR内存配置

上次讲完了Nand Flash的低级初始化,然后Nand Flash的操作主要是在board_init_f_nand(),中,涉及到将代码从Nand Flash中copy到DDR中,这个放到后面实际移植的过程中再结合源码流程来分析,正常来说,DDR应该是放在Nand Flash前面开始讲,因为DDR相对于Nand Flash来说,更加复杂一些,所以,将DDR拖后来说了,OK,接着开始讲DDR。

eshing的专栏 4360

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

第二章、Tiny4412 U-BOOT移植二 启动分析【转】

本文转载自:http://blog.youkuaiyun.com/eshing/article/details/37521481 版权声明:本文为博主原创文章,未经博主允许不得转载。 一、启动过程说明 讲解启动过程,首先的源头就是打开电源,这个相信没人人不知道。CPU上电后,此时SP指针指向0x0000_0000,从这个地址取第一条指令。但此时:PLL没有启动,CPU...

133

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

第二章、Tiny4412 U-BOOT移植二 启动分析

一、启动过程说明        讲解启动过程,首先的源头就是打开电源,这个相信没人人不知道。CPU上电后,此时SP指针指向0x0000_0000,从这个地址取第一条指令。但此时:PLL没有启动,CPU工作频率为外部输入晶振频率,非常低(Exynos4412芯片边上有一颗24MHz,一颗27MHz,一颗32.768KHz);CPU的工作模式、中断设置等不确定;存储空间的各个BANK(包括内存)都没

eshing的专栏 6908

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ddr3调试经验分享(二)——KC705上的ddr3初始化不成功

最近在玩KC705上的ddr3.开始信誓旦旦的说要自己写controller。   于是开始读datasheet,在镁光的官网上弄了一个ddr3 的module的仿真模型,仿真读写有效的之后就屁颠屁颠的跑的群里问大家这个clock怎么匹配。然后才知道有PHY这个东西,不用PHY就玩ddr,秀逗了!    下面的过程以及结论也许对于有些人也有些秀逗,但是对于我这个初玩ddr的人来说,它还真的卡了...

mshgocn的博客 1万+

嵌入式学习丨4412开发板-uboot源码-汇编-源码分析(一)

在第一章中,介绍了迅为4412 的 iROM、启动方式、源码组成等;在第二章中,介绍uboot 编译等。通过前面对编译的详细分析,了解到 uboot 源码中有以下几个文件是非常重要的: “cpu/arm_cortexa9/start.S” “board/samsung/smdkc210/lowlevel_init_SCP.S 或者 lowlevel_init_POP.S” “include/configs/itop_4412_android.h 或者 itop_4412_ubuntu.h” 其中“cpu/a

mucheni的博客 533

FPGA 20个例程篇:9.DDR3内存颗粒初始化写入并通过RS232读取(上)

在做嵌入式开发过程中“内存”仿佛是无处不在。DDR3颗粒作为当前较为常见的一种储存器,在计算机和嵌入式产品中得到广泛应用,尤其是在涉及到大数据量交互的场合,在FPGA领域比如视频加速处理、AD高速采集、PCIE上位机开发、SFP万兆光口传输等,几乎都能看到DDR3的身影,XILINX也为用户提供了MIG IP核方便实现对DDR3颗粒数据读写的二次开发,但市面上却鲜有不错的教程能快速带领大家入门上手,所以在这一章中笔者选取了两个经典的例程,通过它们就可以很好地去掌握MIG IP核的使用技巧。 DDR

wandou0511的博客 7655

14.DDR3初始化

一、DDR内存 SRAM:内部随机存储器,速度高,可以与CPU同频,通常作为内部RAM或者是Cache使用。但是内存小,成本高。 SDRAM:同步动态随机存储器,第四代的SDRAM发展了好几代到了DDR4,开发版使用的是DDR3。 DRAM:动态随机存储器,内部存储单元的以电容电荷表示数据,1代表有电荷,0代表无数据。DRAM结构简答,所以成本低,集成度高。但是存取速度不如SRAM。 ​ 2.DDR ​ 常见频率100MHZ,133MHZ,166M,200MHz。 ​ 计算容量:行地址位row=

Pintitus的博客 3380
上一篇: 第十一章、Tiny4412 U-BOOT移植十一 DDR3简单介绍
下一篇: 第十三章、Tiny4412 U-BOOT移植十三 DDR3初始化源码分析
eshing
博客等级 码龄18年 146粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值