02-JZ2440裸机学习之存储管理器

发布者:DreamyEclipse最新更新时间:2022-04-22 来源: eefocus关键字:JZ2440  存储管理器 手机看文章 扫描二维码
随时随地手机看文章

ARM片内资源中,内存很小,为了能够运行操作系统和大的应用程序,需要在ARM存储接口上进行扩展,如SDRAM,SRAM,ROM,FLASH等,ARM提供一个存储管理器部件,为访问外部存储设备提供存储地址信号和控制信号,即存储器控制器

硬件学习,首先要明确目的,多问为什么?


1、引出存储器管理器作用:


(对SDRAM、网卡、nor等设备进行初始化,以便存储器管理器配合CPU进行与外设数据通讯)


(1)为什么存在存储器管理器:


CPU不会管太多,CPU只会发出指令从某个地址读数据,此时存储器管理器会根据地址判断时什么设备,并负责数据操作,把CPU想操作的数据反馈给CPU:

存储器管理器根据地址 知道是什么东西,然后发出片选等信号(bank0-7)

(2)想访问一个存储芯片 需要哪些条件?


(1)    地址线


(2)    数据线 8/16/32 数据宽度


(3)    时钟频率


(4)    芯片相关特性

参考如下:http://www.cnblogs.com/hyd-desert-camel/p/3353415.html

(3)使用存储控制器访问外设的原理


S3C2440的地址空间:


27位地址线,32位数据线,8个片选信号。共8个存储器(BANK0-7)1GB


系统上电将从bank0开始执行。


S3C2440对外引出27根地址线ADDR0-ADDR26,访问范围只有128MB,CPU对外还引出8根片选信号nGCS0-nGCS7,对应BANK0-BANK7,当访问BANKx的地址空间时,nGCSx引脚输出低电平来选中外接设备。


这样每个128MB空间,共8个片选,对应1GB的地址空间。空间分布图如下:


BANK0-BANK7的地址范围如下:


0x00000000-0x3FFFFFFF:BANK0-BANK7


0x4000 0000-0x47FF FFFF :根据启动方式不同,作用不同。


0x4800 0000-0x5FFF FFFF:特殊功能寄存器


0x6000 0000-0xFFFF FFFF:未被使用


BANK访问地址=Bank起始地址(0X30000000)+地址线地址(ADDR[25:0])*2=0X30000000-0X33FFFFFF.

S3C2440是32位CPU,可以使用的地址范围理论达到4GB,除去上面连接外设的1GB空间外,还有一部分是CPU内部寄存器的地址,剩下的地址空间没有使用。


2440寄存器地址范围处于:0x4800 0000-5fff ffff,寄存器地址范围如下:

(4)存储控制器与外设的关系

BANK0-BANK5的连接方式类似,BANK6连接SDRAM时复杂一些,SDRAM内部是一个存储阵列,指定一个行,再指定一个列,就可以准确找到所需要的单元格,而SDRAM有4个逻辑表格(L-BANK)


那么SDRAM的访问步骤为:


1)CPU发出片选信号nSCS0(与nGCS6是同一引脚)有效,选中SDRAM芯片


2)SDRAM有4个L-BANK,需要两个地址信号来选中其中一个,即ADDR24、ADDR25,如下图

3)对被选中的芯片进行同一的行/列(存储单元)寻址


根据SDRAM芯片的列地址线数目设置CPU相关寄存器后,CPU会从32位地址中自动分出L-BANK选择信号、行地址信号、列地址信号,然后先后发出行地址信号、列地址信号。L-BANK选择信号在发出行地址信号的同时发出,并维持到列地址信号结束


如上图:行地址、列地址公用地址线ADDR2-ADDR14,使用nSRAS(R=Row)、nSCAS(C=Column)两个信号来区分它们,当nSRAS信号有效时,ADDR2-ADDR14发出的是行地址,对应地址空间bit[23:11],当nSCAS信号有效时,ADDR2-ADDR14发出的是列地址,对应地址空间bit[10:2]。


4)找到存储单元后,被选中的芯片就要进行统一的数据传输。


开发板使用两片16bit的SDRAM芯片并联形成32位的位宽,与CPU的32根数据线DATA0-DATA31相连,BANK6的起始地址位0x30000000


(5)存储控制器的寄存器使用方法


存储控制器共有13个寄存器,BANK0-BANK5只需要设置BWSCON和BANKCONx两个寄存器,BANK6、BANK7外接SDRAM时,还要设置REFRESH,BANKSIZE,MRSRB6,MRSRB7,等4个寄存器,下面分别说明


1)位宽和等待控制寄存器BWSCON


BWSCON中每四位控制一个BANK,最高4位对应BANK7、接下来4位对应BANK6,依次类推,如下图


STx:启动/禁止SDRAM的数据掩码引脚


WSx:是否使用存储器的WAIT信号


DWx:设置对应BANK的位宽,0b00对应8位,0b01对应16位,0b10对应32位,0b11表示保留


比较特殊的是BANK0,它没事ST0和WS0,DW0只读,由硬件跳线决定,0b01表示16位,0b10表示32位,BANK0只支持16、32两种位宽


所以可以确定BWSCON寄存器值为:0x22011110


2)BANK控制寄存器BANKCONx(x为0-5)


这些寄存器用来控制BANK0-BANK5外接设备的访问时序,使用默认0x0700即可


3)BANK控制寄存器BANKCONx(x为6-7)


MT[16:15]:设置BANK外接ROM/SRAM还是SDRAM,00=ROM/SRAM,01=保留,10=保留,11=SDRAM


MT=0b00时,与BANKCON0-BANKCON5类似


MT=0b11时,


Trcd[3:2]:RAS to CAS delay,设为推荐值0b01


SCAN[1:0]:SDRAM的列地址数,本开发板使用的SDRAM列地址数为9,0b00=8位,0b01=9位,0b10=10位


所以本开发板,BANKCON6/7均设为0x00018005


4)刷新控制寄存器REFRESH


REFEN[23]: 0=禁止SDRAM的刷新功能,1=开启SDRAM的刷新功能


TREFMD[22]: SDRAM的刷新模式,0=CBR/Auto Refresh,1=SelfRefresh


Trp[21:20]: SDRAM RAS预充电时间 00=2 clocks,01=3clocks,10=4clocks,11=不支持


Tsrc[19:18]: SDRAM半行周期时间 00=4clocks,01=5clocks,10=6clocks,11=7clocks,SDRAM行周期时间Trc=Tsrc+Trp


Refresh Counter[10:0]: SDRAM刷新计数,刷新时间=(2^11+1-refresh_count)/HCLK,在未使用PLL时,HCLK=晶振频率12MHz,刷新周期为7.8125us


refresh_count=2^11+1-12*7.8125=1955


REFRESH=0x008C0000+1955=0x008C07A3


5)BANKSIZE寄存器


BURST_EN[7]: 0=ARM核禁止突发传输,1=ARM核支持突发传输


SCKE_EN[5]: 0=不使用SCKE信号令SDRAM进入省电模式,1=使用SCKE信号令SDRAM进入省电模式


SCLK_EN[4]: 0=时刻发出SCLK信号,1=仅在方位SDRAM期间发出SCLK信号


BK76MAP[2:0]: 设置BANK6/7的大小,0b010=128MB/128MB,0b001=64MB/64MB,0b000=32M/32M,0b111=16M/16M,0b110=8M/8M,0b101=4M/4M,0b100=2M/2M


本开发板外接64MB的SDRAM


则本开发板BANKSIZE设为0xB1


6)SDRAM模式设置寄存器MRSRBx(x为6-7)


CL[6:4]: 0b000=1clocks,0b010=2clocks,0b011=3clocks


本开发板取0b011,所以MRSRB6/7取值为0x30


2、SDRAM相关


SDRAM有4个bank


数据 检索需要知道:Bank-列地址-行地址


外部设备属性和行地址多少位 列地址多少  多少个bank等都需要知道


只有配置好 存储管理器 ,才知道怎么去访问外部设备(SDRAM,网卡等)


SDRAM:列地址 行地址 刷新频率 bank地址位宽


把这些告诉存储器管理器,即配置存储器管理器。


SDRAM与CPU连接如下图所示:

查看芯片手册与2440手册,找到相关属性的值,准备配置给存储器控制器的相关寄存器。

位宽:16*2=32位 (2片SDRAM组成32位位宽)


bank怎么接S3C2440手册有告诉:

地址线为什么从A2开始?


2440以 字节为单位读取数据   sdram 是32位数据操作  CPU发出0 123地址返回的内容一样,具体由存储器管理器 实现到2440的分配。所以对于32位宽,从A2开始接。


2440最多接8个 类似SDRAM、网卡、nor flash的设备 因为有8个bank 即8个片选信号ngcs0-7.


配置寄存器


相关寄存器一共有13个(SWSCON, BANKCONx (x=0~7),  REFRESH, BANKSIZE, MRSRB6, MRSRB7)


想使用SDram 需要先配置存储器管理器 :


SDRAM只需配置好SWSCON, BANKCON6,, BANKCON7, REFRESH, BANKSIZE, MRSRB6, MRSRB7, 一共7个寄存器

查看2440手册 我们知道存储器控制器需要设置的寄存器主要有如下几个:

6 7比较特别  可以接SDRAM 有更多设置,列地址等

配置过程参考:http://blog.csdn.net/crazyleen/article/details/5940454:


1.BWSCON位宽和等待控制寄存器

 每4位控制一个BANK。最高4位控制bank7,递减类推。

 STx: 内存为SDRAM,此位为0,SRAM的为1

 WSx:通常设为0

 DWx:用两位来设置位宽,0b00为八位,0b01为16位,0b10为32位,0b11为保留

 

 我的开发板上是MT48LC16M16A2P型号的16位SDRAM,由2片组成32为的SDRAM,所以我设置的高4位为0b0010,。BANK6与BANK7的设置需相同,不管你用不用到BANK7,所以这里设子和为BWSCON=0x22000000

 

BANKCON6与BANKCON7

  MT[16:15]: 设置bank外接的存储器类型,0b00为SRAM,0b11为SDRAM

 设置为0b00的sram,其他位的设置与bank[1:5]的类似,设置为SDRAM的,其他未进行如下设置:

 Trcd[3:2]: RAS to CAS delay, 我使用保守值:0b10

 Scan[1:0]: SDRAM的列地址位数,0b00表示8位,0b01表示9位,0b10表示10位。查阅内存的datasheet得知,我的开发板上的是9位,所以,本开发板的bank6,bank7都设置为BANKCONx=0x00018005


刷新控制REFRESH

  R_CNT[10:0]: 由公式R_CNT=2^11 + 1 - SDRAM频率(MHz) * SDRAM刷新周期(us)

查阅内存datasheet,我的是64ms 8,192-cycle refresh,所以刷新周期=64ms/8192=7.8125us

这里我还没使用PLL,sdram频率为晶振频率12MHz,

计算R_CNT=2^11 + 1 - 12 * 7.8125 = 1955

所以我的REFRESH设置为0x008c0000(其他位的固定设置) + 1955 = 0x008c07a3


BANKZIZE

 Bk76map[2:0]: bank6,7的大小,0b001为65mb

我这里设置为0xb1

SDRAM模式设置

只需修改为CL[6:4],这是时序时间参数,我用保守值MRSRB67=0X30



结构:

3代码实现:


2440启动过程:


(1)nor


(2)nand(bank0失效,nor不可用)


实验流程:


(1)    关闭看门狗


(2)    设置存储控制器寄存器(配置)


(3)    复制代码到SDRAM中copy_steppingstone_to_sdram


(4)    设置堆栈


(5)    跳转main执行



       arm-linux-ld-Ttext 0x30000000 head.o leds.o -o sdram_elf


链接地址:运行时,程序应该位于哪里

关键字:JZ2440  存储管理器 引用地址:02-JZ2440裸机学习之存储管理器

上一篇:02-JZ2440裸机学习之MMU内存管理单元
下一篇:02-JZ2440裸机学习之GPIO实验

推荐阅读最新更新时间:2024-11-13 11:35

【STC单片学习】第六课:单片控制第一个外设-LED灯
1.6.1.单片机编程的一般步骤 1.6.1.1、目标分析。我们的目标是点亮开发板上的LED灯。 1.6.1.2、原理图分析 普中51-双核-A7开发板原理图 (1)目标器件(LED)工作原理 LED的工作是有方向性的,只有当正级接到LED阳极,负极接到LED的阴极的时候才能工作,如果反接LED是不能正常工作的。 (2)相关模块电路连接 (3)控制线路分析:相关IO端口是哪些?如何控制才能亮呢? 1.6.1.3、代码编写、编译(主要工作) 1.6.1.4、下载与调试(结果和预期不一致) 1.6.2.原理图与控制方法分析 1.6.2.1、原理图概况浏览 (1)目的1:把原理图的相关部分摘录出来重点看 原理图中
[单片机]
【STC单片<font color='red'>机</font><font color='red'>学习</font>】第六课:单片<font color='red'>机</font>控制第一个外设-LED灯
学习单片掌握这三步就可以
很多初学者最初接触单片机时较为苦恼的就是如何入门,也就是从哪一部份,按照怎样的步骤进行学习。在摸索学习步骤的过程浪费时间的同时也会造成学习兴趣的降低。为了帮助大家解决这种情况。 第一步:基础理论知识学习 基础理论知识包括模拟电路、数字电路和C语言知识。模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。 否则单片机学习之路不仅会很艰难和漫长,还可能半途而废。扎实的电子技术基础是学好单片机的关键,直接影响单片机学习入门的快慢。有些同学觉得单片机很难,越学越复杂,最后学不下去了。有的同学
[单片机]
单片学习——LED显示实验之二
题目:在八位LED显示屏,显示 HELLO :1、使 HELLO 字样闪烁 2、使字样 HELLO 从左至右滚动显示。并且循环下去。 解决方案:(C语言编程) #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char uchar hello_table ={0x89,0x86,0xc7,0xc7,0xc0,0xff}; uchar sled_bit_table ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar sled_disp_buff ={0x
[单片机]
MSP432单片学习记录(二)
前面的文章提到了ccs工程的创建,下面继续介绍msp432的使用,上一篇文章链接如下所示:MSP432单片机学习记录(Code Composer Studio) 另外一个就是芯片的资源官网查不到了,不知道啥原因,这里可以从一些其他老的网站看到一些,可以看下芯片资源,便于后面在选择芯片时候的考量。 低功耗、高性能 MSP432P401R MCU 带浮点单元和 DSP 加速功能的 48MHz 32 位 ARM Cortex M4F 功耗:95uA/MHz 工作功耗和 850nA RTC 待机操作功耗 模拟:24 通道 14 位差动 1MSPS SAR ADC,两个比较器 数字:高级加密标准 (AES256) 加速器、CRC
[单片机]
MSP432单片<font color='red'>机</font><font color='red'>学习</font>记录(二)
单片小白学习之路(八)---独立按键
目标:独立按键取反一个led灯 按键是一种电子开关,使用时轻轻按下开关按钮就可使开关接通,当松开手时,开关断开。没按是高电平,按下就变低电平 按键 按键一开始有两种状态: 初始不导通,初始导通。当按键按下本来不导通的导通,本来导通的变不导通。这4根线可以看成两组,作为两个端口 比如按键导通的连个电视,按键按下就不导通就实现关闭功能。 这是按键按下的电平变化,上面是理想的,但往往现实和理想的丰满不同,下面的图体现了现实的骨感 现实 既然现实骨感,我们就要让它变理想,变理想的方式有两种:软件消抖,硬件消抖 硬件消抖: 硬件消抖 假如按下了,B处是低电平,那么5处是低,74LS00是与非门,所以有个0就是0,6处是0取反
[单片机]
单片<font color='red'>机</font>小白<font color='red'>学习</font>之路(八)---独立按键
助于提高学习成绩的学习品牌推荐
学习机是教育市场近两年非常热门的产品。临近返校季,家长们都热衷于购买学习机来帮助孩子提高学习成绩。那么学习机什么牌子好呢?选广告做的响亮的,担心名不副实,选销量最高的,担心不适合自己孩子,很多家长陷入了纠结。其实给孩子挑选学习机,最重要的就是选择能真正带来实效,提高孩子成绩的。关于这方面我就推荐讯飞智能学习机。 讯飞智能学习机是一款人工智能技术和教学大数据有效结合的智能学习提分产品。科大讯飞集团深耕智慧教育领域 15 年,成果遍及全国 31 个省级行政区域 35000 所学校,讯飞智能学习机则基于这些实践数据打造出一套科学有效的智慧学习方法,为每个学生提供个性化的学习方案,真正做到千人千面、因材施教。 个性化精准学习是
[嵌入式]
助于提高<font color='red'>学习</font>成绩的<font color='red'>学习</font><font color='red'>机</font>品牌推荐
51单片学习笔记:定时器产生PWM可调方波,控制led灯亮度
使用定时器T0产生PWM方波, 用按键调整占空比,20级可调 控制led灯的亮度等级. C代码 #include my51.h #include timer0.h #define grading 20 //亮度20级变化 sbit keyS3=P3^5; //按键调整占空比,PWM_keyChange++ sbit keyS4=P3^6; // PWM_keyChange-- u8 PWM_keyChange=10; //初值,按键调整在1~20之间变化 //占空比 PWM_key
[单片机]
51单片<font color='red'>机</font><font color='red'>学习</font>笔记:定时器产生PWM可调方波,控制led灯亮度
PIC单片学习心得
  PIC16F616是一款14引脚、8位的CMOS单片机。采用精简指令集,仅有35条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之外,大部分的指令都是单周期指令。这样有利于提高单片机的运行速度和执行效率。   PIC16F616这款单片机供电电压可以在2V到5。5V之间,内部集成了一个RC振荡器,频率可以配置成8MHZ或者4MHZ,也可以用外部晶振提供时钟。内部集成有AD转换、比较器等硬件模块,还具有上电复位、欠压复位、看门狗、代码保护等功能。三个定时器、PWM发生器等可以由用户编程。下面我来一一介绍关于PIC单片机的这些模块和功能。  存储器   PIC16F616分为程序存储其和数据存
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved