前面我们实验的LED和串口程序,是cpu发送地址给特定的寄存器,在寄存器中写相应的位,达到控制要求。

第一类是GPIO门电路如LED,第二类是协议类如串口,这些都不是cpu直接给地址信息,而是通过寄存器来控制的。

第三类是内存接口,cpu发出的地址可以直接传递给这种设备如nor flash,sdram,网卡。注意nand flash不属于这种类型。

关于SDRAM,可以参考这篇文章,这对于了解sdram很重要,非常有必要阅读一波。

《高手进阶,终极内存技术指南(完整/进阶版)》

这篇文章能够让你了解sdram这个内存介质。

然后,查看2440的芯片资料:

2440已经有针对sdram的控制器,2440可以直接通过地址线和sdram通信。

关于寄存器方面的东西就不再贴出来了。需要注意的是,操作sdram还是比较繁琐的,时序要求需要根据2440手册和所对应的sdram芯片手册进行配置。

现在,我们开始编写程序。

void sdram_init(void)
{
BWSCON = 0x22000000; BANKCON6 = 0x18001;
BANKCON7 = 0x18001; REFRESH = 0x8404f5; BANKSIZE = 0xb1; MRSRB6 = 0x20;
MRSRB7 = 0x20;
} int sdram_test(void)
{
volatile unsigned char *p = (volatile unsigned char *)0x30000000;
int i; // write sdram
for (i = ; i < ; i++)
p[i] = 0x55; // read sdram
for (i = ; i < ; i++)
if (p[i] != 0x55)
return -; return ;
}

上面是sdram的初始化和测试,直接通过地址访问sdram,我们对sdram进行写入,并且再读出来,看看是否相等。这样可以测试是否成功配置sdram。

#include "s3c2440_soc.h"

#include "init.h"

int main(void)
{ sdram_init(); if (sdram_test() == )
led_test(); return ;
}

如果测试通过,返回0,led被点亮,屏蔽掉sdram初始化之后,led不会再闪烁。

昨天实验到这里的时候以为韦老大代码有bug,其实是由于下载器有时候保持一直连接会让新下载的程序无响应,可以拔下下载器或再重启单板就可以看到现象了。

需要注意的是,如同sdram 这样的内存,访问地址时加上volatile能够让你少点烦恼。。。

s3c2440内存控制器与SDRAM基本测试的更多相关文章

  1. S3C2440内存控制器详解

    S3C2440A Memory Map after Reset S3C2440的内存空间划分为不同的块,当CPU向内存控制器发出地址,内存控制器根据地址范围,发出对应片选信号到片选引脚,实现对不同设备 ...

  2. s3c2440裸机-内存控制器(五、SDRAM编程实现)

    配置内存控制器-SDRAM编程配置 2440内存控制器共有13个寄存器. BANK0--BANK5只需要设置BWSCON和BANKCONx(x为0-5)两个寄存器: BANK6.BANK7外接SDRA ...

  3. s3c2440裸机-内存控制器(一、内存控制器的原理)

    1.内存接口概念 S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚(GPA-GPH)),有串口控制器 (接有TXD RXD引脚),有memory controller内存控制器,有Nan ...

  4. s3c2440裸机-内存控制器(二、不同位宽外设与CPU地址总线的连接)

    不同位宽设备的连接 black 我们先看一下2440芯片手册上外设rom是如何与CPU地址总线连接的. 8bit rom与CPU地址线的连接 8bit*2 rom与CPU地址线的连接 8bit*4 r ...

  5. s3c2440裸机-内存控制器(三、norflash初始化-时序设置)

    1.norflash与2440的硬件连接 2.初始化nor,配置nor时序 1.如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部设备的性能进行配置,这里先列出时间参数 ...

  6. s3c2440存储控制器详解

    从上图可知,外部内存类的设备与存储管理器相连,那么CPU是怎样访问到内存的呢?通过存储管理器.CPU比较单纯,只会按照指令执行,CPU只负责发出地址,怎样找到内存类设备呢?这些都交给存储管理器来管理. ...

  7. 存储控制器和SDRAM 实验

    S3C2440 存储控制器(memory controller)提供了訪问外部设备所需的信号,这是一种通过总线形式来訪问扩展的外设. S3C2440  的存储器控制器有下面的特性: 支持小字节序.大字 ...

  8. 回看《例说FPGA》---DDR2控制器集成与读写测试

    回看<例说FPGA> ---DDR2控制器集成与读写测试 1.DDR2 IP核的配置 需要弄清楚的选项主要有: PLL reference clock frequency Memory c ...

  9. APP的CPU,内存,耗电,流量测试工具

    APP的CPU,内存,耗电,流量测试工具下载地址,后续文章会介绍如何使用Emmagee.itest.gt APP应用的CPU,内存,耗电,流量调查 可和同类产品比较,使用GT等工具:CPU靠syste ...

随机推荐

  1. Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译

    Hiredis是Redis数据库一个轻量的C语言客户端库. 之所以轻量是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能.但正是由于这种设计使我们只要熟悉了通用的r ...

  2. 【Algorithm】选择排序

    一. 算法描述 选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1 ...

  3. EasyUI 中GridView 满足某条件 改变行的背景色

    <table id='grid' class='easyui-datagrid' style='width:1500px;height:450px' url='Ajax-index.php?mo ...

  4. 【转】我离开了 Coverity

    我离开了 Coverity 在写这篇博文的时候,我已经不再是 Coverity 的员工了,我已经在今天下午向公司正式辞职. 走出公司的大门,我觉得一身的轻松.这是我几个月以来第一次感受到加州美丽的阳光 ...

  5. php中array_merge合并数组详解

    如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的).如果数组是数字索引的,则键名会以连续方式重新索引. 注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数 ...

  6. dpkg卸载deb包

    一.背景: 一个脚本安装mysql,结果提示缺少依赖库,安装失败. 二.查询: 此时查询deb文件已经安装的情况,得到这个结果: root@debian:~# dpkg -l |grep mysql- ...

  7. (面试)写出下面switch语句的输出结果

    (1) public static void main(String[] as) { int a = 0;  switch (a)  { case 1:   System.out.println(&q ...

  8. Nginx 通过certbot 配置let's encrypt 证书 【转载,整理】

    重要目录:/usr/local/certbot,/var/log/letencrypt,/etc/letencrypt

  9. android Jni NDK开发环境搭建及其简单实例的编写

    android  Jni  NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...

  10. Java 8 – Convert Map to LIST

    Java 8 – Convert Map to LIST Few Java examples to convert a Map to a List Map<String, String> ...