2440内存管理


title: 2440内存管理
tags: ARM
date: 2018-10-17 19:08:49
---

2440内存管理

特性

  • 大/小端(通过软件选择)

  • 地址空间:每个 Bank 有 128M 字节(总共 1G/8 个 Bank)

  • 除了 BANK0(16/32 位)之外【引导ROM,其总线宽度由硬件接线决定,在第一个 ROM 访问前决定 BANK0 的总线宽度】,其它全部 BANK 都可编程访问宽度(8/16/32 位)

  • 所有存储器 Bank 的访问周期可编程

  • 外部等待扩展总线周期

  • 支持 SDRAM 自刷新和掉电模式

  • 总共 8 个存储器 Bank

    • 6 个存储器 Bank 为 ROM,SRAM 等
    • 其余 2 个存储器 Bank 为 ROM,SRAM,SDRAM 等
  • 7 个固定的存储器 Bank 起始地址

  • 1 个可变的存储器 Bank 起始地址并 Bank 大小可编程

    • bank7,为了与bank6组成双通道,所以其起始地址是bank6地址的尾地址,bank6=bank7大小

    mark

内存地址分配

mark

工作方式

GPIO/门电路接口、协议类接口、内存类接口都属于CPU的统一编址内存控制器根据不同的地址地址范围,发出不同的片选引脚.比如当CPU发出的指令的地址范围处于0x20000000 - 0x28000000,内存控制器就会使nGCS4处于低电平.

对于Nand Flash,在原理图上它的地址线并没有连接到CPU,因此它不参与CPU的统一编址。但它的数据线也接到了数据总线上,为了防止干扰,它也有一个片选信号(CE)。当CPU访问Nand Flash时,Nand Flash控制器才会片选Nand Flash,让其接收数据总线上的数据。

位宽与基址

位宽分为8/16/32,程序的最小存储单位为1个字节也就是8位宽.假设地址信号为【An,An-1......A3,A2,A1,A0】

位宽(数据线)地址线
8【An,An-1......A3,A2,A1,A0】
16【An,An-1......A3,A2,A1】
32【An,An-1......A2】

所谓位宽,也就是一个存储单元存储了几个位.比如32位的,也就是一次取值是4字,地址序列为[0,4,8,12]>[0b0000,0000>0b0000,0100>0b0000,1000>0b0000,1100],也就是低2位为0.

基址,也就是片选信号在哪里,基址就在哪里.

寻址范围

寻址范围与位宽无关,只与地址线有关.比如接了[A0,A2],那么就能寻址[0,1,4,5]也就是寻址[0--5].如果地址线是[A0--A20],寻址到[0----2^21]也就是2M

引脚描述

  • nWE OUTPUT nWE (Write Enable) indicates that the current bus cycle is a write cycle.
  • nOE OUTPUT nOE (Output Enable) indicates that the current bus cycle is a read cycle.
  • nWAIT INPUT nWAIT requests to prolong a current bus cycle. As long as nWAIT is L, the
    current bus cycle cannot be completed.

内存接口的时序

mark

NorFLASH

开发板使用的NORFLASH是MX29LV160DBTI,2M大小,接在nGCS0,所以基址是0.

mark

mark

Taa 地址信号Taa后数据有效70ns
Tce 片选信号后Tce后数据有效70ns
Toe 数据在Oe后Toe后有效30ns
Toh 数据保持时间0ns
Tdf 在Tdf内数据不稳定,也就是不允许访问其他芯片,30ns一般不需要理会这个,因为再次访问的时候,还需要时序前面的Taa等,等到稳定的时候,数据已经稳定了
Trc 读周期时间,最小70ns,也就是速度性能 70ns

为了简单把地址数据(Addresses),片选信号(CE#),读信号(OE#),同时发出,然后让它们都等待70ns(等待信号有效)。对应S3C2440的Nor Flash控制器的读时序图,需要让地址信号A[24:0]、片选信号nGCS、读信号nOE同时发出,保持Tacc大于等于70ns。然后设置读之后的那些时序tdf,toh为0[因为下一次使用会又有片选的70ns]

mark

位宽设置

mark

为什么上电就能使用NOR

这里的Tacc默认值是111最大值为14个时钟,这也是为什么我们不用设置NORFLASH就能开机使用.上电的时候是使用晶振12M,也就是tacc=14*Hclk=1/12M*14=1166ns>70ns

设置寄存器

  • BWSCON中Bank0不需要设置
  • 将HCLK设置为100MHz,T=1000/100=10ns,Tacc需要大于等于70ns,因此设置Tacc等于101,8个clocks即可。
  • BANKCONn其他位不需要设置,保持0,也就是说将地址、片选、地址同时发出,读后不保持时间.
void bank0_tacc_set(int val)
{BANKCON0 = val << 8;//设置【10:8】
}

测试:烧录到NOR启动,实际测了一下使用5个周期都是可以的

SDRAM

内存知识补遗

SDRAM学习笔记(二)

  • P-Bank, 物理位宽,要等同于CPU的数据总线宽度,也是北桥内存总线宽度,适用于SDRAM以及以前产品,在RDRAM中以通道代替
  • SDRAM synchronous Dynamic Random Access Memory 同步动态随机存储器
  • SIMM single In-line Memory moudle 单列内存模组
  • DIMM double in-line Memory moudle 双列内存模组
  • SDRAM 芯片位宽 SDRAM芯片的数据总线
  • 内存颗粒==内存芯片
  • L-bank logic bank ,SDRAM芯片内部的bank,一般4个
  • 内存芯片容量=行*列*L-bank*位宽
  • 引脚
    • Dqn 数据总线
    • An 行列地址线
    • DQM 数据掩码
    • CAS# 列选中
    • RAS# 行选中
    • CK 时钟信号
    • CKE 时钟有效
    • Ban L-bank线
    • WE# 写有效

使用简介

首先器件上电----对SDRAM进行初始化(因为内部有逻辑电路部分,状态机部分)----对SDRAM进行200us的稳定期(参数INIT_PER)----预充电,对所有的L-Bank进行预充电(预充电时间间隔tRP)----8个预先刷新周期(手册规定至少2个周期来刷新逻辑块,在设计中一般直接给8个周期,参数REF_PER)----模式寄存器的配置(行选通周期参数tRCD,由于SDRAM内部结构导致更新存储阵列需要时间---数据输出延时时间tCL---突发长度BL设置) https://www.cnblogs.com/raymon-tec/p/5147217.html

初始化协商 MSR 模式寄存器

SDRAM 在上电的时候需要BIOS对其初始化设置MSR 模式,也就是协商一些参数,下图是板载的模式字

  • 操作模式
  • CAS 潜伏期 列地址潜伏期,设置后发送列地址后cas周期后发送数据
  • BT 突发传输模式
  • BL 突发长度

mark

寻址

[(允许同时)CS片选,L-bank选择,行有效]列有效

数据读

有个参数 CAS Latency,CAS 潜伏期=又被称为读取潜伏期(RL,Read Latency),这个在初始化时设定

数据写

注意参数 twr 回写时间

突发模式

连续读取,只需要发送起始列地址,BL在协商的时候规定了

板载SDRAM

JZ2440连接的是EM63A165TS-6G,其规格是16M x 16 bit=32M,两通道也就是64M

4M word x 16-bit x 4-bank,说明内部4个bank,位宽16

CLK
CKE         Clock Enable,时钟使能
BA0,BA1     Bank Activate,Bank选择
A0-A12      Address Inputs,Row(行)=A0-A12,column= A0-A8 with A10Duringa Precharge command, A10 is sampled to determine if all banks are to be precharged(A10 = HIGH). 
CS#         Chip Select
RAS#        Row Address Strobe:
CAS#        Column Address Strobe
WE#         Write Enable
LDQM,UDQM   Data Input/Output Mask 掩码
DQ0-DQ15    Data I/O

mark

mark

地址计算

  • 行=A0~A12,列=A0~A8,16位位宽,一个单元两个字节,4个Bank,所以1个bank=2^13*2^9*2/1024/1024=8M,4个Bank=32M.

  • 32位寻址,所以要忽略CPU2440的低两位地址线[0,1]

  • bank线如何确认?总共是双通道,32位位宽,所以实际上选中一个bank其实是选中了两个物理的Bank=16M=2^24,所以地址线在[24,25],或者也可以这么理解

    寻址64M,4个片选也就是64/4=16M,16M=2^(20+4),所以0->2^23=16M,其再高1位就是24线了
  • BANK6的起始地址为0x30000000,所以SDRAM的访问地址为0x30000000~低0x33FFFFFF,共64MB

mark

mark

程序设计

时序参数

mark

板子只用到了Bank6的片选,BANK0--BANK5只需要设置BWSCON和BANKCONx(x为0~5)两个寄存器;BANK6、BANK7外接SDRAM时,除BWSCON和BANKCONx(x为6、7)外,还要设置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4个寄存器。

void sdram_init(void)
{BWSCON = 0x22000000;    //选择sdram,32位宽BANKCON6 = 0x17001;     //时间参数BANKCON7 = 0x17001;REFRESH  = 0x8404f5;    //刷新周期BANKSIZE = 0xb1;        //size=64MMRSRB6   = 0x20;        //CASMRSRB7   = 0x20;
}//测试SDRAM地址
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;
}

mark

转载于:https://www.cnblogs.com/zongzi10010/p/10023594.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#设计模式之十二代理模式(Proxy Pattern)【结构型】

一、引言 今天我们要讲【结构型】设计模式的第七个模式&#xff0c;也是“结构型”设计模式中的最后一个模式&#xff0c;该模式是【代理模式】&#xff0c;英文名称是&#xff1a;Proxy Pattern。还是老套路&#xff0c;先从名字上来看看。“代理”可以理解为“代替”&#…

CentOS7.5 使用二进制程序部署Kubernetes1.12.2(三)

一、安装方式介绍 1、yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面&#xff0c;使用 yum 安装&#xff0c;好处是简单&#xff0c;坏处也很明显&#xff0c;需要官方更新 yum 源才能获得最新版本的软件&#xff0c;而所有软件的依赖又不能自己指…

马来西亚热情拥抱阿里巴巴 马云倡议的eWTP首次落地海外

摘要&#xff1a;3月22日&#xff0c;马来西亚总理纳吉布与阿里巴巴集团董事局主席马云一同出现在吉隆坡一场盛大启动仪式上&#xff0c;他们将共同见证马云的eWTP理念落地马来西亚。 3月22日&#xff0c;在邀请阿里巴巴集团董事局主席马云、阿里巴巴集团CEO张勇、蚂蚁金服集团…

随便玩玩之PostgreSQL(第一章)PostgreSQL简介

随便玩玩之PostgreSQL 未经授权不得转载 第1章PostgreSQL简介 1.1什么是PostgreSQLPostgresql是数据库&#xff08;软件&#xff09;。The worlds most advanced open source database.世界上最先进的开源数据库。 1.2PostgreSQL的优势随便用、不要钱 比MySQL好&#xff0c;媲美…

生产环境中Oracle常用函数总结

1>to_char,将日期转换为字符&#xff1b;add_months,在第一个参数的日期上加或者减第二个参数的值&#xff1b;select dkzh,jkhtbh,yhkrq,dkffrq,shqs,dqyqcs,to_char(add_months(dkffrq,shqsdqyqcs1),yyyymm) from grdk_dk_zz a where a.dkzt in(02,03) and jgbm like 01||…

Dockerfile构建容器镜像 - 运维笔记

在Docker的运用中&#xff0c;从下载镜像&#xff0c;启动容器&#xff0c;在容器中输入命令来运行程序&#xff0c;这些命令都是手工一条条往里输入的&#xff0c;无法重复利用&#xff0c;而且效率很低。所以就需要一 种文件或脚本&#xff0c;我们把想执行的操作以命令的方式…

201421123042 《Java程序设计》第8周学习总结

1. 本周学习总结 以你喜欢的方式&#xff08;思维导图或其他&#xff09;归纳总结集合相关内容。 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码&#xff1a; 答&#xff1a;查找对象是否再数组中&#xff0c;并且返回在数组中的下标。如果不在数…

Linux学习-11月12日(Apache安装)

2019独角兽企业重金招聘Python工程师标准>>> 11.6 MariaDB安装 11.7/11.8/11.9 Apache安装 扩展 apache dso https://yq.aliyun.com/articles/6298 apache apxs https://wizardforcel.gitbooks.io/apache-doc/content/51.html apache工作模式 https://blog.csdn.…

Linux C 读取文件夹下所有文件(包括子文件夹)的文件名

本文&#xff1a;http://www.cnblogs.com/xudong-bupt/p/3504442.html Linux C 下面读取文件夹要用到结构体struct dirent&#xff0c;在头#include <dirent.h>中&#xff0c;如下&#xff1a; #include <dirent.h> struct dirent {long d_ino; /* inode number 索…

报表工具实现单据套打

【摘要】 单据套打再也不用手动测量&#xff0c;反复调试了&#xff0c;报表工具实现单据套打&#xff0c;去乾学院看个究竟&#xff1a;报表工具实现单据套打!实际项目开发中&#xff0c;很多情况会涉及到单据的打印。即在一张印刷好的空白单据上&#xff0c;准确无误地打印上…

session机制详解以及session的相关应用

session是web开发里一个重要的概念&#xff0c;在大多数web应用里session都是被当做现成的东西&#xff0c;拿来就直接用&#xff0c;但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求&#xff0c;当碰到这样的情况时候我们需要更加深入的理解session的机制&am…

(转)Shell中获取字符串长度的七种方法

Shell中获取字符串长度的七种方法 原文&#xff1a;http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用&#xff0c;下面归纳、汇总了求字符串的几种可能方法: 【方法一】:利用${#str}来获取字符串的长度 【方法二】:利用awk的length方…

linux下用core和gdb查询出现段错误的地方

有些时候我们在一段C代码的时候&#xff0c;由于对一个非法内存进行了操作&#xff0c;在程序运行的过程中&#xff0c;出现了"段错误"。呵呵&#xff0c;这种问题我想很多人会经常遇到。遇到这种问题是非常无语的&#xff0c;只是提示了"段错误"&#xff…

什么是js的严格模式

设立严格模式的原因&#xff1a; - 消除Javascript语法的一些不合理、不严谨之处&#xff0c;减少一些怪异行为; - 消除代码运行的一些不安全之处&#xff0c;保证代码运行的安全&#xff1b; - 提高编译器效率&#xff0c;增加运行速度&#xff1b; - 为未来新版本的Javascrip…

代码解说Android Scroller、VelocityTracker

在编写自己定义滑动控件时经常会用到Android触摸机制和Scroller及VelocityTracker。Android Touch系统简单介绍&#xff08;二&#xff09;:实例具体解释onInterceptTouchEvent与onTouchEvent的调用过程对Android触摸机制须要用到的函数进行了具体的解释。本文主要介绍两个重要…

支付宝支付

1 申请商户平台 2 申请开放平台 3 申请APP支付 4 创建应用 (名称&#xff0c;logo) 5 生成RSA秘钥&#xff08;公钥&#xff0c;私钥&#xff09; 6 在应用中配置公钥 7 配置其他内容&#xff0c;包括iOS bundle ID。配置安卓包名&#xff0c;和签名。 获取appid&#xff0c;公…

不可错过的CMS学习笔记

引子 带着问题去学习一个东西&#xff0c;才会有目标感&#xff0c;我先把一直以来自己对CMS的一些疑惑罗列了下&#xff0c;希望这篇学习笔记能解决掉这些疑惑&#xff0c;希望也能对你有所帮助。 CMS出现的初衷、背景和目的&#xff1f; CMS的适用场景&#xff1f; CMS的tr…

相机工作原理

轻轻一按&#xff0c;你的相机就把光子转换为了比特。于是一张相片就保存到了你的 iPhone 里。 让我们假设一下你身处室外&#xff0c;环顾四周。三亿里之外&#xff0c;太阳无时无刻不在发射光子。它们需要花上 8 分钟之久才能到达我们舒适的星球。有一些光子撞击到你周围的物…

CentOS用户和用户组的操作

2019独角兽企业重金招聘Python工程师标准>>> CentOS用户和用户组的操作 長得太帥忚四種檌 关注 2018.05.12 16:40* 字数 312 阅读 115评论 0喜欢 0 用户组的操作 1.添加用户组&#xff1a; groupadd 组名2.修改组名 groupmod -n 新组名 原组名删除用户组groupdel 组…

Linux用户空间与内核地址空间

Linux 操作系统和驱动程序运行在内核空间&#xff0c;应用程序运行在用户空间&#xff0c;两者不能简单地使用指针传递数据&#xff0c;因为Linux使用的虚拟内存机制&#xff0c;用户空间的数据可能被换出&#xff0c;当内核空间使用用户空间指针时&#xff0c;对应的数据可能不…