基于TMS320C6455DDR2内存控制器的介绍

前言:

        DDR2内存控制器是连接DDR2内存设备的接口,内存的类型有DDR1 SDRAM,DDR2 SDRAM,并且内存设备要符合JESD79-2B 标准。SDR SDRAM、SBSRAM和异步存储器, 不支持。DDR2内存控制器的内存可用于存储程序和数据。

        DDR2控制器支持功能:(1)符合JESD79-2B标准的DDR2内存设备

                                                   (2)512Mbyte内存空间

                                                   (3)16位或32位数据总线宽度
                                                        (4)2,3,4,5个CAS延迟

                                                        (5)1,2,4,8个内部内存库

                                                        (6)256,512,1024,2048页面大小

                                                        (7)小段和大端存储的转换

                                                        (8)可编程的定时参数

                                                        (9)自刷新模式 等等

注意:本文以TMS320C6455的DDR2内存控制器为例讲解



1.DDR2接口信号图

部分信号说明:

DED[31:0]        双向数据总线。输入数据读取和输出数据写入;

DEA[13:0]        外部地址输出;

DBA[2:0]          内存库地址控制输出;


2.EMIF片选信号及映射情况


3.DDR2控制器与DDR2设备连接原理图

C6455:

DDR2:



4.DDR2寄存器的配置

          (1)连接方式


          (2)配置DDR2内存控制器

          (3)配置SDCFG(页面大小,数据位宽等)

       (4)配置SDRFC(刷新时间)

           (5)配置SDTIM1和SDTIM2

5.给出DDR2驱动代码(与上面配置存在小差异)

      说明:

              此例程是在CSL基础上写的,有关CSL的讲解请查看http://blog.csdn.net/mdqaq/article/details/53941808

DDR2初始化:

#include <stdio.h>
#include <std.h>
#include <sys.h>
#include <csl_ddr2.h>
#include <csl_gpio.h>
#include <csl_intc.h>
#include <csl_intcAux.h>
#include <cslr_dev.h>
#include <csl_srio.h>#define ADDR_BASE               0xE0000000
#define SDRAM_REFRESH_RATE_DEFAULT     (0x0000073Bu)void ddr2_init(void)
{volatile Uint32     result, index;CSL_Ddr2Obj         ddr2Obj;CSL_Status          status;CSL_Ddr2HwSetup     hwSetup ;CSL_Ddr2Timing1     tim1 = {0x23, 0x4,0x4, 0x4, 0x0B, 0x0F, 0x2,0x2};CSL_Ddr2Timing2     tim2 = {0x2,0x25,0xDC, 0x2, 0x04};CSL_Ddr2Settings    set  = CSL_DDR2_SETTING_DEFAULTS;CSL_Ddr2Handle    hDdr2;/* Enable the ddr2 */CSL_FINST(((CSL_DevRegs*)CSL_DEV_REGS)->PERCFG1, DEV_PERCFG1_DDR2CTL,ENABLE);/* Clear local data structures */memset(&ddr2Obj, 0, sizeof(CSL_Ddr2Obj));memset(&hwSetup, 0, sizeof(CSL_Ddr2HwSetup));set.casLatncy = CSL_DDR2_CAS_LATENCY_5;set.ibank = CSL_DDR2_8_SDRAM_BANKS;set.ddrDrive = CSL_DDR2_NORM_DRIVE;set.pageSize = CSL_DDR2_1024WORD_10COL_ADDR;set.narrowMode = CSL_DDR2_NORMAL_MODE;/* setup the hardware parameters */hwSetup.refreshRate = SDRAM_REFRESH_RATE_DEFAULT;hwSetup.timing1Param = &tim1;hwSetup.timing2Param = &tim2;hwSetup.setParam = &set;/* Initialize DDR2 CSL module */status = CSL_ddr2Init(NULL);if (status != CSL_SOK){printf("DDR2 EMIF: Initialization error.\n");printf("\tReason: CSL_ddr2Init [status = 0x%x].\n", status);return;}else{printf("DDR2 EMIF: Module Initialized.\n");}/* Opening the DDR2 instance */hDdr2 =  CSL_ddr2Open(&ddr2Obj, CSL_DDR2, NULL, &status);if ((status != CSL_SOK) || (hDdr2 == NULL)){printf("DDR2 EMIF: Error opening the instance. [status = 0x%x, hDdr2 = \0x%x]\n", status, hDdr2);return;}else{printf("DDR2 EMIF: Module instance opened.\n");}/* Setting up configuration parameter using HwSetup */status =  CSL_ddr2HwSetup(hDdr2, &hwSetup);if (status != CSL_SOK){printf("DDR2 EMIF: Error in HW Setup.\n");printf("Read write operation fails\n");return;}else{printf("DDR2 EMIF: Module Hardware setup is successful.\n");}}

DDR2测试代码:

/*********************************************************************************
**
** 功能: DDR2写数据函数
** 函数名: ddr_write
**
*********************************************************************************/
void ddr2_write(Uint32 addr, Uint32 data)
{*((Uint32*) (ADDR_BASE + addr))  = data;
}/*********************************************************************************
**
** 功能: DRR2读数据函数
** 函数名:  ddr_read
**
*********************************************************************************/
Uint32 ddr2_read(Uint32 addr)
{Uint32 data = 0;data =   *((Uint32*) (ADDR_BASE + addr));return data;}/******************************************************************************
** 功能: DDR2 测试函数
** 参数: len - 要测试的ddr的空间大小取0~ 512M
** 返回: 测试DDR2读写正常返回 0, 否则返回 -1
*******************************************************************************/
int ddr2_test(Uint32 startAddr, Uint32 startVal, Uint32 len)
{Uint32 inI;Uint32 retVal;for(inI = 0; inI < len / 4; inI++){ddr2_write(startAddr + inI * 4, startVal);retVal = ddr2_read(startAddr + inI * 4);if(retVal != startVal){printf("ddr2 test error addr = %d\n", startAddr + inI*4);return -1;}startVal++;}printf("ddr2 test is 0k!\n");return 0;
}











TMS320C6455之DDR2内存控制器相关推荐

  1. DDR2内存参数设置

    DDR2内存参数设置 DDR2内存已经成为目前绝大部分用户的标配产品,而如何合理设置DDR2的参数就成为了不少用户(尤其是菜鸟用户)的最想了解的地方.当你超频的时候,如何平衡内存频率和参数之间的关系: ...

  2. 基于Qsys的DDR2内存驱动

    目录 基于Qsys的DDR2内存驱动 1.建立Qsys系统 1.1.时钟 1.2.NIOS II 1.3.系统ID 1.4.片上RAM 1.5.JTAG调试器 1.6.DDR2控制器 1.7.连接 2 ...

  3. [转载]深入分析:我们为何需要DDR2内存技术(多图)

    文章来自: https://www.cnblogs.com/thx-bj/archive/2008/04/02/1134040.html [IT168评测室]最近,假如你仔细的观察PC领域发生的变化, ...

  4. XLINX系列之Zynq-7000系列DDR内存控制器详解

    1DDR内存控制器介绍 DDR内存控制器支持DDR2,DDR3,DDR3L和LPDDR2设备,包括三个主要块:AXI存储器端口接口(DDRI),带有交易调度器(DDRC)的核心控制器和具有数字PHY( ...

  5. 新1期_012课_内存控制器与SDRAM

    一.基础知识 各种外设有各自的控制器.例如GPIO控制器可控制GPIO输入输出,UART 控制器可以控制不同脉冲的产生 等.而CPU的作用是向各种控制器写入数据,CPU是通过地址线区别不同的外设控制器 ...

  6. 韦东山ARM第一期作业(三)内存控制器和SDRAM

    文章目录 01 - 作业所在路径 02 - 作业描述 03 - 作业解答 01 - 作业所在路径   ARM裸机1期加强版\源码文档图片\文档图片\第012课_内存控制器与SDRAM 02 - 作业描 ...

  7. 七彩虹 pci内存控制器 感叹号 蓝屏 DPC_WATCHDOG_VIOLATION

    最近自己组装台电脑玩, 出现过几次蓝屏 代码 DPC_WATCHDOG_VIOLATION 打开设备管理器 发现好几个黄色感叹号的 点开显示没有兼容驱动(忘记截图了) 大概有 pci内存控制器, sm ...

  8. Memory Population Guidelines for Intel 3rd Gen Xeon Scalable Processors——内存控制器

    Memory Population Guidelines for Intel 3rd Gen Xeon Scalable Processors 英特尔的第三代至强可扩展处理器采用全新的内存控制器架构. ...

  9. 内存控制器与SDRAM_内存接口概念

    辅线1_硬件知识_内存接口概念 如图是S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚). 配置GPIO控制器相应的寄存器,即可让引脚输出高低电 ...

  10. 内存控制器(以位宽为16的NOR FLASH举例)

    CPU 执行的指令: "ldr r0,[某个地址 A]",ldr 是装载 4个字节,这是从这个地址里读取某个数据存到 r0 里去. A 地址的 1 字节数据. A+1 地址的 1 ...

最新文章

  1. 明明有了 promise ,为啥还需要 async await ?
  2. 基于STM32分析栈、堆、全局区、常量区、代码区、RAM、ROM
  3. 用c语言编写数码管的显示函数,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  4. 【学习笔记】区块链应用判断准则
  5. USB 之一 USB2.0 规范详解 第一部分
  6. ITK:像素是否在区域内
  7. oracle中if/else功能的实现的3种写法
  8. 包装类型与包装类别_包装的重要性
  9. wx-charts 微信小程序图表插件
  10. jquery name选择器_Jquery--1
  11. Django--CRM-客户列表展示, 分页
  12. 网络流基础、最大流最小割定理以及证明
  13. 股指期货基差和升贴水介绍
  14. 运行ug软件需要什么样的配置?
  15. 心理学与生活 - 文化与社会
  16. SpringBoot:整合Solr
  17. 握奇ukey没证书_关于中国银行企业网银USBKEY常见问题及解决方法指引140523.doc
  18. [React Native]导航器Navigator
  19. IIS Ceb文件允许下载
  20. python用matplotlib画折线图

热门文章

  1. Git下载与安装 Windows
  2. 论福禄克DTX-1800如何测试CAT7网线?
  3. pchip-三阶Hermite插值
  4. 邮箱个性签名html模板,邮箱个人签名 邮箱个人签名模板
  5. Postman设置环境变量
  6. SVN创建分支及合并
  7. goeasy的简单应用
  8. 海康/大华/宇视等网络摄像头云台控制功能探测方法解析
  9. aforge java_java(一些java API)或C#(emgucv,dshownet,Aforge.NET)中的实时对象跟踪
  10. 查看U盘是USB2.0还是USB3.0