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.

SDRAM-DDR2-IS43DR16160A内存初始化代码

Other Parts Discussed in Thread: AM3505

各位专家好

我们在一家公司做毕设,主板是公司自己设计的,使用的是AM3505的处理器,搭载一片32M SDRAM, 型号是IS43DR16160A-5BBLI,我们自己写了初始化该内存的代码,但是好像不能工作,调试的时候代码不能下载到内存中, 实在是找不出哪里有问题了,以下是我的内存初始化代码,求各位专家指正。附件里有内存的datasheet

 

#    Configure EMIF to Access Micron DDR2

#Step1: Setup DDR PHY control registers

 0x6D0000E4 = 0x04     #DDR_PHY_CTRL_1

 0x6D0000E8 = 0x04    #DDR_PHY_CTRL_1_SHDW

 0x6D0000EC = 0x0    # DDR_PHY_CTRL_2

 

# Step2: Reset the PHY (using IODFT_TLGC) and wait till complete

0x6D000060 = 0x2411 #IODFT_TLGC

sleep 20

 

#Step3: Configure EMIF

#3.1 Setup timing registers (SDRAM_TIM_xxx)

 0x6D000018 = 0x04447289 #SDRAM_TIM_1

 0x6D00001C = 0x04447289 #SDRAM_TIM_1_SHDW

 0x6D000020 = 0x141031CA #SDRAM_TIM_2

 0x6D000024 = 0x141031CA #SDRAM_TIM_2_SHDW

 0x6D000028 = 0xE7 #SDRAM_TIM_3

 0x6D00002C = 0xE7 #SDRAM_TIM_3_SHDW

#3.2 Setup Power control reg (PWR_MGMT_CTRL)

 0x6D000038 = 0x80000000 #PWR_MGMT_CTRL

 0x6D00003C = 0x80000000 #PWR_MGMT_CTRL_SHDW

#3.3 Setup refresh rate (SDRAM_REF_CTRL)

 0x6D000010 = 0x618 #SDRAM_REF_CTRL

 0x6D000014 = 0x618 #SDRAM_REF_CTRL_SHDW

3.4 Setup SDRAM configuration register (SDRAM_CONFIG)

 0x6D000008 = 0x40804C21 #SDRAM_CONFIG

 

内存的电路图如下:


 

 

SDRAM-DDR2-IS43-46DR16160A.pdf
  • 你参考 processors.wiki.ti.com/index.php, 在对照着AM35x的technical reference manual看看,多调试下。另外,系统起不来不一定是ddr的原因。

  • 这些SDRAM的配置是我们根据这个TI的wiki(processors.wiki.ti.com/.../Setting_up_AM35x_SDRC_registers )写的,我们之前用eclipse在craneboard上调试成功过, 使用的是相同的代码,配置文件只有SDRAM的初始化不一样。您认为除了SDRAM,还有哪些因素可能导致数据不能下载到SDRAM中去呢?

    以下是Jtag的配置代码:

    target remote localhost:2331

    # Set JTAG speed to 30 kHz

    monitor speed 30

    # Set GDBServer to little endian

    monitor endian little

    # Reset the chip to get to a known state.

    monitor reset

    # Disable watchdog

    #    enable Interface clock

    monitor writeu32 0x48004C10 = 0x20

    #    enable functional clock

    monitor writeu32 0x48004C00 = 0x20

    monitor sleep 10

    #    Disable 32Khz watchdog timer

    monitor writeu32 0x48314048 = 0x0000AAAA

    monitor sleep 10

    #    Disable 32Khz watchdog timer

    monitor writeu32 0x48314048 = 0x00005555

    #Select 26MHz clock (PRM_CLKSEL_REG)

    monitor writeu32 0x48306D40 = 0x03

    # Set JTAG speed to 1000 kHz

    monitor speed 1000

    #Setup_ClockConfig_IIA

    #   Put DPLL into bypass

    monitor writeu32 0x48004D00 = 0x00110011

    monitor sleep 10

    #   Configure clock ratios for all L3, L4 targets

    monitor writeu32 0x48004A40 = 0x032A

    #   /*Configure M, N and FreqSel values*/

    #   setDpllConfigValues(CORE_DPLL, CORE_CFG2A, *PRM_CLKSEL_REG);

    #     DPLL_MULT_VALUE = 332;

    #     DPLL_DIV_VALUE = 25;

    #     DPLL_FREQ_SEL_VALUE = 0x3;

    #     nM2Div = 1;

    #   lockCoreDpll(nM2Div /*in_M2Div*/);

    #*CM_CLKSEL1_PLL_REG = ((in_M2Div << 27) | (DPLL_MULT_VALUE << 16) | (DPLL_DIV_VALUE << 8) | (0 << 5) | (0 << 3));

    monitor writeu32 0x48004D40 = 0x094C1900

    monitor writeu32 0x48004D44 = 0x00006019

    monitor writeu32 0x48004D48 = 0x00000002

    monitor writeu32 0x48004D00 = 0x00370037

    monitor sleep 100

    #Setup_MPUConfig_OPP3

    #   Put DPLL into bypass

    #   CM_CLKEN_PLL_MPU_REG

    monitor writeu32 0x48004904 = 0x0015

    monitor sleep 10

    #/*Configure M, N and FreqSel values*/

    #setDpllConfigValues(MPU_DPLL, MPU_OPP3, *PRM_CLKSEL_REG);

    #   DPLL_MULT_VALUE = 250;

    #   DPLL_DIV_VALUE = 12;

    #   DPLL_FREQ_SEL_VALUE = 0x7;

    #   nM2Div = 1;

    #lockMpuDpll(nM2Div /*in_M2Div*/);

    #CM_CLKSEL2_PLL_MPU_REG

    monitor writeu32 0x48004944 = 0x01

    #CM_CLKSEL1_PLL_MPU_REG = ((2 << 19) | (DPLL_MULT_VALUE << 8) | (DPLL_DIV_VALUE << 0));

    monitor writeu32 0x48004940 = 0x0010FA0C

    #   CM_CLKEN_PLL_MPU_REG

    monitor writeu32 0x48004904 = 0x0077

    monitor sleep 100

    #Configure Micron DDR2

    #   Changing muxmode for cke0 & cke1

    monitor writeu32 0x48002264 = 0x00

    #    Configure EMIF to Access Micron DDR2

    #Step1: Setup DDR PHY control registers

    monitor writeu32 0x6D0000E4 = 0x04

    monitor writeu32 0x6D0000E8 = 0x04

    monitor writeu32 0x6D0000EC = 0x0

    # Step2: Reset the PHY (using IODFT_TLGC) and wait till complete

    monitor writeu32 0x6D000060 = 0x2411

    monitor sleep 10

    #Step3: Configure EMIF

    #3.1 Setup timing registers (SDRAM_TIM_xxx)

    monitor writeu32 0x6D000018 = 0x04447289

    monitor writeu32 0x6D00001C = 0x04447289

    monitor writeu32 0x6D000020 = 0x141031CA

    monitor writeu32 0x6D000024 = 0x141031CA

    monitor writeu32 0x6D000028 = 0xE7

    monitor writeu32 0x6D00002C = 0xE7

    #3.2 Setup Power control reg (PWR_MGMT_CTRL)

    monitor writeu32 0x6D000038 = 0x80000000

    monitor writeu32 0x6D00003C = 0x80000000

    #3.3 Setup refresh rate (SDRAM_REF_CTRL)

    monitor writeu32 0x6D000010 = 0x618

    monitor writeu32 0x6D000014 = 0x618

    #3.4 Setup SDRAM configuration register (SDRAM_CONFIG)

    monitor writeu32 0x6D000008 = 0x40804C21

  • 你现在确定片子起来了么? 你当前板子是个什么状态,你打算怎么干?

  • 我先声明我想干什么:

    我现在使用的是公司自己设计的主板,搭载AM3505处理器,内存大小型号已经在上面提到了。 我们的任务是负责把自己开发的内核和linux内核移植到这块板子上去。分两阶段进行,

    第一阶段:移植自己的内核

    第二阶段:移植linux内核

    交叉编译环境我们使用的是windows7+eclipse+yagarto+Jlink

    第一阶第一步,我们在craneboard上调试自己的内核,GDB初始化AM3505内存寄存器的那些值都是从TI提供的x-loader中淘出来的,调试是成功的,我们通过Jtag把我们的内核下载到SDRAM中并跑起来了。

    第一阶段第二部: 在我们自己的板子上尝试(内存芯片的型号和craneboard不一样),我们根据TI wiki(processors.wiki.ti.com/.../Setting_up_AM35x_SDRC_registers )写了AM3505内存寄存器的初始化代码,jtag的配置和craneboard的配置一样,调试的时候没有数据下载到sdram中。我想应该是内存初始化出问题了。

    另外请教一个问题,TI在写X-loader的时候使用什么工具来debug的。

    我们现阶段使用的交叉编译环境(windows7+eclipse+yagarto+Jlink)编译不了X-loader, 需要改动的地方太多了, 更别说调试了,我想请教一下,通过Jlink有没有可能在linux下debug  x-loader? 如果可以,您能不能把相关文档发给我们?先感谢了。

  • 我建议你先移植ti的内核,包括x-loard,uboot的移植,因为目前你的硬件是不是稳定还不好说,所以一个个来,从ti的linux一套开始。请用我们的ezsdk的一套来编译x-loader等,目前我们还不支持j-link

  • 您好,我们刚刚调试成功,以上SDRAM的初始化需要做如下修改才可以,谢谢你的帮助

    0x6D0000E4 = 0xC3                       #DDR_PHY_CTRL_1

    0x6D0000E8 = 0xC3                 #DDR_PHY_CTRL_1_SHDW

    0x6D000008 = 0x48804E21           #SDRAM_CONFIG

    另外我们使用的编译环境和工具是  windows7+  eclipse+MinGW(主要是用其中的MSYS) + Yagarto(编译链接和GDB) + JLinkGDBserver + Jlink。

  • 我把详细的文档列在一下网址了,供大家参考

    sites.google.com/.../2012-04-15

  • 你好 我也是用的ISSI的DDR2  现在也是DDR2有问题,能跟你交流一下吗

  • 没问题,发邮件到我的邮箱xufangbox@gmail.com

  • 没问题,发邮件到我的邮箱xufangbox@gmail.com