×
单片机 > 单片机程序设计 > 详情

S3C2410处理器的扩展设计

发布时间:2020-08-27 发布时间:
|
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)
 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 ISL1208编程