SDRam的初始化

发布者:紫菜包饭最新更新时间:2015-01-06 来源: 51hei关键字:SDRam  初始化 手机看文章 扫描二维码
随时随地手机看文章

过年来的这一个月,都是在整着启动文件啊,SDRam初始化啊,Nor Flash初始化啊,还有程序在SDRAM中运行等一干事情。

今天就记录一下,我初始化SDRam过程中所学到的东西以及一些体会。本人还属于菜鸟,有什么讲得不好的地方,还希望指正指正哈。也是为了以后不会温习之用。

 
虽然手里有一些样例程序,但是真正理解起来还是很费劲。

开发板:LPC1788,SDRAM:HY57V561620,据说已经停产了~~~~ SDRAM大概都步骤都相同,只是有些芯片具体的参数需要查阅资料才能填写。

 
初始化SDRAM的基本步骤:

1. 初始化引脚,PCONP,EMCDLYCTL,EMCControl寄存器,以及一些与芯片相关的参数,还有EMCDynamicConfig0.

2. SDRAM上电后,等待100us或是200us,期间可以发送NOP命令。

3. 对所有banks预充电,PALL。

4. 执行8次预充电:给EMCDynamicRefresh赋值,然后延时一段时间,令其有8次self-refresh的时间。(自己的理解)

5. 延时完毕后,对EMCDynamicRefresh寄存器赋值。对刷新寄存器的赋值如下:

 

6. 设置模式寄存器Mode Register。以虚读的方式对其进行赋值。如下:

 
  *(INT32U*) EMCDynamicControl = 0x00000083;
 
  dummy = *((volatile INT32U*)( DynamicMemoryBaseAddr|(0x23 << 13)));

至今还没完全明白为什么0x23<<13?

7. 最后设置Normal 并延时一段时间。

这样就差不多大功告成了。

在验证SDRAM是否设置正确的过程遇到一些麻烦。

1. 引脚没有全部初始化完全。导致对SDRAM赋值的过程中,有一部分值不能被赋值上。

2. *(INT16U*)Addr++,这个过程中,如果Addr的初始值是0xA0000000的话,Addr就变成0xA0000002.

  同理,*(INT32U*)Addr++,这个过程中,如果Addr的初始值是0xA0000000的话,Addr就变成0xA0000004.

3. 先是对SDRAM赋值0,然后再对其赋值。

for(i = 0; i < (SDRam_Size/4); i++)
  {
     *SDRamAdd8++ = 0x11;
     *SDRamAdd8++ = 0x22;
     *SDRamAdd8++ = 0x33;
     *SDRamAdd8++ = 0x44;
  }

 for(i = 0; i < (SDRam_Size/4); i++)
  {
    SDRamAdd32--;
    if( *(SDRamAdd32) != 0x44332211)
      {
         str = "Initialization of 8bits SDRam is wrong!";
         putchars(str);
      }
  }

在对其进行16bits的赋值再次验证一下就可以了。

关键字:SDRam  初始化 引用地址:SDRam的初始化

上一篇:coocox学习系列之CoX_GPIO篇
下一篇:中断向量表放在片内RAM中

推荐阅读最新更新时间:2024-03-16 13:50

STM32F1库函数初始化系列:定时器中断
1 static void TIM3_Configuration(void) //10ms 2 { 3 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 4 NVIC_InitTypeDef NVIC_InitStructure; 5 6 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // RCC_APB1为72M频率 7 8 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //选择中断分组 9 10 NVIC_InitSt
[单片机]
STM32_DMA 标准初始化设置解释
DMA 全称是:Direct Memory Access;根据 ST 公司提供的相关信息,DMA是STM32中一个独立于 Cortex-M3 内核的模块,有点类似于 ADC、PWM、TIMER 等模块;主要功能是起通信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这样就可以高速访问各寄存器,其传输不受 CPU 的支配,传输还是双向的;例如,从“表面”上看,它可以将 flash 中的数据与储存器中变量建立通讯,还可以将某一个外设的寄存器或缓冲器与另一个外设的寄存器或缓冲器建立双向通讯,有点像把外设硬件之间用“导线”连接在一起了。其间的通讯不占 CPU 资源,访问速度快,对于实时性强的应用将是一个很好的选择。下面代码是一个标
[单片机]
CC-Link现场总线的通信初始化设置方法和应用比较分析
    CC-Link现场总线是日本三菱电机公司主推的一种基于PLC系统的现场总线,这是目前在世界现场总线市场上唯一的源于亚洲、又占有一定市场份额的现场总线。它在实际工程中显示出强大的生命力,特别是在制造业得到广泛的应用。      在CC-Link现场总线的应用过程中,最为重要的一部分便是对系统进行通信初始化设置。目前CC-Link通信初始化设置的方法有三种,本文将对这三种不同的初始化设置方法进行比较和分析,以期寻求在不同的情况下如何来选择最简单有效的通信初始化设置方法。这对CC-Link现场总线在实际工程中的使用具有重要的现实意义,一则为设计人员在保证设计质量的前提下减少工作量和节省时间,二则也试图探索一下是否可以进一步发
[嵌入式]
MSP430的SPI通信例程(SD卡初始化-理论解说)
最近需要做一个数据存储,发现SD卡这一块还不太好弄 现在的单片机有相当一部分还不支持SDIO,比如MSP430(据我所知,如果有支持的型号了还请及时告诉我~),所以只好用SPI通信来进行SD卡的操作,虽然后续涉及到更为复杂的FAT等等,但是首先需要解决的仍然是建立通信的问题。 采用的单片机型号为MSP430F5438A,用了一个开发板。 SPI通信基本例程 例程及解释如下: //===========================================================================// // // // 文件:
[单片机]
ARM学习笔记012之mini2440上电的启动和初始化程序分析
嵌入式系统中的boot Loader 的实现完全依赖于CPU 的体系结构,因此大多数Boot Loader 都分为第一阶段和第二阶段两大部分,依赖于CPU 体系结构的代码,比如设备初始 化代码等,通常都放在阶段1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。 而阶段2 则通常用C 语言来实现,这样可以实现一些复杂的功能,而且代码会具有更好的 可读性和可移植性。 第一阶段包括: (1)硬件设备的初始化 ①初始化GPIO 功能 ②设置CPU的速度和时钟频率 ③存储控制单元初始化 (2)拷贝Bootloader的程序到RAM空间中 (3)设置好堆栈 (4)跳转到阶段2的C人口地址 第二阶
[单片机]
STM32入门系列-使用库函数点亮LED,LED初始化函数
要点亮LED,需要完成LED的驱动, 在工程模板上新建一个led.c和led.h文件,将其存放在led文件夹内。这两个文件需要我们自己编写。 通常xxx.c文件用于存放编写的驱动程序,xxx.h文件用于存放xxx.c内的stm32头文件、管脚定义、全局变量声明、函数声明等内容。 因此在led.c文件内编写如下代码: #include led.h /******************************************************************************* * 函 数 名 : LED_Init * 函数功能 : LED 初始化函数 * 输 入 : 无 * 输 出 : 无
[单片机]
STM32值SPI的使用及SPI初始化注意事项
在STM32F10x系列芯片中,虽然所拥有的SPI同步串口数量不相同,但是初始化的方法都是一样的。其中使用SPI时候我们回忆GPIO的使用,要注意6点,我们这里主要讲解一点。 根据系统对该不同功能的要求,初始化不同功能外设,初始化GPIO,初始化SPI同步串口设备就会比较复杂。STM32F10x系列芯片的所有SIP同步串口都是和GPIO共用,SPI的初始化分为2大块,就是SPI所使用的I/O口的初始化和SPI功能的初始化。对于SPI同步串口要用到的引脚,根据数据的方向,要设置GPIO_Mode_IN_FLOATING或者GPIO_Mode_AF_PP复用推免输出。其他的和GPIO引脚设置一样。 至于低于SPI同步串口参数的初始化方
[单片机]
FPGA与DDR3 SDRAM的接口设计
  如果FPGA I/O结构中没有包含均衡功能,那么它与DDR3的连接将会很复杂,需要有很多外围器件包括延迟线及相关控制。 均衡的定义和重要性   为了提高高速电路的信号完整性,JEDEC通过时钟和命令/地址线定义了fly-by端接方案,它通过在时钟和数据间人为的加入走线摆率(flight-time skew)来降低共同切换噪声(SSN)。   走线摆率可以达到0.8tCK,这个宽度导致无法确定在哪两个时钟周期获取数据,因此,JEDEC为DDR3定义了校准功能,它可以使控制器通过调整每byte的时序来补偿走线摆率。   目前的FPGA在连接双倍速SDRAM内存时都有很多功能,但是如何与最新的DDR3连接还需要一个新的调整方案。 FP
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved