河北企业网站制作,苏州最好的网站建设,做网站需要技术,基于jsp的网站开发的文献title: 2440内存管理 tags: ARM date: 2018-10-17 19:08:49 --- 2440内存管理 特性 大/小端#xff08;通过软件选择#xff09;地址空间#xff1a;每个 Bank 有 128M 字节(总共 1G/8 个 Bank)除了 BANK0#xff08;16/32 位#xff09;之外【引导ROM#xff0c;其总线宽…title: 2440内存管理 tags: ARM date: 2018-10-17 19:08:49 --- 2440内存管理 特性 大/小端通过软件选择地址空间每个 Bank 有 128M 字节(总共 1G/8 个 Bank)除了 BANK016/32 位之外【引导ROM其总线宽度由硬件接线决定在第一个 ROM 访问前决定 BANK0 的总线宽度】其它全部 BANK 都可编程访问宽度8/16/32 位所有存储器 Bank 的访问周期可编程外部等待扩展总线周期支持 SDRAM 自刷新和掉电模式总共 8 个存储器 Bank 6 个存储器 Bank 为 ROMSRAM 等其余 2 个存储器 Bank 为 ROMSRAMSDRAM 等7 个固定的存储器 Bank 起始地址1 个可变的存储器 Bank 起始地址并 Bank 大小可编程 bank7,为了与bank6组成双通道,所以其起始地址是bank6地址的尾地址bank6bank7大小内存地址分配 工作方式 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,00000b0000,01000b0000,10000b0000,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.内存接口的时序 NorFLASH 开发板使用的NORFLASH是MX29LV160DBTI2M大小接在nGCS0所以基址是0. 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] 位宽设置 为什么上电就能使用NOR 这里的Tacc默认值是111最大值为14个时钟这也是为什么我们不用设置NORFLASH就能开机使用.上电的时候是使用晶振12M也就是tacc14*Hclk1/12M*141166ns70ns 设置寄存器 BWSCON中Bank0不需要设置将HCLK设置为100MHzT1000/10010nsTacc需要大于等于70ns因此设置Tacc等于1018个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 突发长度 寻址 [(允许同时)CS片选L-bank选择行有效]列有效 数据读 有个参数 CAS LatencyCAS 潜伏期又被称为读取潜伏期RLRead Latency这个在初始化时设定 数据写 注意参数 twr 回写时间 突发模式 连续读取只需要发送起始列地址BL在协商的时候规定了 板载SDRAM JZ2440连接的是EM63A165TS-6G,其规格是16M x 16 bit32M,两通道也就是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 地址计算 行A0~A12,列A0~A8,16位位宽,一个单元两个字节,4个Bank,所以1个bank2^13*2^9*2/1024/10248M,4个Bank32M.32位寻址,所以要忽略CPU2440的低两位地址线[0,1]bank线如何确认?总共是双通道,32位位宽,所以实际上选中一个bank其实是选中了两个物理的Bank16M2^24,所以地址线在[24,25],或者也可以这么理解 寻址64M4个片选也就是64/416M,16M2^(204),所以0-2^2316M,其再高1位就是24线了BANK6的起始地址为0x30000000所以SDRAM的访问地址为0x30000000低0x33FFFFFF共64MB 程序设计 时序参数 板子只用到了Bank6的片选BANK0--BANK5只需要设置BWSCON和BANKCONx(x为05两个寄存器BANK6、BANK7外接SDRAM时除BWSCON和BANKCONxx为6、7外还要设置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4个寄存器。 void sdram_init(void)
{BWSCON 0x22000000; //选择sdram32位宽BANKCON6 0x17001; //时间参数BANKCON7 0x17001;REFRESH 0x8404f5; //刷新周期BANKSIZE 0xb1; //size64MMRSRB6 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;
} 转载于:https://www.cnblogs.com/zongzi10010/p/10023594.html