查看: 2055|回复: 3

[已解决] MCF5275 关于sdram接口初始化的问题(已解决)

[复制链接]

该用户从未签到

1

主题

2

帖子

0

新手上路

Rank: 1

积分
6
最后登录
1970-1-1
发表于 2013-12-3 09:50:12 | 显示全部楼层 |阅读模式
  我是用的是mcf5275,sdram接口完全按照手册给的原理图接线的,sdram使用的是MT46V16M16,32M字节的。开发环境使用的是freescal codewarrior,用的usb在线调试。我做的程序实在内部ram中运行的,在线调试的时候,首先它会给芯片下载cfg文件,这个里边有一段对sdram的初始化,我在程序当中也是按照这个cfg中对sdram接口的初始化过程写成的c程序。但是调试的时候就有一个问题,如果cfg文件中有那一段sdram初始化程序,进入应用程序后,就可以对sdram进行读写操作,但是如果去掉cfg文件中这一段初始化,让程序执行启动过程中我自己写的那一段sdram初始化程序,初始化完成,就不能对sdram进行读写操作。我反复对比了两段初始化程序,执行的步骤都是一样的,不同的就是语言不一样。有没有哪个大神遇到过这种问题或者是知道怎么回事的,坐等指教,不胜感激,qq616208620
我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-12-3 10:07:12 | 显示全部楼层

回复:MCF5275 关于sdram接口初始化的问题

检查一下SDRAM 初始化代码是否正确,可以通过检查寄存器判断是否与cfg文件配置一致。
下面是SDRAM的初始化例程,你可以参考一下,希望对你的问题有所帮助:
/********************************************************************/
void
mcf5275_sdram_init(void)
{
 
        /* Initialize DDR on the M5275EVB board */
       
        /*
         * Check to see if the SDRAM has already been initialized
         * by a run control tool
         */
        if (!(MCF_SDRAMC_SDCR & MCF_SDRAMC_SDCR_REF))
        {
 
                /* Initialize SDRAM chip select */
        MCF_SDRAMC_SDBAR0 = (0
            | MCF_SDRAMC_SDBARn_BASE(SDRAM_ADDRESS)
            );
            
                MCF_SDRAMC_SDMR0 = (0
                        | MCF_SDRAMC_SDMRn_BAM_32M
                        | MCF_SDRAMC_SDMRn_V
                        );            
 
                /* Initialize timing parameters */
                MCF_SDRAMC_SDCFG1 = 0x83711630;
                MCF_SDRAMC_SDCFG2 = 0x46770000;               
            
                /* Enable clock and write to SDMR */
                MCF_SDRAMC_SDCR = (0
                        | MCF_SDRAMC_SDCR_MODE_EN
                        | MCF_SDRAMC_SDCR_CKE
                            );
                             
                   /* Set IPALL bit */        
                MCF_SDRAMC_SDCR |= MCF_SDRAMC_SDCR_IPALL;                                           
                           
                /* Dummy write to SDRAM to issue PALL */
                *(uint32 *)(SDRAM_ADDRESS) = 0xA5A59696;
               
               
                /* Write extended mode register */
                MCF_SDRAMC_SDMR = (0
                        | MCF_SDRAMC_SDMR_BNKAD_LEMR
                        | MCF_SDRAMC_SDMR_AD(0x0)
                        | MCF_SDRAMC_SDMR_CMD        
            );
                    
                /* Dummy write to SDRAM to issue LEMR */
                *(uint32 *)(SDRAM_ADDRESS) = 0xA5A59696;
        
                /* Write mode register and reset DLL */
        MCF_SDRAMC_SDMR = 0x058D0000;
                         
                /* Dummy write to SDRAM to issue LMR */
                *(uint32 *)(SDRAM_ADDRESS) = 0xA5A59696;
               
                /* Clear SDMR CMD bit to stop issuing LMR/LEMR commands */
                MCF_SDRAMC_SDMR &= ~(MCF_SDRAMC_SDMR_CMD);    
                   
                /* Execute a PALL command */
                MCF_SDRAMC_SDCR |= MCF_SDRAMC_SDCR_IPALL;
                               
                /* Dummy write to SDRAM to issue PALL */
                *(uint32 *)(SDRAM_ADDRESS) = 0xA5A59696;
                
                 /* Clear IPALL bit to stop issuing PALL commands */
                 MCF_SDRAMC_SDCR &= ~(MCF_SDRAMC_SDCR_IPALL);
                  
                /* Perform two REF cycles */
                MCF_SDRAMC_SDCR |= MCF_SDRAMC_SDCR_IREF;
               
                /* Dummy write to SDRAM to issue first REF */
                *(uint32 *)(SDRAM_ADDRESS) = 0xA5A59696;
 
                /* Dummy write to SDRAM to issue second REF */
                *(uint32 *)(SDRAM_ADDRESS) = 0xA5A59696;
       
                /* Write mode register and clear reset DLL */
        MCF_SDRAMC_SDMR = 0x018D0000;
                               
                /* Dummy write to SDRAM to issue LMR */
                *(uint32 *)(SDRAM_ADDRESS) = 0xA5A59696;
               
                /* Clear SDMR CMD bit to stop issuing LMR/LEMR commands */
                MCF_SDRAMC_SDMR &= ~(MCF_SDRAMC_SDMR_CMD);
               
                MCF_SDRAMC_SDCR &= ~MCF_SDRAMC_SDCR_MODE_EN;                 
               
                /* Enable auto refresh and lock SDMR */
                MCF_SDRAMC_SDCR = (0
                        | MCF_SDRAMC_SDCR_CKE
                        | MCF_SDRAMC_SDCR_REF
                        | MCF_SDRAMC_SDCR_MUX(1)
                        | MCF_SDRAMC_SDCR_RCNT((SDRAM_TREFI/(PERIOD*64)) - 1 + 1) /* 1 added to round up */
                        | MCF_SDRAMC_SDCR_DQS_OE(0x3) 
            );
            
        }
}
 
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

2

帖子

0

新手上路

Rank: 1

积分
6
最后登录
1970-1-1
 楼主| 发表于 2013-12-26 16:45:58 | 显示全部楼层

回复:MCF5275 关于sdram接口初始化的问题

回复第 2 楼 于2013-12-03 10:07:12发表:
 
我发现是硬件有问题,时钟振幅不够,可能是电路板有错误吧。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-12-30 15:24:30 | 显示全部楼层

    回复:MCF5275 关于sdram接口初始化的问题

    感谢你对飞思卡尔产品的关注!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 21:29 , Processed in 0.091284 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表