TMS320C6455之DDR2内存控制器
基于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内存控制器相关推荐
- DDR2内存参数设置
DDR2内存参数设置 DDR2内存已经成为目前绝大部分用户的标配产品,而如何合理设置DDR2的参数就成为了不少用户(尤其是菜鸟用户)的最想了解的地方.当你超频的时候,如何平衡内存频率和参数之间的关系: ...
- 基于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 ...
- [转载]深入分析:我们为何需要DDR2内存技术(多图)
文章来自: https://www.cnblogs.com/thx-bj/archive/2008/04/02/1134040.html [IT168评测室]最近,假如你仔细的观察PC领域发生的变化, ...
- XLINX系列之Zynq-7000系列DDR内存控制器详解
1DDR内存控制器介绍 DDR内存控制器支持DDR2,DDR3,DDR3L和LPDDR2设备,包括三个主要块:AXI存储器端口接口(DDRI),带有交易调度器(DDRC)的核心控制器和具有数字PHY( ...
- 新1期_012课_内存控制器与SDRAM
一.基础知识 各种外设有各自的控制器.例如GPIO控制器可控制GPIO输入输出,UART 控制器可以控制不同脉冲的产生 等.而CPU的作用是向各种控制器写入数据,CPU是通过地址线区别不同的外设控制器 ...
- 韦东山ARM第一期作业(三)内存控制器和SDRAM
文章目录 01 - 作业所在路径 02 - 作业描述 03 - 作业解答 01 - 作业所在路径 ARM裸机1期加强版\源码文档图片\文档图片\第012课_内存控制器与SDRAM 02 - 作业描 ...
- 七彩虹 pci内存控制器 感叹号 蓝屏 DPC_WATCHDOG_VIOLATION
最近自己组装台电脑玩, 出现过几次蓝屏 代码 DPC_WATCHDOG_VIOLATION 打开设备管理器 发现好几个黄色感叹号的 点开显示没有兼容驱动(忘记截图了) 大概有 pci内存控制器, sm ...
- Memory Population Guidelines for Intel 3rd Gen Xeon Scalable Processors——内存控制器
Memory Population Guidelines for Intel 3rd Gen Xeon Scalable Processors 英特尔的第三代至强可扩展处理器采用全新的内存控制器架构. ...
- 内存控制器与SDRAM_内存接口概念
辅线1_硬件知识_内存接口概念 如图是S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚). 配置GPIO控制器相应的寄存器,即可让引脚输出高低电 ...
- 内存控制器(以位宽为16的NOR FLASH举例)
CPU 执行的指令: "ldr r0,[某个地址 A]",ldr 是装载 4个字节,这是从这个地址里读取某个数据存到 r0 里去. A 地址的 1 字节数据. A+1 地址的 1 ...
最新文章
- 明明有了 promise ,为啥还需要 async await ?
- 基于STM32分析栈、堆、全局区、常量区、代码区、RAM、ROM
- 用c语言编写数码管的显示函数,各位大神,如何用C语言实现在数码管上实现1234同时亮...
- 【学习笔记】区块链应用判断准则
- USB 之一 USB2.0 规范详解 第一部分
- ITK:像素是否在区域内
- oracle中if/else功能的实现的3种写法
- 包装类型与包装类别_包装的重要性
- wx-charts 微信小程序图表插件
- jquery name选择器_Jquery--1
- Django--CRM-客户列表展示, 分页
- 网络流基础、最大流最小割定理以及证明
- 股指期货基差和升贴水介绍
- 运行ug软件需要什么样的配置?
- 心理学与生活 - 文化与社会
- SpringBoot:整合Solr
- 握奇ukey没证书_关于中国银行企业网银USBKEY常见问题及解决方法指引140523.doc
- [React Native]导航器Navigator
- IIS Ceb文件允许下载
- python用matplotlib画折线图
热门文章
- Git下载与安装 Windows
- 论福禄克DTX-1800如何测试CAT7网线?
- pchip-三阶Hermite插值
- 邮箱个性签名html模板,邮箱个人签名 邮箱个人签名模板
- Postman设置环境变量
- SVN创建分支及合并
- goeasy的简单应用
- 海康/大华/宇视等网络摄像头云台控制功能探测方法解析
- aforge java_java(一些java API)或C#(emgucv,dshownet,Aforge.NET)中的实时对象跟踪
- 查看U盘是USB2.0还是USB3.0