This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求助!C6747 EMIFB SDRAM工作不正常



按照C6747 BOOTLODER文档中的相关介绍,使用AIS BIN文件格式,可以通过配置EMIF CFG/TIM1/TIM2/RFC四个寄存器,正确配置后,即可通过开机引导方式完成SDRAM的初始化工作。

但是现在我已经按照C6747手册及SDRAM芯片手册配置好时序,但是SDRAM访问不成功。求教大侠指点一二啊。

使用的是美光的MT48LC2M32B2 6A3型号SDRAM,最高支持167MHz,目前我们硬件上是通过EMIFB与SDRAM连接,其中EMIFB时钟频率配置为100MHz.

芯片共4个Bank,2K行地址,256列地址,

相关时序如下图:

根据上图中时序的描述和我EMIFB频率为100MHz,我配置寄存器参数如下:

SDRAM SDCFG Reg:
[31--24] [23--16] [15--08] [07--00]
00000000 00000001 10000100 00100000 == 0x00018420

IBANK_POS:0x00, MSDRAM_ENABLE:0x00, BOOT_UNLOCK:0x00, SDREN:0x01, TIMUNLOCK:0x01,
NM:0x00, CL:0x02, IBANK:0x02, EBANK:0x00, PAGESIZE:0x00

--------------------------------------------------------------------

SDRAM SDTIM1 Reg:
[31--24] [23--16] [15--08] [07--00]
00001010 01001001 00100001 01001000 == 0x0A492148

T_RFC:0x05, T_RP:0x01, T_RCD:0x01, T_WR:0x01, T_RAS:0x04, T_RC:0x05, T_RRD:0x01

--------------------------------------------------------------------

SDRAM SDTIM2 Reg:
[31--24] [23--16] [15--08] [07--00]
00111000 00000110 00000000 00000100 == 0x38060004

T_RAS_MAX:0x07, T_XSR:0x06, T_CKE:0x04
//T_RAS_MAX = (tRAS_MAX/ SDRAM refresh rate) - 1) = 120k ns / 15.625us = 7.68 -1 = 7

--------------------------------------------------------------------

SDRAM SDRFC Reg:
[31--24] [23--16] [15--08] [07--00]
00000000 00000000 00000110 00011011 == 0x0000061B

LP_MODE:0x00, MCLKSTOP_EN:0x00, SR_PD:0x00, REFRESH_RATE:0x61B

//REFRESH_RATE=EClk*Tref/4096(rows) = 100Mhz*64/4096 = 1562.5 = 1563

AISgen中,ROMID检查后,读取后为D800K005,CPU输入时钟为25MHz,我配置的DSP工作频率为300MHz,SDRAM连接在EMIFB上面,配置频率为100MHz,其它LPSC、PINMUX主要是配置了一下SPI0、SPI1、EMIFA、EMIFB、GIOP5器件的相关引脚及电源打开。

硬件引导方式为SPI0 NorFlash,已经验证Boot引导成功,在线Debug读取PLL、EMIF等器件寄存器,已经按引导方式配置完成。

EMIB寄存器各参数与AISgen中参数一致。现在通过地址直接访问的方式发现SDRAM读写不正确,通过CCS memory browser发现SDRAM地址中数据为零,直接在CCS memory browser中修改SDRAM地址也不成功。

通过将EMIB地址线等等配置成GPIO方式,拉高拉低的方式验证,CPU与SDRAM管脚连接没有问题。

求教各位,是我在AISgen中参数EMIFB寄存器参数配置不正确?还是什么原因导致SDRAM访问不正确的?还有什么办法可以排查问题出在哪里?

谢谢大家的帮忙!!!

  • 帅哥,你自刷新SDCR,SDCR2 配置了没有,还需要配置行列地址 bit数

  • SDCR和SDCR是什么?上面就四个寄存器需要配,没有其它的。另外说的行地址,至少对于C6747来说是不需要配的,除非我使用的是Mobile sdram,才会通过SDCFG2来配置行地址。列地址的话我在上面SDCFG里有配置项呢,2:0Bit pagesize就是干这个的。256WORD PAGES

  •  我用的138,是需要配SDCR,SDCR2,里面的 bank数,page数,行地址数,列地址数都要配。另外 PSR里面也要把DDR打开;不能处于睡眠模式。

  • 看了下OMAPL138的文档,与C6747寄存器方便有一点点区别,但是区别不大,寄存器的话,SDTIMR、SDSRETR是用来配置时序的,SDRCR配置刷新,SDCR配置BANK,PAGESIZE等等的。但是里面没有发现有地方需要配置行地址的寄存器BIT位。

  • 另外有一点不太明白你说的,为什么DDR也要打开?难道你用的是DDR SDRAM?

  • 我说的是 PSR (power sleep register)里面的 ddr需要 关掉睡眠模式。

  • 额。我的里面没有DDR,电源管理里没有DDR项,我的EMIFB工作正常。

    不过真正的问题今天刚发现,查看原理图的时候,发现CAS,RAS,WE三个信号线连接错了,晕死了快。

    下午总算是有数据了。不过时序看起来不太对。每次读写32位数据都需要等待一段时间,大概1s左右这样操作,数据才能正常。还得继续调整时序了。

  • 有个问题还需要请教一下啊,芯片手册里写着Refresh count是4k,Row addressing是2K,Refresh period(4096 rows)最大时间是64ms.

    看C6747里的话,我的连接方法,寻址空间是32MB(上图标黄的那条),但是我的SDRAM实际范围是8MB,那我要计算Refresh Rate的话应该如何计算?

        The value of this field may be calculated using the following equation:
        REFRESH_RATE = SDRAM clock frequency × SDRAM refresh rate
        Assuming 64 ms (tREF), 8192 rows (213; 13 address lines), SDRAM refresh rate = 64/8192 = 7.8 μs.
        Therefore, the following results assuming 133-MHz SDRAM clock frequency.
        REFRESH_RATE = 133 MHz × 7.8 μs = 1037.4 Therefore, REFRESH_RATE = 1038 = 40Eh

    是应该按照:REFRESH_RATE = 100MHz * (64ms/4096)= 1562.5 = 1562 = 61B?
    还是说因为我的SDRAM只有2K行地址,刷新4K需要64ms,CPU实际上会自动刷新8K行地址的?我的实际刷新率应当至少是1562/2?

  • 应该是乘以2,

    意思就是 多少个时钟周期过后,sdram自刷新一行,64ms内,保证所有行都能进行一次刷新。

  • 另外,行地址位数也应该配的,不配有个默认值,138是9
  • 我的SDRAM 刷新4K行地址需要64ms,So,你的意思是,我应该保证在 64ms内可以完成EMIFB行寻址的8K地址?

    那原来我的公式是:REFRESH_RATE = 100MHz * (64ms/4096)= 1562.5 = 1562 = 61B?

    现在应该改成:REFRESH_RATE = 100MHz * (64ms/8192)= 1562.5 = 781.25= 30D?

    还是你的意思是:REFRESH_RATE = 100MHz * (128ms/4096)= 1562.5 = 781.25= C35?

  • REFRESH_RATE = 100MHz * (64ms/4096)= 1562.5 = 1562 = 61B 这个应该是对的,不过要提醒你,这个值只能偏小,不能偏大,可是太小又影响效率。

    另外那个行地址线 bit数,你也需要配的。

  • 现在的问题有点奇葩了,Refersh_rate要配成2*TRFC了,其它时序参数需要在正确参数的基础上延迟三个CLK才能在某些时候读写成功。

    难道使用SDRAM给定参数值配置后是不可用的?还是因为我们的CAS,RAS,WE是飞线的原因导致信号质量太差?或额干扰?或者因为各引脚上的排阻不合适导致的。

    不知道仁兄硬件电路上,EMIF与SDRAM之间加排阻了吗?还是直连的?不知道排阻或飞线会对数据传送有多大影响?

  • 飞线要尽可能的短,长了会增大延时,会影响时序的,硬件电路 你参考 官方的 demo板即可。

    RAS,CAS的 时序你也需要配,另外DDR SDRAM可能有几个档,不同的工作频率 参数可能不同。就是说100M,150M,200M,333M的参数是不同的。

    你的表格里有说明的。 你用的是100Mhz,貌似应该用最后那个档,-7,而且值确实要比他给你提供的值 适当调整,我的想法 供你参考

  • 你说配成Refersh_rate要配成2*TRFC 是没有道理的,只能说是巧合, 可能你的算自刷新的周期应该用那个 16ms去算,不能用64ms, 他这里可能是4个bank这样来的。