共2条
1/1 1 跳转至页
SDRAM 关于SDRAM初始化问题
问
基于9200开发板,板上SDRAM芯片是 HY57V641620HGT-H(4Banks X 1M X 16bit)两片共16M.
按照数据手册上面的初始化步骤。
SDRAM 器件初始化初始化序列由软件产生。
SDRAM器件初始化序列如下:
1. 开始前最少等待200 µs ;
2. 给SDRAM器件送出所有组预充电命令;
3. 提供8个自动更新(CBR)周期;
4. 一个模式寄存器设置(MRS)周期用以对SDRAM器件参数编程,特别是CAS等待时间与
脉冲长度;
5. tMRD 后3 个时钟周期执行一个正常模式命令;
6. 在SDRAMC 更新定时寄存器的计数域中写入更新速率( 更新速率= 更新循环间延迟)。
经过以上六步后, SDRAM器件可完全使用其功能。
9200DK板的loader.bin中sdram初始化代码,其芯片是MT48LC8M16A2(2M x 16bit X 4Banks)两片32M.
void AT91F_InitSDRAM()
{
volatile int *pSDRAM = (int *)AT91C_BASE_SDRAM; //0x20000000
/* Configure PIOC as peripheral (D16/D31) */
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOC, 0xFFFF0000, 0);
/*Setup MEMC to support all connected memories (CS0 = FLASH; CS1=SDRAM)*/
AT91C_BASE_EBI->EBI_CSA = AT91C_EBI_CS1A;
/*Init SDRAM*/
AT91C_BASE_SDRC->SDRC_CR = 0x2188c155;//根据板上SDRAM芯片参数,对配置寄存器进行设置
AT91C_BASE_SDRC->SDRC_MR = 0x02;//送出所有组预充电命令
*pSDRAM = 0;
AT91C_BASE_SDRC->SDRC_MR = 0x04;//刷新命令
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
AT91C_BASE_SDRC->SDRC_MR = 0x03;//载入模式寄存器
*(pSDRAM + 0x80) = 0;
AT91C_BASE_SDRC->SDRC_TR= 0x2e0;//设置刷新脉冲
*pSDRAM = 0;
AT91C_BASE_SDRC->SDRC_MR = 0;//正常模式
*pSDRAM = 0;
}
根据分析,根据HY57V641620HGT-H芯片参数修改以下代码;
AT91C_BASE_SDRC->SDRC_CR = 0xA913954;//根据板上SDRAM芯片参数,对配置寄存器进行设置
在init.c文件中加了SDRAM测试函数,主要是放数据到一地址,再把其读出来。
void AT91F_SdramTest(void)
{
volatile int *pSDRAM = (int *)AT91C_BASE_SDRAM; //0x20000000
char* buf = NULL;
int i = 0;
for(i = 0; i < 255; i++)
{
pSDRAM = 64;
buf = (char*)pSDRAM;
AT91F_DBGU_Printk(buf);//通过调试串口输出字符
pSDRAM++;
}
}
重新编译loader.bin,下载到板上。
测试时如果是地址是 20000000 到其后64字节,存入,读取输出正确。
如果设基址到其后255字节,最后一般只能读取输出224字节。
同理512字节,读出224;1024读出1018;4095读出224.
=======================================================
不知是什么问题,望各位指教。 答 1: 那位兄弟帮一下啊 答 2: SDRAM有几个参数找不到板上用SDRAM芯片是 HY57V641620HGT-H(4Banks X 1M X 16bit)查看其DATASHEET,133MHZ(7.5ns)的参数NC=8,NR=12,NB=4,CAS=3,RCD=3,RAS=6,RC=9,RP=3还有两个参数TWR,TXSR找不到.
还有看9200手册,上面说CAS只支持2,其他的要自编程.
如是把SDRAM当100MHZ的使用,NC=8,NR=12,NB=4,CAS=2,RCD=2,RAS=5,RC=7,RP=2.
TWR假设为2,TXSR为1.
进行读写测试不成功.
基于9200开发板,板上SDRAM芯片是 HY57V641620HGT-H(4Banks X 1M X 16bit)两片共16M.
按照数据手册上面的初始化步骤。
SDRAM 器件初始化初始化序列由软件产生。
SDRAM器件初始化序列如下:
1. 开始前最少等待200 µs ;
2. 给SDRAM器件送出所有组预充电命令;
3. 提供8个自动更新(CBR)周期;
4. 一个模式寄存器设置(MRS)周期用以对SDRAM器件参数编程,特别是CAS等待时间与
脉冲长度;
5. tMRD 后3 个时钟周期执行一个正常模式命令;
6. 在SDRAMC 更新定时寄存器的计数域中写入更新速率( 更新速率= 更新循环间延迟)。
经过以上六步后, SDRAM器件可完全使用其功能。
9200DK板的loader.bin中sdram初始化代码,其芯片是MT48LC8M16A2(2M x 16bit X 4Banks)两片32M.
void AT91F_InitSDRAM()
{
volatile int *pSDRAM = (int *)AT91C_BASE_SDRAM; //0x20000000
/* Configure PIOC as peripheral (D16/D31) */
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOC, 0xFFFF0000, 0);
/*Setup MEMC to support all connected memories (CS0 = FLASH; CS1=SDRAM)*/
AT91C_BASE_EBI->EBI_CSA = AT91C_EBI_CS1A;
/*Init SDRAM*/
AT91C_BASE_SDRC->SDRC_CR = 0x2188c155;//根据板上SDRAM芯片参数,对配置寄存器进行设置
AT91C_BASE_SDRC->SDRC_MR = 0x02;//送出所有组预充电命令
*pSDRAM = 0;
AT91C_BASE_SDRC->SDRC_MR = 0x04;//刷新命令
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
*pSDRAM = 0;
AT91C_BASE_SDRC->SDRC_MR = 0x03;//载入模式寄存器
*(pSDRAM + 0x80) = 0;
AT91C_BASE_SDRC->SDRC_TR= 0x2e0;//设置刷新脉冲
*pSDRAM = 0;
AT91C_BASE_SDRC->SDRC_MR = 0;//正常模式
*pSDRAM = 0;
}
根据分析,根据HY57V641620HGT-H芯片参数修改以下代码;
AT91C_BASE_SDRC->SDRC_CR = 0xA913954;//根据板上SDRAM芯片参数,对配置寄存器进行设置
在init.c文件中加了SDRAM测试函数,主要是放数据到一地址,再把其读出来。
void AT91F_SdramTest(void)
{
volatile int *pSDRAM = (int *)AT91C_BASE_SDRAM; //0x20000000
char* buf = NULL;
int i = 0;
for(i = 0; i < 255; i++)
{
pSDRAM = 64;
buf = (char*)pSDRAM;
AT91F_DBGU_Printk(buf);//通过调试串口输出字符
pSDRAM++;
}
}
重新编译loader.bin,下载到板上。
测试时如果是地址是 20000000 到其后64字节,存入,读取输出正确。
如果设基址到其后255字节,最后一般只能读取输出224字节。
同理512字节,读出224;1024读出1018;4095读出224.
=======================================================
不知是什么问题,望各位指教。 答 1: 那位兄弟帮一下啊 答 2: SDRAM有几个参数找不到板上用SDRAM芯片是 HY57V641620HGT-H(4Banks X 1M X 16bit)查看其DATASHEET,133MHZ(7.5ns)的参数NC=8,NR=12,NB=4,CAS=3,RCD=3,RAS=6,RC=9,RP=3还有两个参数TWR,TXSR找不到.
还有看9200手册,上面说CAS只支持2,其他的要自编程.
如是把SDRAM当100MHZ的使用,NC=8,NR=12,NB=4,CAS=2,RCD=2,RAS=5,RC=7,RP=2.
TWR假设为2,TXSR为1.
进行读写测试不成功.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |