AM335X 内存配置

来源:互联网 发布:天刀捏脸数据女妩媚 编辑:程序博客网 时间:2024/06/16 00:43
转自:http://blog.sina.com.cn/s/blog_5106eff1010193sl.html

我用的是镁光的芯片,通过在官网查找丝印第二行的序列号D9LHR,查得芯片型号MT47H64M16HR-3:H 接下来我们通过Ti的文档来配置这个芯片,点击链接我们可以看到芯片的参数信息。

depth 64MB width x16 clock 333MHZ cycleTime 3ns CL=5

EMIF一般配置寄存器

  • SDRAM_CONFIG(0x4C000008 @) -在这个寄存器的值,将取决于很多内存配置,用于配置初始化时内存不足。它们最终被写入到存储装置的模式寄存器。这里有一些提示来配置每个值:
    • REG_SDRAM_TYPE - LPDDR1(mDDR的)= 1,DDR2=2,DDR3 = 3
    • REG_IBANK_POS -该寄存器设置bank内部的位置。请参阅“地址映射”部分TRM更多信息。这通常是留在bank允许的最大数量是开放的,允许它们之间的交错。
    • REG_DDR_TERM - DDR2和DDR3终止电阻值。请参见TRM正确的价值观。设置终止内存方面期间为ODT(在模具Termaination上)。参考ODT节以获取更多信息。
    • REG_DDR2_DDQS - DDR2差分DQS启用。设置为0时,使用单端DQS LPDDR(mDDR的)。差分DQS使用DDR2/DDR3时设置为1
    • REG_DYN_ODT -这些位仅在DDR3模式。
    • REG_DDR_DISABLE_DLL -设置为0正常运行
    • REG_SDRAM_DRIVE - SDRAM驱动强度。LPDDR1,你通常会设置为1半驱动强度。与LPDDR有些主板可能需要全驱动强度取决于电路板尺寸和跟踪阻抗。在DDR2方面,完整的驱动强度设置为0
    • REG_CWL - CAS写入延迟。这些位仅在DDR3模式下使用(对于其他类型的设备,这可以被设置为0)。此字段的值定义访问连接的DDR3器件时要使用CAS写入延迟。使用最佳的性能支持的最低值。此值应该直接从DDR3表。通常情况下,有速度斌取决于您所选择的设备上表中的数据表。每个表有几个不同的基于TCK CWL值。AM335x,选择最大3.3ns(303MHz),并选择CWL与这个频率。请注意TRM值映射关系:
      • CAS写延迟5:设置REG_CWL = 0
      • CAS写延迟6:设置REG_CWL = 1
      • CAS写延迟7:设置REG_CWL = 2
      • CAS写入延迟8:设置REG_CWL的= 3
    • - AM335x REG_NARROW_MODE只支持16位数据总线,因此必须总是被设置为1为16位模式。
    • REG_CL - CAS延迟时间。此字段的值定义访问连接的SDRAM器件时要使用CAS延迟。这个值应该直接从DDR的数据表。一定要使用CAS延迟时间定义为时钟频率的DDR。请参见TRM正确的值 CL=5
    • REG_ROWSIZE -此字段仅用于当reg_ibank_pos SDRAM的配置寄存器中的字段被设置为1,2,或3,或当reg_ebank_pos = 1。应设置为在DDR数据表中定义的行地址位的数量。
#行位REG_ROWSIZE值90101112123134145156167
    • REG_IBANK -bank内部设置。定义内多个bank连接的SDRAM器件。设置为0,1个bank,设置为1,2个bank,设置为2,4个bank。设置为3,8个bank所有其他值被保留。请参阅内存数据表的bank数量。大多数存储器将使用8个BANK
    • REG_EBANK -外部片选设置。定义SDRAM的访问是否会使用1或2个片选线。由于AM335x只有一个CS,始终设置该位为0
    • REG_PAGESIZE -页面大小。定义连接的SDRAM器件的内部页面大小。应设置为在DDR数据表中定义的列地址位的数量。
#列地址位REG_PAGESIZE值8(256字页)09(512字页)110(1024字页)211(2048字页)3


DDR PHY控制寄存器

  • DDR_PHY_CTRL_1(0x4C0000E4 @)
    • REG_PHY_ENABLE_DYNAMIC_PWRDN -
    • REG_PHY_RST_N -设置为0的正常操作。
    • REG_PHY_IDLE_LOCAL_ODT -此值定义的AM335x侧终止,在空闲模式下(即,时REG_PHY_ENABLE_DYNAMIC_PWRDN断言)。通常情况下,你可以设置为00在空闲状态,以节省电力。
    • REG_PHY_WR_LOCAL_ODT -此值定义在写入的AM335x侧终止。终端通常是不需要的写入,所以这个值应该被设置为0。
    • REG_PHY_RD_LOCAL_ODT -此值在读期间定义的AM335x侧终止。使用以下值:
      • 00:ODT关闭
      • 01 ODT关闭
      • 10:满负荷戴维南
      • 11:半戴维南负载
    • REG_READ_LATENCY -此值占的往返延迟的器件和电路板。作为最低要求,它必须被设置到CAS的延迟加2。请注意,这是一个减1的寄存器,所以写入到寄存器的实际值应该是任何写入SDRAM_CONFIG.REG_CL加1。
      • 例如:如果SDRAM_CONFIG.REG_CL的= 4,对应于4的CAS等待时间(从DDR数据表获得)
        然后设置REG_READ_LATENCY = 5,这对应于(CAS延时加2)的读延迟


DDR PHY寄存器

(@ 0x44E12000 - 0x44E123FF)

有许多DDR PHY寄存器允许最大的灵活性,在配置的PHY为许多不同的模式和时序情景。每个DDR型有不同的程序,确定这些值。请参阅下面的部分DDR型。这些寄存器参考TRM解释这些寄存器。 注:由于设备中的错误,无法读取。他们是只写寄存器。

DDR PHY寄存器DDR2和LPDDR(mDDR的)

下面列出了需要配置的DDR PHY寄存器概要。未列出的所有其他的DDR PHY寄存器可以留在他们的默认状态。对于CMDX,x为0,1,2,如上所述。所DATAX,x为0或1,如上文所述。在所有情况下,程序每次迭代宏相同的值。

  • CMDx_PHY_INVERT_CLKOUT ​​- 除了这些寄存器进行编程定义见下文,请将这个值到电子表格中得到适当的其他寄存器的值0或1
    • 如果(DDR_CK长度)<(DDR_DQS长度),程序这些寄存器1
    • 如果(DDR_CK长度)>(DDR_DQS长度),这些程序寄存器0
  • DATAx_PHY_RD_DQS_SLAVE_RATIO - 使用比例的的种子电子表格,以确定这些寄存器的值
  • DATAx_PHY_FIFO_WE_SLAVE_RATIO - 使用比例的的种子电子表格,以确定这些寄存器的值
  • DATAx_PHY_WR_DQS_SLAVE_RATIO - 使用比例的的种子电子表格,以确定这些寄存器的值
  • DATAx_PHY_WR_DATA_SLAVE_RATIO - 使用比例的的种子电子表格,以确定这些寄存器的值
  • CMDx_PHY_CTRL_SLAVE_RATIO - 使用比例的的种子电子表格,以确定这些寄存器的值


使用比率种子电子表格DDR2和LPDDR

比的种子电子表格
要使用DDR2和LPDDR比率种子电子表格,选择“DDR2”或“mDDR的'标签底部的电子表格。最大的DDR频率将被用于输入,输入0或1 PHY_INVERT_CLKOUT如上所述,然后每个跟踪输入的走线长度(英寸)。此跟踪对于DDR_CLK,通常是在一个“T”设计与配置为两个x8的回忆。确保您输入的走线长度AM335x每个内存。这些长度应接近相等,如果符合正确的设计指导方针。输入正确的信息后,寄存器的值将被自动计算在电子表格中。

控制模块寄存器

有些DDR配置包括了DDR控制器和DDR PHY模块之外的控制模块寄存器。这里是一个总结自己的配置。

  • DDR_IO_CTRL(@ 0x44E10E04) - DDR I / O的控制I / O模式。
    • MDDR_SEL -这使在CMOS模式(为LPDDR操作,设置为1)或STL模式(为DDR2/DDR3操作,设置为0的I / O)
  • VTP_CTRL(@ 0x44E10E0C) -的解除武装,复员和重返社会的I / O控制在VTP(电压温度进程)补偿。VTP校准后应该发生的DDR PLL设置,但在此之前任何其他DDR控制器或执行DDR PHY配置。VTP校准应在加电时,每一次被重新初始化DDR控制器。下面是VTP校准的步骤来执行:
    • 设置启用1启用VTP
    • 将清除CLRZ为0,以清除出触发器,并开始重新计数
    • 将设置CLRZ 1完成切换CLRZ
    • 检查VTP就绪位的。如果为1,该训练序列完成
  • 控制各种VREF_CTRL(@ 0x44E10E14) -参数VREF
    • DDR_VREF_CCAP -
    • DDR_VREF_TAP -
    • DDR_VREF_EN -
  • DDR_CKE_CTRL(0x44E1131C)
    • DDR_CKE_CTRL -正常操作,设置该位为1,允许CKE信号从PHY控制。


这些寄存器控制参数的宏命令和数据的I / O缓冲器。请参阅的TRM,以确定每个寄存器组信号的影响。对于编程的目的,每一个这些寄存器应被设置为相同的值。

  • DDR_CMD0_IOCTRL(0x44E11404) -设置为0x18B
  • DDR_CMD1_IOCTRL(0x44E11408) -设置为0x18B
  • DDR_CMD2_IOCTRL(@ 0x44E1140C) -设置为0x18B
  • DDR_DATA0_IOCTRL(0x44E11440) -设置为0x18B
  • DDR_DATA1_IOCTRL(0x44E11444) -设置为0x18B

AC时序寄存器

  • SDRAM_TIM_1,SDRAM_TIM_2 SDRAM_TIM_3

这个电子表格将帮助您确定最佳的AC定时寄存器的值。确保你基于您正在使用的内存(mDDR的,DDR2,DDR3)在电子表格中选择正确的选项卡 


AM335x的DDR计算工具(链接)

黄色的值根据你的内存在数据表上的值,需要改变。请确保您输入您的设备的速度等级的正确值。TCK值应该代表的速度,您将运行的设备(不一定在数据表中的最低值)。AM335x AC定时寄存器的寄存器的值将被计算基于这些输入。对于较为保守的值,你可以使用+1非最优值的情况下,你怀疑的计时问题(看到这些,你可以取消隐藏行)。最终,最佳值应该工作。

设置刷新率

  • SDRAM_REF_CTRL(0x4C000010 @) -要设置刷新频率,周期刷新间隔tREFI从内存中的数据表。请注意,这的值是typcially在我们的范围内。有些技术资料可参阅“刷新间隔时间在毫秒范围内(64ms的,例如),但是,此值必须要除以刷新周期的数目(一般为8000)。
    • REG_REFRESH_RATE -需要引起7.8我们或15.7我们用适当的SDRAM的刷新间隔的时钟周期数。此字段是不是可写字节,也就是说,这个领域需要的全部16位同时被写入。下面是一些例子:
    •   对于303 MHz内存系统7.8us刷新速率:303 * 7.8us = 2363.4 或0x93B
    •   对于266 MHz内存系统7.8us刷新速率:266 * 7.8us = 2074.8 或0x81A
    •   对于333 MHz内存系统7.8us刷新速率:333 * 7.8us = 2957.4 或0xA25

电源管理控制寄存器

如果你不执行任何电源管理,该寄存器设置为0x00000000。有3个级别的电源管理,你可以设置这个寄存器时钟停止,自刷新和掉电。该寄存器还为您提供了灵活设置定时器,显示器EMIF空闲时间。到期时,EMIF将指定模式把外部存储器。有些电源模式仅支持某些回忆。

对于这些寄存器的更多详细信息,请参阅的AM335x TRM的。

  • PWR_MGMT_CTRL(0x4C000038)
    • REG_PD_TIM -电源管理计时器。EMIF后进入省电模式前的闲置等待的时钟周期数。时有效REG_LP_MODE的= 4。
    • REG_DPD_EN -该位只是使深度掉电模式LPDDR设备提供。
    • REG_LP_MODE -自动电源管理启用。0 =禁用自动PWR MGMT; 1 =时钟停止;自刷新2 = 4 =电源掉电
    • REG_SR_TIM -电源管理计时器自刷新模式。这是时钟周期数后等待EMIF是空闲才进入自刷新模式。有效的当REG_LP_MODE = 2。
    • REG_CS_TIM -电源管理定时器时钟停止模式。这是时钟周期数后等待EMIF进入时钟停止模式之前处于闲置状态。时有效REG_LP_MODE的= 1。

影子寄存器

该的AM335x设备支持智能节能空闲模式。回国后,从智能怠速模式,影子寄存器被装入的EMIF寄存器。

  • SDRAM_REF_CTRL_SHDW -刷新控制影子寄存器。确保具有相同的值作为SDRAM_REF_CTRL寄存器,该寄存器被写入。
  • SDRAM_TIM_1_SHDW - SDRAM时序1影子寄存器。确保具有相同的值作为SDRAM_TIM_1寄存器,该寄存器被写入。
  • SDRAM_TIM_2_SHDW - SDRAM的时序影子寄存器。确保具有相同的值作为SDRAM_TIM_2寄存器,该寄存器被写入。
  • SDRAM_TIM_3_SHDW - SDRAM的时序影子寄存器。确保具有相同的值作为SDRAM_TIM_3寄存器,该寄存器被写入。
  • PWR_MGMT_CTRL_SHDW -电源管理控制影子寄存器。确保具有相同的值作为PWR_MGMT_CTRL寄存器,该寄存器被写入。
  • DDR_PHY_CTRL_1_SHDW - :DDR PHY控制1暗影注册。确保该寄存器被写入相同的值DDR_PHY_CTRL_1。

初始化序列

  • 正确的初始化序列的最佳来源是SPL的源代码,可以发现从AM335x TI的Linux软件开发工具包

片上端接(ODT)的DDR设备的控制

  • ODT是支持DDR2和DDR3
  • 驱动从外部信号(DDR_ODT)AM335x和控制DDR2内存并行终止实施。该终止值定义SDRAM_CONFIG.REG_DDR_TERM的。
  • ODT(注册的)使内部终端电阻的DDR2 SDRAM。当启用时,ODT适用于每个DQ,DQS,DQS,DM信号。
  • 总是切换将DDR_ODT信号。
  • SDRAM_TIM_2 [27-25]:ODT的M_CLK周期从最低数量使数据写入驱动DDR2。(TRM)
  • [26:24]寄存器(RE​​G_DDR_TERM)的的DDR2 EMRS寄存器编程通过SDRAM_CONFIG中的值。
  • SDRAM_CONFIG.REG_DDR_TERM(这些值应该对应DDR表)
    • 设置为0以禁用终止。
    • 对于DDR2
      • 1 = 75欧姆
      • 2 = 150欧姆
      • 3 = 50欧姆。
    • 对于DDR3
      • 1 = RZQ / 4
      • 2 = RZQ / 2
      • 3 = RZQ / 6
      • 4 = RZQ/12
      • 5 = RZQ / 8

0 0