u-boot移植(七)---代码修改---存储控制器

一、CPU访问芯片的条件

  

  CPU通过访问存储控制器,来读取外部设备的数据。

  CPU想访问一个芯片,需要如下条件(配置信息):

    • 地址线
    • 数据线:8位/16位/32位数据宽度
    • 时钟/频率 
    • 其他芯片相关的特性:比如SDRAM,有行地址、列地址和bank

  SDRAM的访问和表格检索的原理一样,先指定一个行(Row),再指定一个列(Columu),就可以准确找到所需要的单元格。这个单元格称为存储单元,这个表格(存储阵列)就是逻辑Bank(Logical Bank,即L-Bank),SDRAM一般含有4个L-bank。  

  

  只有配置好了存储管理器,才知道如何去访问外部的设备。

二、存储控制器访问SDRAM

  2.1 原理图

  

  CPU侧:

      

  

  

  

  

  可以看看这些引脚的功能,查看SDRAM的芯片手册。

  LADDR:地址接口

  

  LnWBE[0:3]:bank的操作方式

  

  LDATA:数据接口

  

  LnWE

  

  更多的看数据手册。

三、存储管理器的配置  

  • 位宽
  • 行列地址
  • 刷新周期

  详细寄存器可以查看DATASHEET。

四、2440启动方式

4.1 NAND FALSH启动

  

4.2 NOR FLASH

  

五、代码

  内存控制器初始化代码:

  这里我们是从nor flash启动,因此CONFIG_SYS_TEXT_BASE定义的参数为0x0。

  lowlevel_init.S (board\samsung\jz2440)

  1 #define BWSCON    0x48000000
  2
  3 /* BWSCON */
  4 #define DW8            (0x0)
  5 #define DW16            (0x1)
  6 #define DW32            (0x2)
  7 #define WAIT            (0x1<<2)
  8 #define UBLB            (0x1<<3)
  9
 10 #define B1_BWSCON        (DW32)
 11 #define B2_BWSCON        (DW16)
 12 #define B3_BWSCON        (DW16 + WAIT + UBLB)
 13 #define B4_BWSCON        (DW16)
 14 #define B5_BWSCON        (DW16)
 15 #define B6_BWSCON        (DW32)
 16 #define B7_BWSCON        (DW32)
 17
 18 /* BANK0CON */
 19 #define B0_Tacs            0x0    /*  0clk */
 20 #define B0_Tcos            0x0    /*  0clk */
 21 #define B0_Tacc            0x7    /* 14clk */
 22 #define B0_Tcoh            0x0    /*  0clk */
 23 #define B0_Tah            0x0    /*  0clk */
 24 #define B0_Tacp            0x0
 25 #define B0_PMC            0x0    /* normal */
 26
 27 /* BANK1CON */
 28 #define B1_Tacs            0x0    /*  0clk */
 29 #define B1_Tcos            0x0    /*  0clk */
 30 #define B1_Tacc            0x7    /* 14clk */
 31 #define B1_Tcoh            0x0    /*  0clk */
 32 #define B1_Tah            0x0    /*  0clk */
 33 #define B1_Tacp            0x0
 34 #define B1_PMC            0x0
 35
 36 #define B2_Tacs            0x0
 37 #define B2_Tcos            0x0
 38 #define B2_Tacc            0x7
 39 #define B2_Tcoh            0x0
 40 #define B2_Tah            0x0
 41 #define B2_Tacp            0x0
 42 #define B2_PMC            0x0
 43
 44 #define B3_Tacs            0x0    /*  0clk */
 45 #define B3_Tcos            0x3    /*  4clk */
 46 #define B3_Tacc            0x7    /* 14clk */
 47 #define B3_Tcoh            0x1    /*  1clk */
 48 #define B3_Tah            0x0    /*  0clk */
 49 #define B3_Tacp            0x3     /*  6clk */
 50 #define B3_PMC            0x0    /* normal */
 51
 52 #define B4_Tacs            0x0    /*  0clk */
 53 #define B4_Tcos            0x0    /*  0clk */
 54 #define B4_Tacc            0x7    /* 14clk */
 55 #define B4_Tcoh            0x0    /*  0clk */
 56 #define B4_Tah            0x0    /*  0clk */
 57 #define B4_Tacp            0x0
 58 #define B4_PMC            0x0    /* normal */
 59
 60 #define B5_Tacs            0x0    /*  0clk */
 61 #define B5_Tcos            0x0    /*  0clk */
 62 #define B5_Tacc            0x7    /* 14clk */
 63 #define B5_Tcoh            0x0    /*  0clk */
 64 #define B5_Tah            0x0    /*  0clk */
 65 #define B5_Tacp            0x0
 66 #define B5_PMC            0x0    /* normal */
 67
 68 #define B6_MT            0x3    /* SDRAM */
 69 #define B6_Trcd            0x1
 70 #define B6_SCAN            0x1    /* 9bit */
 71
 72 #define B7_MT            0x3    /* SDRAM */
 73 #define B7_Trcd            0x1    /* 3clk */
 74 #define B7_SCAN            0x1    /* 9bit */
 75
 76 /* REFRESH parameter */
 77 #define REFEN            0x1    /* Refresh enable */
 78 #define TREFMD            0x0    /* CBR(CAS before RAS)/Auto refresh */
 79 #define Trp            0x0    /* 2clk */
 80 #define Trc            0x3    /* 7clk */
 81 #define Tchr            0x2    /* 3clk */
 82 #define REFCNT            1113    /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
 83 /**************************************/
 84
 85 .globl lowlevel_init
 86 lowlevel_init:
 87     /* memory control configuration */
 88     /* make r0 relative the current location so that it */
 89     /* reads SMRDATA out of FLASH rather than memory ! */
 90     /* 初始化内存 */
 91     ldr     r0, =SMRDATA            /* 将SMRDATA的首地址(第一个.long)内存单元数据放置到r0寄存器中 r0=eac */
 92     ldr    r1, =CONFIG_SYS_TEXT_BASE    /* CONFIG_SYS_TEXT_BASE=0x0(include/configs/jz2440中定义)
 93                                        代码的基地址 */
 94     sub    r0, r0, r1                    /* r0 = r0 -r1 */
 95     ldr    r1, =BWSCON    /* Bus Width Status Controller,BWSCON=0x48000000,此文件中定义 */
 96     add     r2, r0, #13*4            /* 将SMRDATA这一块地址赋值给r2中 */
 97 0:
 98     ldr     r3, [r0], #4            /* 将r0的值代表的内存单元放入r3中,之后r0的值偏移4位 */
 99     str     r3, [r1], #4            /* 将r3的值放入r1的值代表的地址中,r1的值代表的地址偏移4位 */
100     cmp     r2, r0                    /* 比较r2 和 r0 ,若不相等则执行下一句*/
101     bne     0b                        /* 向后跳转到标签0处*/
102
103     /* everything is fine now */
104     mov    pc, lr                        /* 返回 */
105
106     .ltorg
107 /* the literal pools origin */
108
109 /*
110  * 初始化存储控制器,经过此初始化之后,内存才可以使用
111  */
112  /* 地址为 0x00000eb0 */
113 SMRDATA:
114         .long 0x22011110     //BWSCON
115         .long 0x00000700     //BANKCON0
116         .long 0x00000700     //BANKCON1
117         .long 0x00000700     //BANKCON2
118         .long 0x00000700     //BANKCON3
119         .long 0x00000740     //BANKCON4
120         .long 0x00000700     //BANKCON5
121         .long 0x00018005     //BANKCON6
122         .long 0x00018005     //BANKCON7
123         .long 0x008C04F4     //REFRESH
124         .long 0x000000B1     //BANKSIZE
125         .long 0x00000030     //MRSRB6
126         .long 0x00000030     //MRSRB7
时间: 06-09

u-boot移植(七)---代码修改---存储控制器的相关文章

u-boot移植(四)---代码修改---时钟修改、SDRAM

最开始已经建立了新单板以及配置文件,现在就需要做的是代码的修改,配置成适合目标板使用的u-boot. 一.时钟修改 在代码流程分析中,我们知道,系统的启动是: 设置 CPU 为管理员模式 关闭看门狗 屏蔽中断 设置启动参数:时钟 FCLK:HCLK:PCLK = 1:2:4     FCLK=120MHZ flush v4 I/D caches disable MMU stuff and caches DRAM设置 在DRAM设置中,有如下定义说明: 在这段初始化步骤中,并没有看见系统时钟的设置

u-boot移植(十二)---代码修改---支持DM9000网卡

一.准备工作 1.1 原理图 CONFIG_DM9000_BASE 片选信号是接在nGCS4引脚,若要确定网卡的基地址,则要根据片选信号的接口去确定. 在三星2440的DATASHEET中memory control这一章的Figure 5-1. S3C2440A Memory Map after Reset 已经说明了片选4的地址,如下: 只要发出的信号在 0x20000000--0x28000000 之间,就会使得片选4引脚变为低电平.所以可以确定我们网卡的基地址为0x20000000. C

js代码从页面移植到文件中失效或js代码修改后不起作用的解决办法

最近在做关于网站的项目,总是发生这样的问题 写的javascript代码在页面上没有问题,但是将js代码移植到.js的文件中,在页面上进行调用,总是出现失效等错误 另外修改后的js代码,重新刷新网页仍然不起作用 经过大量搜索并经过验证,可以用下面方法来解决 将js代码封装到js文件中失效的原因可能是js文件中存在中文注释,导致在执行的时候中断,在js文件尽量不要写中文注释 修改后的js代码刷新网页后不起效果可能是因为你所用的浏览器使用缓存的问题,可在浏览器中设置取消使用缓存,并删除临时文件,重启

s3c2440存储控制器和地址以及启动的理解

1.首先应该先了解Flash ROM的种类 NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来. NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据.通俗的说,只给地址不行,要先命令,再给地址,才能读到NAND的数据,在一个总线完成的. 结论是:ARM无法从NAND直接启动.除非装载完程序,才能使用NAND Flash. Nand Flash的命令.地址.数据都通过I/O口发送,管脚复用,这样做做的好处是,可以明显减少NAND FLASH的管脚数目,将来如果

Spring Boot (七): Mybatis极简配置

Spring Boot (七): Mybatis极简配置 1. 前言 ORM 框架的目的是简化编程中的数据库操作,经过这么多年的发展,基本上活到现在的就剩下两家了,一个是宣称可以不用写 SQL 的 Hibernate ,一个是对 SQL 非常友好的 Mybaties ,,两者各有特点,在企业级系统开发中可以根据需求灵活使用.发现一个有趣的现象:传统企业大都喜欢使用 Hibernate ,互联网行业通常使用 Mybatis . Hibernate 特点就是所有的 SQL 都用 Java 代码来生成

七牛的存储算法猜测

个人浏览网页的时候,有打标签的习惯.最近整理以往的标签的时候,发现积累了一些有关七牛公司存储策略的网页,遂决定整理一篇文章处理,以备记忆.当然,也希望对他人有用. 因为七牛公司的存储策略主要基于纠删码(Erasure Codes,EC),所以下面先从纠删码引申开来. 引言:何为纠删码 数据的爆炸式增长使得存储系统的规模不断增加,存储设备的可靠性却一直没有得到显著提高(SSD 从SLC 到MLC 和TLC 可靠性不断下降,磁盘随着单位面积写入数据更多导致可靠性无法提升),从而给数据的持久化存储带来

iOS 7:用代码解决视图控制器的View整体上移问题

如果你准备将你的老的 iOS 6 app 迁移到 iOS 7 上,那么你必须注意了.当你的老的 app 在 iOS 7 设备上运行时,所有ViewController 的视图都整体上移了,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度.于是你的视图上移了,并和上层的状态栏交叠在一起. 你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状态栏+导航栏高度). 但是苹果显然已经考虑到这个问题,他们在 iOS 7 SD

TQ2440存储控制器实验

一,实验原理: 首先使用汇编语言设置好存储控制器,使得外接的SDRAM可用,然后把程序本身从片内RAM(Steppingstone)拷贝到SDRAM处,最后跳到SDRAM中执行. 二,实验目的: 1.掌握SDRAM的初始化方法 2.掌握位置无关指令,相对跳转,绝对跳转 3.掌握代码重定位 三,实验内容: 1.准备知识: 1.1 访问SDRAM的方法: SDRAM的内部是一个存储阵列,阵列就好比一个excel表格,将数据填进表格的单元格中,excel中的每个单元格会有"行"和"

Mini2440存储控制器

以前杂事比较多,没有仔细学习,这学期尽可能利用空闲时间好好学习理解. @************************************************************************* @ 设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行 @ 2015.11.8 by Huangtao @************************************************************************* @ 总结的