嵌入式linux第六章

2019-07-12 17:52发布

嵌入式linux第六章

嵌入式linux第六章 嵌入式linux第六章 寄存器地址范围0x48000000~0x5FFFFFFF 嵌入式linux第六章 嵌入式linux第六章 BANK 6(0X30000000)连接sdram时,cup提供了一组用于sdram的信号: sdram时钟有效信号scke; sdram时钟信号sclk0/sclk1 数据掩码信号dmq0/1/2/3 sdram片选信号nscs0(与ngcs6是同一引脚的两个功能) sdram行地址选通脉冲信号nsras sdram列地址选通脉冲信号nscas 写允许信号nwe(不专用于sdram) 嵌入式linux第六章 2^13*2^9=4MB  一个内存单元2字节B,4个l-bank 两块sdram芯片 所以tq2440 sdram=4MB*2B*4*2=64MB
所以对sdram的访问可以分为如下: 1.cpu片选信号nscs0有效,选中sdram芯片 2.sdram确定l-bank,tq2440通过laddar24、26来确定l-bank;在通过nsras读行地址和nscas读列地址,tq2440用两块32mb,16位的sdram来和cpu32为数据线连接。


存储控制器的寄存器使用方法 存储寄存器共13个,bank0~bank5只需设置BWSCON和bankconx(x=0~5) BANK6~BANK7外接sdram时,除BWSCON和BANKCONx还要设置REFRESH/BANKSIZE/MRSRB6/MRSRB7寄存器
BUS WIDTH&WAIT CONTROL REGISTER   BWSCON STx:启动/禁止SDRAM的数据掩码引脚。对于sdram 此位为0;对于sram此位为1 WSx:是否使用存储器的WAIT信号,通常设为0 DWx:使用两位来设置相应BANK的位宽,00对应8位,01对应16为,10对应32位,11表示保留 BANK0没有st0和ws0,DW0([2:1])只读————由硬件跳线决定:01表示16位,10表示32位,bank0只支持16、32两种位宽
嵌入式linux第六章 嵌入式linux第六章 BANKCONx(0~5) 0~5一般设置为0x0700;用于设置访问外设时序!需要再看


BANKCON6~BANKCON7 嵌入式linux第六章 MT[16:15]:  00=ROM OR SRAM  ;[14:0]设置同bankcon0~5  10、01=RESERVED   11=SDRAM;[3:2] RAS TO CAS DELAY : 00=2CLOCK  01=3  10=4    USE 01                     [1:0] column address  00=8bit 01=9-bit 10=10-bit


REFRESH CONTROL REGISTER  嵌入式linux第六章  REFEN [23]:=0 不能 =1能自动刷新 TREFMD[22] :=0 CBR/AUTO Refresh 1=Self Refresh TRP[21:20]  :semi row cycle time resest =11 refresh counter=[10:0]: sdram  64ms refresh 8k cycle-》64ms/8192=7.8125us   refresh_count=7.8125*12MHZ(CPU 频率)= refresh period=(2^11+1-12*7.8125)=1955=0x7a3 so refresh=0x008c0000+1955

BANKSIZE REGISTER (TQ2400 set 0Xb1) 嵌入式linux第六章
MRSR(SDRAM MODE REGISTER SET REGISTER) TQ2440 SET 0X30 嵌入式linux第六章

6.2 USE SDRAM s3c2440A unit 6 nand flash contorller 设置成NAND 启动时,s3c2440会把nand的前4kb内容复制到自身内部的steppingstone(大小4kb的sram),然后跳到0地址执行;主要执行将nand的内容复制到sdram执行!!!!(初步理解)2012年9月5日 23:05:11
head.s: @****************
@file:head.s
@set sdram copy programm to sdram and run it
@8******

.equ   MEM_CTL_BASE  ,0x48000000
.equ   SDRAM_BASE,0x30000000


.text
.global _start
_start:
     bl disable_watch_dog     @shut down watchdog
     bl memset          @set memconf
     bl copy_steppingstone_to_sdram     @copy
     ldr pc,=on_sdram

on_sdram:
     ldr sp,=0x34000000     @set stack  in the sdram 
     bl main           @ go to main    


copy_steppingstone_to_sdram:
     @4kb copy to sdram

     mov r1,#0     @stepping start addr
     ldr r2,=SDRAM_BASE     @sdram 0x30000000
     mov r3,#4*1024     @4kb
ls:
     ldr r4,[r1],#4     @read from step
     str r4,[r2],#4  @r4 4b
     cmp r1,r3
     bne ls          @loop untill copy finish
     mov pc,lr      @return



memset:
@set memcon so that to use sdram

     mov r1,#MEM_CTL_BASE
     adrl r2,mem_cfg_val     @ reset value addr
     add r3,r1,#52        @ 13*4=52
l:
     ldr r4,[r2],#4          @read reset value
     str r4,[r1],#4          @set memcon reset value
     cmp r1, r3          @set 13 mencon
     bne l               @loop
     mov pc,  lr           @return

    
disable_watch_dog:
@watchdogcon=0
     mov r1,#0x53000000
     mov r2,#0x00
     str r2,[r1]
     mov pc,lr  @return

.align 4
mem_cfg_val:
     .long 0x22011110