s3c2440内存控制器与SDRAM基本测试
前面我们实验的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 sdramfor (i = 0; i < 1000; i++)p[i] = 0x55;// read sdramfor (i = 0; i < 1000; i++)if (p[i] != 0x55)return -1;return 0; }
上面是sdram的初始化和测试,直接通过地址访问sdram,我们对sdram进行写入,并且再读出来,看看是否相等。这样可以测试是否成功配置sdram。
#include "s3c2440_soc.h"#include "init.h"int main(void) {sdram_init();if (sdram_test() == 0)led_test();return 0; }
如果测试通过,返回0,led被点亮,屏蔽掉sdram初始化之后,led不会再闪烁。
昨天实验到这里的时候以为韦老大代码有bug,其实是由于下载器有时候保持一直连接会让新下载的程序无响应,可以拔下下载器或再重启单板就可以看到现象了。
需要注意的是,如同sdram 这样的内存,访问地址时加上volatile能够让你少点烦恼。。。
转载于:https://www.cnblogs.com/yangguang-it/p/7858121.html
s3c2440内存控制器与SDRAM基本测试相关推荐
- 新1期_012课_内存控制器与SDRAM
一.基础知识 各种外设有各自的控制器.例如GPIO控制器可控制GPIO输入输出,UART 控制器可以控制不同脉冲的产生 等.而CPU的作用是向各种控制器写入数据,CPU是通过地址线区别不同的外设控制器 ...
- 韦东山ARM第一期作业(三)内存控制器和SDRAM
文章目录 01 - 作业所在路径 02 - 作业描述 03 - 作业解答 01 - 作业所在路径 ARM裸机1期加强版\源码文档图片\文档图片\第012课_内存控制器与SDRAM 02 - 作业描 ...
- 内存控制器与SDRAM
S3C2440统一编址包含了GPIO,串口.I2C.SDRAM等设备类型,但是这个芯片Nandflash不是在统一编址范围内,Nandflash控制器是在统一编址中的.其中Nandflash的地址线也 ...
- 韦一之内存控制器,2440地址空间,NOR flash和SDRAM(012课)
大部分内容来自韦东山老师视频及博客:https://blog.csdn.net/thisway_diy/article/details/79389530 一个可参考的很好很详细的博客文档:https: ...
- 内存技术:入门和测试挑战
人们一直希望计算机内存变得容量更大.速度更快.功率更低.物理尺寸更小.这些需求正推动着 DRAM 技术不断发展.在过去几年中,多次技术增强已经推进了主流DRAM 的发展,如 SDRAM (同步 DRA ...
- 内存控制器与SDRAM_内存接口概念
辅线1_硬件知识_内存接口概念 如图是S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚). 配置GPIO控制器相应的寄存器,即可让引脚输出高低电 ...
- 存储控制器(SDRAM操作)
什么是存储控制器 2440是32位单片机,进行数据访问时通过32位地址访问. CPU发出32位地址信号给存储控制器,存储控制器根据地址信号设置片选信号及地址总线,将相应数据通过数据总线传回存储控制器, ...
- XLINX系列之Zynq-7000系列DDR内存控制器详解
1DDR内存控制器介绍 DDR内存控制器支持DDR2,DDR3,DDR3L和LPDDR2设备,包括三个主要块:AXI存储器端口接口(DDRI),带有交易调度器(DDRC)的核心控制器和具有数字PHY( ...
- memcpy()内存拷贝和赋值操作效率测试
比较memcpy()内存拷贝和"="赋值操作效率,测试代码如下 #include <stdio.h> #include <malloc.h> #includ ...
最新文章
- react 子组件获取变量属性值
- 鉴智机器人高薪诚聘 | 3D视觉、SLAM、SLAM/VIO融合定位算法工程师等多个岗位
- 3D-HEVC视频编码技术
- C语言基本数据结构之二(二叉树的三种遍历,节点数以及深度算法)
- opencv 直线检测笔记
- java的知识点27——lambda推导
- 【深度学习】网络中隐含层神经元节点的个数(需要学习的特征数目)
- CSS 实现文字、图片垂直对齐(vertical-align)
- python随机图片api_抓取随机图片
- ARCore:从Android Studio开始
- sde mysql_ArcSDE:企业级地理数据库概述
- 北京市中小学信息学竞赛汇总 徐于铃
- 安卓Dalvik VM虚拟机
- win11如何快速关机 windows11快捷键关机的设置方法
- R语言 cor与lm
- python调用百度地图API爬取西安市POI数据
- Unity中的网络编程
- 旋转编码器EC11调试心得
- Unity3D 录音功能 音频保存
- 巴比特 | 元宇宙每日必读:粤港澳大湾区出台首个“元宇宙10条”,“三个五百万”将扶持哪些赛道?...
热门文章
- sqoop——将mysql数据库的数据表导入到hdfs上
- 验证二叉搜索数—leetcode98
- Android安卓APK反编译逆向
- hibernate报错 net.sf.json.util.CycleDetectionStrategy$StrictionStrategyRepeatedReferenceAsObject
- 启动ucosii之OSInit()
- C++ 程序内存泄漏检测方法
- 今天在网上看到一个帖子,怎么样锻炼自己的大脑
- CPP中的this指针
- linux, configure --prefix=/有什么用
- 硬件加速会使电脑黑屏吗?