RT1052的SDRAM的IPTXDAT寄存器的配置问题

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

RT1052的SDRAM的IPTXDAT寄存器的配置问题

Jump to solution
299 Views
FromCH0
Contributor III

NXP技术支持:

      您好!

      以下是NXP官方RT1052的SDK中的.ini文件中的SDRAM初始化部分:

FUNC void _sdr_Init(void)
{
// Config IOMUX
_WDWORD(0x401F8014, 0x00000000);
_WDWORD(0x401F8018, 0x00000000);
_WDWORD(0x401F801C, 0x00000000);
_WDWORD(0x401F8020, 0x00000000);
_WDWORD(0x401F8024, 0x00000000);
_WDWORD(0x401F8028, 0x00000000);
_WDWORD(0x401F802C, 0x00000000);
_WDWORD(0x401F8030, 0x00000000);
_WDWORD(0x401F8034, 0x00000000);
_WDWORD(0x401F8038, 0x00000000);
_WDWORD(0x401F803C, 0x00000000);
_WDWORD(0x401F8040, 0x00000000);
_WDWORD(0x401F8044, 0x00000000);
_WDWORD(0x401F8048, 0x00000000);
_WDWORD(0x401F804C, 0x00000000);
_WDWORD(0x401F8050, 0x00000000);
_WDWORD(0x401F8054, 0x00000000);
_WDWORD(0x401F8058, 0x00000000);
_WDWORD(0x401F805C, 0x00000000);
_WDWORD(0x401F8060, 0x00000000);
_WDWORD(0x401F8064, 0x00000000);
_WDWORD(0x401F8068, 0x00000000);
_WDWORD(0x401F806C, 0x00000000);
_WDWORD(0x401F8070, 0x00000000);
_WDWORD(0x401F8074, 0x00000000);
_WDWORD(0x401F8078, 0x00000000);
_WDWORD(0x401F807C, 0x00000000);
_WDWORD(0x401F8080, 0x00000000);
_WDWORD(0x401F8084, 0x00000000);
_WDWORD(0x401F8088, 0x00000000);
_WDWORD(0x401F808C, 0x00000000);
_WDWORD(0x401F8090, 0x00000000);
_WDWORD(0x401F8094, 0x00000000);
_WDWORD(0x401F8098, 0x00000000);
_WDWORD(0x401F809C, 0x00000000);
_WDWORD(0x401F80A0, 0x00000000);
_WDWORD(0x401F80A4, 0x00000000);
_WDWORD(0x401F80A8, 0x00000000);
_WDWORD(0x401F80AC, 0x00000000);
_WDWORD(0x401F80B0, 0x00000010); // EMC_39, DQS PIN, enable SION

// PAD ctrl
// drive strength = 0x7 to increase drive strength
// otherwise the data7 bit may fail.
_WDWORD(0x401F8204, 0x000110F9);
_WDWORD(0x401F8208, 0x000110F9);
_WDWORD(0x401F820C, 0x000110F9);
_WDWORD(0x401F8210, 0x000110F9);
_WDWORD(0x401F8214, 0x000110F9);
_WDWORD(0x401F8218, 0x000110F9);
_WDWORD(0x401F821C, 0x000110F9);
_WDWORD(0x401F8220, 0x000110F9);
_WDWORD(0x401F8224, 0x000110F9);
_WDWORD(0x401F8228, 0x000110F9);
_WDWORD(0x401F822C, 0x000110F9);
_WDWORD(0x401F8230, 0x000110F9);
_WDWORD(0x401F8234, 0x000110F9);
_WDWORD(0x401F8238, 0x000110F9);
_WDWORD(0x401F823C, 0x000110F9);
_WDWORD(0x401F8240, 0x000110F9);
_WDWORD(0x401F8244, 0x000110F9);
_WDWORD(0x401F8248, 0x000110F9);
_WDWORD(0x401F824C, 0x000110F9);
_WDWORD(0x401F8250, 0x000110F9);
_WDWORD(0x401F8254, 0x000110F9);
_WDWORD(0x401F8258, 0x000110F9);
_WDWORD(0x401F825C, 0x000110F9);
_WDWORD(0x401F8260, 0x000110F9);
_WDWORD(0x401F8264, 0x000110F9);
_WDWORD(0x401F8268, 0x000110F9);
_WDWORD(0x401F826C, 0x000110F9);
_WDWORD(0x401F8270, 0x000110F9);
_WDWORD(0x401F8274, 0x000110F9);
_WDWORD(0x401F8278, 0x000110F9);
_WDWORD(0x401F827C, 0x000110F9);
_WDWORD(0x401F8280, 0x000110F9);
_WDWORD(0x401F8284, 0x000110F9);
_WDWORD(0x401F8288, 0x000110F9);
_WDWORD(0x401F828C, 0x000110F9);
_WDWORD(0x401F8290, 0x000110F9);
_WDWORD(0x401F8294, 0x000110F9);
_WDWORD(0x401F8298, 0x000110F9);
_WDWORD(0x401F829C, 0x000110F9);
_WDWORD(0x401F82A0, 0x000110F9);

// Config SDR Controller Registers/
_WDWORD(0x402F0000,0x10000004); // MCR
_WDWORD(0x402F0008,0x00000081); // BMCR0
_WDWORD(0x402F000C,0x00000081); // BMCR1
_WDWORD(0x402F0010,0x8000001B); // BR0, 32MB

_WDWORD(0x402F0040,0x00000F07); // SDRAMCR0
_WDWORD(0x402F0044,0x00652922); // SDRAMCR1
_WDWORD(0x402F0048,0x00010920); // SDRAMCR2
_WDWORD(0x402F004C,0x50210A08); // SDRAMCR3

_WDWORD(0x402F0090,0x80000000); // IPCR0
_WDWORD(0x402F0094,0x00000002); // IPCR1
_WDWORD(0x402F0098,0x00000000); // IPCR2


_WDWORD(0x402F009C,0xA55A000F); // IPCMD, SD_CC_IPREA
SDRAM_WaitIpCmdDone();
_WDWORD(0x402F009C,0xA55A000C); // SD_CC_IAF
SDRAM_WaitIpCmdDone();
_WDWORD(0x402F009C,0xA55A000C); // SD_CC_IAF
SDRAM_WaitIpCmdDone();
_WDWORD(0x402F00A0,0x00000030); // IPTXDAT
_WDWORD(0x402F009C,0xA55A000A); // SD_CC_IMS
SDRAM_WaitIpCmdDone();
_WDWORD(0x402F004C,0x08080A01 ); // enable sdram self refresh again after initialization done.
}

我查了官方的RM(参考手册),然后,还是不理解“_WDWORD(0x402F00A0,0x00000030); // IPTXDAT”这个语句中,为何要把0x402F00A0这一寄存器的数据配置成x00000030。事实上,RM中,这部分描述很少。网上有种说法,说这是为了配置成“0011 = CAS Latency = 3个时钟周期”,对吗?

谢谢!

0 Kudos
Reply
1 Solution
236 Views
mayliu1
NXP Employee
NXP Employee

Hi @FromCH0 ,

Thank you so much for your interest in our products and for using our community.

"_WDWORD(0x402F00A0,0x00000030); // IPTXDAT

 _WDWORD(0x402F009C,0xA55A000A); // SD_CC_IMS" is used to write the mode register inside the SDRAM memory.

To init one SDRAM, we need to configure the mode register inside the SDRAM memory, below is an example of mode register in the SDRAM. It configured Latency mode, burst type, burst length and etc..

11.png

 

So 0x00000030 corresponds to the configuration value of the mode register inside the SDRAM. It configured the CAS latency to 3 and burst length to 1.

 

Wish it helps you

Best Regards

May Liu

View solution in original post

0 Kudos
Reply
2 Replies
237 Views
mayliu1
NXP Employee
NXP Employee

Hi @FromCH0 ,

Thank you so much for your interest in our products and for using our community.

"_WDWORD(0x402F00A0,0x00000030); // IPTXDAT

 _WDWORD(0x402F009C,0xA55A000A); // SD_CC_IMS" is used to write the mode register inside the SDRAM memory.

To init one SDRAM, we need to configure the mode register inside the SDRAM memory, below is an example of mode register in the SDRAM. It configured Latency mode, burst type, burst length and etc..

11.png

 

So 0x00000030 corresponds to the configuration value of the mode register inside the SDRAM. It configured the CAS latency to 3 and burst length to 1.

 

Wish it helps you

Best Regards

May Liu

0 Kudos
Reply
230 Views
FromCH0
Contributor III

感谢!

0 Kudos
Reply