1.S3C2410处理器扩展内存32MB的SDRAM1.需求分析S3C2410是32位处理器(指令一次能够操作32位数据(运算器一次可以处理32位数据);通用寄…
1. S3C2410处理器扩展内存32MB的SDRAM
1.需求剖析
S3C2410是32位处理器(指令一次能够操作32位数据(运算器一次能够处理32位数据);通用寄存器多是32位寄存器;处理器内部数据通道也是32位的;处理器外部数据
总线宽度通常是32位的,地址总线宽度只是代表CPU寻址规模巨细,与CPU是多少位的无关,也即32位CPU的地址总线纷歧定是32根的,例如关于s3c2410,每一个Bank对应27根地址线,寻址才能为128MB,悉数8个Bank总的寻址才能为1GB),所以为了最大极限的发挥其功能,内存最好也是32位(指数据宽度)的,(当然,在s3c2410的8个bank中,除了Bank0只能挑选16/32数据位宽外,其他的7个Bank均能够独自挑选8/16/32位宽的存储体系)但是市面上很少有32位宽度的单片SDRAM,所以一般都采纳两片16位的SDRAM进行位扩展得到32位的SDRAM
2.规划电路图
2410与K4S561632D相连
本体系扩展后的内存体系为16M×32Bit的(此处32Bit是指数据位宽度,而非地址位,能够了解SDRAM数据位宽度与地址线的条数无关,了解数据线和地址线的差异,关于下面地址线的衔接方法的了解非常重要
3.初始化程序代码
子函数阐明:初始化内存操控器
memsetup:
mov r1,#MEM_CTL_BASE
adrl r2,mem_cfg_val
add r3,r1,#52
1:
ldr r4,[r2],#4
@将地址为R2的内存单元数据读取到R4中,然后r2=r2
+4
str r4,[r1],#4
@将r4的数据写入到r1的内存单元,然后r1=r1+4
cmp r1,r3
@比较R1,R3是否设置完一切的13个寄存器。
bne 1b
@假如没有仿制完,就持续
mov pc,lr
@仿制完后回来,b指令则不可。差异bl。
@*****************************************************************
子函数阐明:仿制代码到SDRAM,将SRAM中的4K数据悉数仿制到SDRAM,
@ SRAM开端地址为0x00000000,SDRAM的开端地址为0x30000000
@*****************************************************************
copy_steppingstone_to_sdram:
mov r1,#0 @设置R1为SRAM的开端地址为0x00000000
ldr r2,=SDRAM_BASE @设置R2为SDRAM的开端地址为0设置R1为0X300 00000
mov r3 ,#4*1024 @设置R3为4K
1:
ldr r4,[r1],#4 @从SRAM中读取4字节的数据到R4中,然后r1=r 1+4
str r4,[r2],#4 @将r4中的4字节数据仿制到SDRAM中,然后r2= r2+4
cmp r1,r3 @判别是否完结:SRAM的地址是否等于末地址> 。
bne 1b @若没有完结,持续仿制
mov pc,lr @回来
.align 4
@******************************************************
@存储操控器13个寄存器的设置值
@******************************************************
mem_cfg_val:
.long 0x22011110 @BWSCON :
.long 0x00000700 @BANKCON0
.long 0x00000700 @BANKCON1
.long 0x00000700 @BANKCON2
.long 0x00000700 @BANKCON3
.long 0x00000700 @BANKCON4
.long 0x00000700 @BANKCON5
.long 0x00018005 @BANKCON6
.long 0x00018005 @BANKCON7
.long 0x008e07a3 @REFRESH
.long 0x000000b1 @BANKSIZE
.long 0x00000030 @MRSRB6
.long 0x00000030 @MRSRB7
2.扩展为64MB的NAND Flash用作发动ROM和大容量存储
1.需求剖析
NandFlash接口信号较少
* 数据宽度只要8Bit,没有地址总线。地址和数据总线复用,串行读取
NandFlash地址结构
* NandFlash设备的存储容量是以页(Page)和块(Block)为单位的。
* Page=528Byte (512Byte用于寄存数据,其他16Byte用于寄存其他信息,如块好坏的符号、块的逻辑地址、页内数据的ECC校验和等)。
* Block=32Page
* 容量为64MB的NandFlash存储结构为:512Byte×32Page×4096Block
* NandFlash以页为单位进行读和编程(写)操作,一页为512Byte;以块为单位进行擦除操作,一块为512Byte*32page=16KB
* 关于64MB的NAND设备,需求26根地址线,因为NAND设备数据总线宽度是8位的,因而有必要通过4个时钟周期才能把悉数地址信息接纳下来
* 能够这么说,第一个时钟周期给出的是方针地址在一个page内的偏移量,然后三个时钟周期给出的是页地址。
* 因为一个页内有512Byte,需求9bit的地址寻址,而第一个时钟周期只给出了低8bit,最高位A8由不同的读指令(Read Mode2)来区别的。
NandFlash的指令
2.电路图规划
扩展芯片:HY57561620
3.NAND
FLASH装备寄存器初始化
MemCfgInit(); //设置NAND FLASH的装备寄存器
该函数原型:
void MemCfgInit(void)
{
//rCLKCON |= 0xffff0;
//enable nand flash control, initilize ecc, chip disable,
rNFCONF = (1<<15)|(1<<12)|(1<<11)|(7<<8)|(7<<4)|(7);
}
使能nand flash操控,初始化,芯片禁能
1<<15,NFCONF寄存器是NAND FLASH的装备寄存器
第15方位1,是使能nand flash操控寄存器
此位在芯片开端作业,主动导入的时分将被主动清零,
假如想拜访nand flash存储,该位有必要置一。
14,13位为保存位
1<<12,第12方位1,初始化ECC,S3C2410只是支撑512个字节的ECC校验,
所以每512个字节,需求设置一次ECC初始化。
ECC是Error Checking and Correcting,过错查看与校验
1<<11,第11方位1,NAND flash nFCE 设置为不活动,即nand flash存储芯片禁能
7<<8,即10,9,8位设置为111,
这3位是CLE ALE信号的持续时间值设置,持续时间=HCLK*(TACLS + 1)
TACLS即111(b)=7;
7位为保存位
7<<4,即6,5,4位设置为111,为TWRPH0 周期设置值,duration=HCLK*
(TWRPH0+1)
3位为保存位
7 位第2,1,0,设置为111,为TWRPH1周期设置值,duration=HCLK*(TWRPH0+1)
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/262712.html