3. 内存控制器与SDRAM

article/2025/10/1 8:11:07

内存控制器(内存接口设备)在这里插入图片描述

地址处于不同的范围,会发出不同的片选引脚,换句话说,SOC外接的不同内存芯片,会有不同的地址范围。
CPU统一编址包括GPIO,各种协议类接口控制器(UART,I2C…),内存设备接口,nand flash控制器(nand flash芯片本身不受cpu统一编址)。每个片选信号可选择的地址范围空间为128M,至少需要27条地址线。

CPU发送32为地址 -> 内存控制器 -> 发出27为地址信号和片选信号

时序图分析

可编程访问周期
2440读时序图
在这里插入图片描述
Nor Flash芯片时序图
在这里插入图片描述
在这里插入图片描述
要根据内存芯片手册,修改时序图中的各种值。芯片默认值都是最保险的,无法发挥cpu的性能。
为简单起见,我们设置2440芯片片选(CE#)读信号(OE#)地址信号同时发出,保持70nm

内存控制器相关寄存器(Nor Flash)

总线位宽和等待控制寄存器
在这里插入图片描述在这里插入图片描述
Bank控制寄存器
在这里插入图片描述
设置Tacc[10:8] = 100
init.c

#include "s3c2440_soc.h"void bank0_tacc_set(int val)
{BANKCON0 = val << 8;
}

init.h

#ifndef _INIT_H
#define _INIT_Hvoid bank0_tacc_set(int val);#endif

uart.c

#include "s3c2440_soc.h"/* 115200,8n1 */
void uart0_init()
{/* 设置引脚用于串口 *//* GPH2,3用于TxD0, RxD0 */GPHCON &= ~((3<<4) | (3<<6));GPHCON |= ((2<<4) | (2<<6));GPHUP &= ~((1<<2) | (1<<3));  /* 使能内部上拉 *//* 设置波特率 *//* UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1*  UART clock = 50M*  UBRDIVn = (int)( 50000000 / ( 115200 x 16) ) –1 = 26*/UCON0 = 0x00000005; /* PCLK,中断/查询模式 */UBRDIV0 = 26;/* 设置数据格式 */ULCON0 = 0x00000003; /* 8n1: 8个数据位, 无较验位, 1个停止位 *//*  */}int putchar(int c)
{/* UTRSTAT0 *//* UTXH0 */while (!(UTRSTAT0 & (1<<2)));UTXH0 = (unsigned char)c;}int getchar(void)
{while (!(UTRSTAT0 & (1<<0)));return URXH0;
}int puts(const char *s)
{while (*s){putchar(*s);s++;}
}

uart.h

#ifndef _UART_H
#define _UART_Hvoid uart0_init();
int putchar(int c);
int getchar(void);
int puts(const char *s);#endif

main.c

#include "s3c2440_soc.h"
#include "uart.h"
#include "init.h"int main(void)
{unsigned char c;uart0_init();puts("Enter the Tacc val: \n\r");while(1){c = getchar();putchar(c);if (c >= '0' && c <= '7'){bank0_tacc_set(c - '0');led_test();}else{puts("Error, val should between 0~7\n\r");puts("Enter the Tacc val: \n\r");}}return 0;
}

设置将程序烧写到nor flash上,设置为nor启动,用串口设置不同的值,观察灯的闪烁。

SDRAM基础知识

看本专栏《内存SDRAM》

2440内存控制器设置

我们SDRAM的地址是在Bnak6上
在这里插入图片描述

  • 我们用两个芯片位宽位16位的SDRAM芯片,组成32位物理位宽 DW6[25:24] = 10
  • 当cpu发出读写信号,芯片还是没有准备好数据,可以向cpu发送一个wait信号,我们不需要,WS6[26] = 0
  • 读写是否精确到byte。不需要,读出一个32位数据,内存控制器选择byte即可。ST6[26] = 0

在这里插入图片描述
设置SDRAM,只需要设置MT[16:15]、Trcd[3:2]、SCAN[1:0]。
SCAN[1:0]:列地址,查看芯片手册,得到9位。
Trcd[3:2]:行地址和列地址之间delay多长时间。看芯片手册时20ns

SDRAM在使用过程中需要不断去刷新它
刷新寄存器
在这里插入图片描述
使能刷新,自动刷新
Refresh Counter[10:0] :
在这里插入图片描述
查看芯片手册,可以算到1269

在这里插入图片描述
在这里插入图片描述
CL[6:4]:sdram收到列地址后,等一会才会返回数据

SDRAM测试程序
在SDRAM中写一个值,再读取,测试是否正确。

init.c init.h

#include "s3c2440_soc.h"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;
}
#ifndef _INIT_H
#define _INIT_Hvoid sdram_init(void);
int sdram_test(void);#endif

main.c

#include "s3c2440_soc.h"
#include "uart.h"
#include "init.h"int main(void)
{uart0_init();sdram_init();if (sdram_test() == 0)led_test();return 0;
}

http://chatgpt.dhexx.cn/article/Tiok2c4e.shtml

相关文章

存储控制器

存储控制器是按照一定的时序规则对存储器的访问进行必要控制的设备&#xff0c;包括地址信号、数据信号以及各种命令信号的控制&#xff0c;使主设备(访问存储器的设备)能够根据自己的要求使用存储器上的存储资源。 存储控制器的作用主要就是进行接口的转换&#xff0c;将主设…

内存控制器

1.内存控制器&#xff08;Memory Controller&#xff09; 内存控制器&#xff08;Memory Controller&#xff09;是计算机系统内部控制内存并且通过内存控制器使内存与CPU之间交换数据的重要组成部分。内存控制器决定了计算机系统所能使用的最大内存容量、内存BANK数、内存类型…

Java并发包中常用类小结(一)

Java并发包中常用类小结(一) 从JDK1.5以后&#xff0c;Java为我们引入了一个并发包&#xff0c;用于解决实际开发中经常用到的并发问题&#xff0c;那我们今天就来简单看一下相关的一些常见类的使用情况。 1、ConcurrentHashMap ConcurrentHashMap其实就是线程安全版本的has…

java并发包源码分析

java并发包之AbstractQueuedSynchronizer源码分析 分析并发包首先要了解AbstractQueuedSynchronizer&#xff08;AQS&#xff09;&#xff0c;因为AQS是并发包的基础工具类。本文从ReentrantLock的公平锁出发&#xff0c;分析AbstractQueuedSynchronizer的工作过程。 lock与u…

【Java进阶】Java并发包提供了哪些并发工具类?

通过前面的学习&#xff0c;我们一起回顾了线程、锁等各种并发编程的基本元素&#xff0c;也逐步涉及了 Java 并发包中的部分内容&#xff0c;相信经过前面的热身&#xff0c;我们能够更快地理解 Java 并发包。 今天我要问你的问题是&#xff0c;Java 并发包提供了哪些并发工具…

java---JUC并发包详解

目录 前言 一、atomic包 AtomicInteger类 AtomicReference类 AtomicStampedReference类 二、locks包 接口 Condition Lock ReadWriteLock 实现类 ReentrantLock类 ReentrantReadWriteLock类 三、CountDownLatch 四、Semaphore(信号量) 总结 前言 JUC是java.u…

Java多线程并发编程--Java并发包(JUC)

Java多线程并发–Java并发包&#xff08;JUC&#xff09; 前言 前一篇文章中&#xff0c;笔者已经介绍了Java多线程的一些基础知识&#xff0c;但是想要成为一名中高级Java程序员还必须懂得Java并发包&#xff08;JUC&#xff09;的知识点&#xff0c;而且JUC现在也是面试中必…

接口测试--apipost如何自定义header中的content-type

使用apipost进行接口测试的时候&#xff0c;有时候会用到一些自定义或者不常见的content-type格式&#xff0c;这个时候就要手动在header头部自定义content-type。 这里我们自定义一个content-type&#xff0c;格式为application/octet-stream 然后body选择的为form-data&…

Type-c引脚定义

Type-c口是什么口&#xff0c;有什么作用&#xff1f; Type-c口在大家的视野中或许比较陌生&#xff0c;但是生活中处处离不开Type-c口的存在。手机&#xff0c;电脑&#xff0c;音箱&#xff0c;小家电&#xff0c;无人机…等等&#xff0c;都存在Type-c接口。 Type-c只是一种…

TYPE-C12PIN接口电路

16PIN封装只有12个PIN脚&#xff0c;所有16/12PIN其实是一种规格 特点&#xff0c;正反插 VBS-VCC A5,B5接电阻拉地 A7,B7串联接电阻成为DN A6,B6串联接电阻成为DP GND拉地 外壳拉地 USB接口介绍

TypeScript-interface接口篇

简介 接口的作用&#xff1a;在面向对象的编程中&#xff0c;接口是一种规范的定义&#xff0c;它定义了行为和动作的规范&#xff0c;在程序设计里面&#xff0c;接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范&#xff0c;接口不关心这些类的内部状态数…

TypeScript(四)接口

目录 前言 定义 用法 基本用法 约定规则 属性控制 任意属性 可选属性 只读属性 定义函数 冒号定义 箭头定义 接口类型 函数接口 索引接口 继承接口 类接口 总结 前言 本文收录于TypeScript知识总结系列文章&#xff0c;欢迎指正&#xff01; 在介绍TS对象…

Type-C接口简单介绍-面向单片机应用

Type-C接口简单介绍-面向单片机应用 1、绪论 用单片机做一些东西时&#xff0c;Type-C接口逐渐替代了MicroUSB接口。但不像MicroUSB那样只有5V、GND、D、D-、ID五个接口&#xff0c;Type-C接口有24个引脚&#xff0c;比较复杂。大多时候我们用TypeC也用不到USB3.0协议&#x…

CTP_将C++封装为Python可调用接口

目录 写在前面&#xff1a; 前置准备&#xff1a; step 1 与上期所原始代码对比分析源码 td源码 1 配置属性-》常规-》配置类型 要为 “动态库(.dll)” 2 VC目录 -》包含目录 3 VC目录 -》 库目录 4 链接器-》常规-》附加库目录 5 链接器-》输入-》附加依赖项 vnctp.h 的功…

一文读懂USB Type-C接口 <一>:引脚和功能指南

本文将介绍USB Type-C标准的一些最重要的特性。 你知道如何使用USB Type-C接口吗?本文列出了USB Type-C引脚的解剖结构&#xff0c;并简要介绍了其各种模式。 USB Type-C是一种USB连接器系统的规范&#xff0c;它在智能手机和移动设备中越来越受欢迎&#xff0c;能够提供电力和…

VisionPro连接相机步骤

一、修改相机与电脑IP地址在同一网段上 1、修改相机IP地址 在菜单栏找到 “Cognex GigE Vision Configurator” &#xff0c;可直接输出搜索。 或者在visionPro默认安装目录下 “C:\Program Files\Cognex\VisionPro\bin”&#xff0c;找到“Cognex GigE Vision Configurator…

机器视觉——相机选型

目录 相机选型 分辨率、快门、帧率、色彩、靶面、接口 镜头选型 分辨率、靶面、焦距、接口、光圈畸变工作距离 常用计算示例 相机选型 分辨率、快门、帧率、色彩、靶面、接口 镜头选型 分辨率、靶面、焦距、接口、光圈畸变工作距离 常用计算示例 1. 面阵相机和镜头选型 已…