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.

OMAP-L138读取DDR2错误

Other Parts Discussed in Thread: OMAP-L138

大家好
在我的项目中我用了OMAP-L138这个芯片,但是在调试DDR2的时候出了问题,就是写进去的数据和读出来的不一样。
我尝试了每写进一个数据之后就马上将它读出来,这样的话读出来的数据是没有问题的,但是当我写进去一堆数据之后,然后再读的话,就会发现读出来的数据有问题,跟原先写进去的不一样,很乱,也就是说,数据写进去后过一段时间读出来的话,有错误,也就是说DDR2内的数据没有保持住。请问大家这是什么原因。
我在OMAP-L138DDR外设寄存器中的配置如下:
                                                           SDCR           0x00134A32
SDRCR     0x0000049
SDTIME1    0x26922A09
SDTIMR2     0x3C14C722
DRPHYC1R   0x000000C6
我用的DDR2MICON MT47H128M8CF-3 该芯片为8位,我用两片组成16位。我配置的频率是150MHZ。片选为CS3。
所以还想问一下大家,有没有遇到过跟我相同的问题,是我的寄存器配置有问题吗?我看网上有人说是读写与刷新冲突处理没有做好,但具体应该怎么做,还请大家指教。
  •      上面有一点说错了,CS3是NANDFLASH的片选,DDR2芯片的CSn信号是接到OMAP-L138的mDDR/DDR2模块上的CSn信号上的,这点没错。

    另外,我的其他配置如下:

           1,我使用两片8位的DDR2组成16位的,参考OMAP-L138 datasheet 的接法(page129)。

           2,我用OMAP-L138的开发板试了下,由于开发板上的是一片mDDR,我依据mDDR的型号改了一下上面几个寄存器的值,然后发现读写正常。说明我的基本配置应该没有问题(即PLL,PSC等模块)

          3,我现在尝试写20个地址的数据,第一个地址写0x0000,第二个写0x0001,以此类推,写进去之后我再读出来的时候就变成了0x00004000,0x00004001,0x00004002.。。。。。,也就是说多了个4,如果我写的是32位的数或者8位的数,那么这个多出的4就会出现在别的地方,例如写32位的0,1,2,到DDR2,读出来的话变成了0x40004000,0x40004001,0x40004002.。。。。。,请问这是什么原因?

  • 从这点看,像是数据线D14短路了。

    直接在CCS memory window里查看内存,刷新显示看内容是否会改变。如果改变则说明DDR配置不对。如果不改变,还是固定多一个4,则说明D14真的被拉死了。量一下看与哪里短路了。

  • 从这点看,像是数据线D14短路了。

    直接在CCS memory window里查看内存,刷新显示看内容是否会改变。如果改变则说明DDR配置不对。如果不改变,还是固定多一个4,则说明D14真的被拉死了。量一下看与哪里短路了。

  •      谢谢,但是如果是D14短路了的话,我一写入数据就读出来就应该也是错的,但事实是如果我每写一个数据就读一下,那样的话是没问题的,就是写一堆数据之后再读的话,就会出错。而且出错也不一定就是前面加了个4的情况,还有前面都是F的情况,所以我认为应该跟某根地址线没关系。

        现在我的CCS查看内存方面好像有点问题,全部都是显示的问号,还没解决,所以不能看内存的变化。但如果是DDR得配置不对,那应该是哪些方面的配置为题呢?是我提到的上面那5个寄存器吗?还是其它的配置?

       非常期待您的答复。

  • 目前我的情况有了新的进展,在经过排查后问题逐渐明晰了:

    1, 目前的情况是我在写20个数据后,在写完后就开始读的话,读出来的第一个数会有错,但后续的都正常。如果我在写进20个数据后,在延迟一会儿,哪怕延迟很小的一段时间吗,读出来的数据都正确。我认为应该是读写转换时间太短了的缘故,我试着改了寄存器SDTIMR1中的T_WTR位,但没效果,所以想问一下,还有那些其他位是影响读写转换时间这一项的?我的寄存器设置如上面所说,频率依旧是150Mhz。

    2, 我目前是用的两片8位DDR2来组成16位的DDR2,在寄存器的哪些位还需要专门设置这一点?

    3, DDR2芯片有一些寄存器在上电的时候需要设置,就是一些模式寄存器什么的,那些寄存器是我在程序中专门对其进行设置还是我设置了上面那5个寄存器之后就可以了,程序会自动根据我的这5个寄存器的设置对DDR2芯片内部的寄存器进行设置?

    非常期待您的答复,谢谢!

  • 1. 用附件的工具重新核算一下DDR的参数。

    2. 将DDR_CLK降频试试。

    mDDR_DDR2_Memory_Controller_Register_Calc_Rev2.zip
  • 谢谢!

    1,我上面的5个寄存器配置就是用这个工具配的,

    2,考虑到在1.2V电压下DDR2/mDDR模块的时钟在125~156Mhz内,我降频到133M,但没用,结果还是一样

    3,你能回答我上面提出的第三个问题吗?

    非常感谢!

  • 3, DDR2芯片有一些寄存器在上电的时候需要设置,就是一些模式寄存器什么的,那些寄存器是我在程序中专门对其进行设置还是我设置了上面那5个寄存器之后就可以了,程序会自动根据我的这5个寄存器的设置对DDR2芯片内部的寄存器进行设置?

    [Answer] 是的。

       现在我的CCS查看内存方面好像有点问题,全部都是显示的问号,还没解决,所以不能看内存的变化。但如果是DDR得配置不对,那应该是哪些方面的配置为题呢?是我提到的上面那5个寄存器吗?还是其它的配置?

    [Answer] 在CCS菜单里把memory map的勾选去掉。