第一步、设置时钟
按上一章中步骤来说明:
1. DMC must assert and hold CKE to a logic lowlevel to provide stable power for memory device and then apply stable clock.
设置DMC,由于时钟已经在clock_init_mytiny4412.S中进行了设置,这里可以不用再做设置了。只要保持CKE为低电平。
第二步、设置Phycontrol_n寄存器
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.
依照时钟频率正确配置PhyControl0.ctrl_start_point和PhyControl0.ctrl_inc bit-fields的值。配置的PhyControl0.ctrl_dll_on值为'1'以打开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".
那开始配置PhyControl0和PhyControl1的相关位,查看手册的第18章,找到相关寄存器的配置。
表13-1、PhyControl0和PhyControl1相关寄存器地址
第2步中我们要配置我们需要正确配置PhyControl0寄存器的ctrl_start_point和ctrl_inc这两个位的值,OK,查看寄存器的描述。
表13-2、PhyControl0相关寄存器地址
ctrl_start_point和ctrl_inc这两位芯片手册上给的参考值为0x10,先配这两位,则为:
ctrl_start_point: 0x10---- 10000(二进制)
ctrl_inc: 0x10 ---- 10000(二进制)
那么ctrl_force怎么搞呢,我也没有闹明白,代码一开始设置是0x71,在上面的第11步中有这么句话:
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, setthe PhyControl0.ctrl_force bit-fieldto the correct value according to the PhyStatus0.ctrl_lock_value[9:2] bit-fieldfor fix delay amount. Clear the PhyControl0.ctrl_dll_on bit-field to turn offPHY 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。我查看了PhyStatus寄存器的说明,他是只读的,上电初始化是0x0,那FriendlyARM为什么设置这个值呢?我也不是很清楚了。DDR3的工作原理还是没有搞的很清楚呀,暂留一疑问吧。
ctrl_dfdps:这一位手册说明如果是LPDDR2这一位一定要置位,所以这一位设置为1.
其余的位全部配成0,最终为0111 0001 00001 0000 0001 0000 00001000,即0x7E101008。
接着往下看
3. DQS cleaning: Setthe PhyControl1.ctrl_shiftc and PhyControl1.ctrl_offsetc bit-fields to theappropriate value according to clock frequency, board delay, and memory tDQSCKparameter.
依照时钟频率和内存的tAC参数正确设置PhyControl1.ctrl_shiftc and PhyControl1.ctrl_offsetc bit-fields位的值。
查看PhyControl1的ctrl_shiftc和ctrl_offsetc这两位的描述
我们的内存是DDR3-1300,参考其原代码其ctrl_shiftc配置为0x6 即0B110,具体什么原因我也不清楚。ctrl_offsetc的配置暂时参考三星的裸板参数配置为0,ctrl_ref配置为1000。
后面的步骤,全部是按照三星的芯片手册上的那21步来一步一步的在操作寄存器,没有一步有漏掉,但初始化上,可能会有调整,所以,对比着芯片手册上的那21步一行一行的查看代码就OK了。有一点,在配置完14-19步后,到第19步时--配置第14到第19步,如果有两组DDR芯片,重复14-19步配置chip1的内存,刚刚配置的是chip0,也就是第一组内存芯片。这里就把第14-19步重新再做一次,初始化chip1就OK了。代码太多,这里就不详细重复了,最好找到三星的裸板的DDR源码,进行修改配置,以便减少出错可能。至此,DDR的源码也分析完成,下面,应该可以开始将这些移植进一个新的U-Boot中去了。
需要说明一下,实际FrinedlyARM中提供的代码初始化流程可能有点变化,但设置原理应基于此。此出我也未深入,以后那天有时间,得好好的静下心来,好好的查看其如何设置的。
上一篇:第十二章、Tiny4412 U-BOOT移植十二 DDR3初始化顺序
下一篇:第十四章、TIny4412 U-BOOT移植十四 编译产生内核
推荐阅读最新更新时间:2024-10-28 12:58
设计资源 培训 开发板 精华推荐
- 具有 ON/OFF 拨动开关的 LF15ABDT-TR 1.5V 多路低压降稳压器电源的典型应用
- 使用 Infineon Technologies AG 的 OM7640SM 的参考设计
- DC2183A-A,具有 LTC2107 16 位、210Msps 高性能 ADC 和 DDR LVDS 输出的演示板
- 用于医疗的 PSoC 嵌入式系统
- RT8480真PWM调光在SEPIC应用中的典型应用
- OP497GPZ平方放大器典型应用电路
- 10W、5V、12V 交流转直流多输出电源
- 51单片机篮球计时器课程设计
- AM1D-0505D-RZ ±5V 1 瓦 DC/DC 转换器的典型应用
- SLWRB4256A、EFR32 2400/868 MHz、10 dBm 双频段无线电板,基于 EFR32FG13 无线 SoC
- 了解并观看是德科技汽车电子、物联网(IOT)精彩专题,下载技术文章送好礼!
- 有奖问答 英飞凌一站式BMS解决方案
- 今日竞拍:TI SimpleLink Wifi CC3220S
- ADI有奖下载活动之19:ADI可编程逻辑控制器(PLC)解决方案(更新版)
- TMS320F28377S LaunchPad俱乐部已成立,让我们一起见证它高性能的魅力!
- NXP微控制器电路板,针对USB Type C接口设计,评测创意有奖征集,晒心得更有多重好礼!
- 下载有好礼!罗姆带您学习电源设计应用小技巧(功率器件篇)
- 跟帖晒单有礼《MCU工程师炼成记》
- 有奖直播预报名|与英飞凌一同探寻网络摄像机的黑科技
- ADI有奖下载活动之4 压力变送器解决方案