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
- /* BWSCON */
- #define DW8 (0x0)
- #define DW16 (0x1)
- #define DW32 (0x2)
- #define WAIT (0x1<<2)
- #define UBLB (0x1<<3)
- #define B1_BWSCON (DW32)
- #define B2_BWSCON (DW16)
- #define B3_BWSCON (DW16 + WAIT + UBLB)
- #define B4_BWSCON (DW16)
- #define B5_BWSCON (DW16)
- #define B6_BWSCON (DW32)
- #define B7_BWSCON (DW32)
- /* BANK0CON */
- #define B0_Tacs 0x0 /* 0clk */
- #define B0_Tcos 0x0 /* 0clk */
- #define B0_Tacc 0x7 /* 14clk */
- #define B0_Tcoh 0x0 /* 0clk */
- #define B0_Tah 0x0 /* 0clk */
- #define B0_Tacp 0x0
- #define B0_PMC 0x0 /* normal */
- /* BANK1CON */
- #define B1_Tacs 0x0 /* 0clk */
- #define B1_Tcos 0x0 /* 0clk */
- #define B1_Tacc 0x7 /* 14clk */
- #define B1_Tcoh 0x0 /* 0clk */
- #define B1_Tah 0x0 /* 0clk */
- #define B1_Tacp 0x0
- #define B1_PMC 0x0
- #define B2_Tacs 0x0
- #define B2_Tcos 0x0
- #define B2_Tacc 0x7
- #define B2_Tcoh 0x0
- #define B2_Tah 0x0
- #define B2_Tacp 0x0
- #define B2_PMC 0x0
- #define B3_Tacs 0x0 /* 0clk */
- #define B3_Tcos 0x3 /* 4clk */
- #define B3_Tacc 0x7 /* 14clk */
- #define B3_Tcoh 0x1 /* 1clk */
- #define B3_Tah 0x0 /* 0clk */
- #define B3_Tacp 0x3 /* 6clk */
- #define B3_PMC 0x0 /* normal */
- #define B4_Tacs 0x0 /* 0clk */
- #define B4_Tcos 0x0 /* 0clk */
- #define B4_Tacc 0x7 /* 14clk */
- #define B4_Tcoh 0x0 /* 0clk */
- #define B4_Tah 0x0 /* 0clk */
- #define B4_Tacp 0x0
- #define B4_PMC 0x0 /* normal */
- #define B5_Tacs 0x0 /* 0clk */
- #define B5_Tcos 0x0 /* 0clk */
- #define B5_Tacc 0x7 /* 14clk */
- #define B5_Tcoh 0x0 /* 0clk */
- #define B5_Tah 0x0 /* 0clk */
- #define B5_Tacp 0x0
- #define B5_PMC 0x0 /* normal */
- #define B6_MT 0x3 /* SDRAM */
- #define B6_Trcd 0x1
- #define B6_SCAN 0x1 /* 9bit */
- #define B7_MT 0x3 /* SDRAM */
- #define B7_Trcd 0x1 /* 3clk */
- #define B7_SCAN 0x1 /* 9bit */
- /* REFRESH parameter */
- #define REFEN 0x1 /* Refresh enable */
- #define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
- #define Trp 0x0 /* 2clk */
- #define Trc 0x3 /* 7clk */
- #define Tchr 0x2 /* 3clk */
- #define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
- /**************************************/
- .globl lowlevel_init
- lowlevel_init:
- /* memory control configuration */
- /* make r0 relative the current location so that it */
- /* reads SMRDATA out of FLASH rather than memory ! */
- /* 初始化内存 */
- ldr r0, =SMRDATA /* 将SMRDATA的首地址(第一个.long)内存单元数据放置到r0寄存器中 r0=eac */
- ldr r1, =CONFIG_SYS_TEXT_BASE /* CONFIG_SYS_TEXT_BASE=0x0(include/configs/jz2440中定义)
- 代码的基地址 */
- sub r0, r0, r1 /* r0 = r0 -r1 */
- ldr r1, =BWSCON /* Bus Width Status Controller,BWSCON=0x48000000,此文件中定义 */
- add r2, r0, #* /* 将SMRDATA这一块地址赋值给r2中 */
- :
- ldr r3, [r0], # /* 将r0的值代表的内存单元放入r3中,之后r0的值偏移4位 */
- str r3, [r1], # /* 将r3的值放入r1的值代表的地址中,r1的值代表的地址偏移4位 */
- cmp r2, r0 /* 比较r2 和 r0 ,若不相等则执行下一句*/
- bne 0b /* 向后跳转到标签0处*/
- /* everything is fine now */
- mov pc, lr /* 返回 */
- .ltorg
- /* the literal pools origin */
- /*
- * 初始化存储控制器,经过此初始化之后,内存才可以使用
- */
- /* 地址为 0x00000eb0 */
- SMRDATA:
- .long 0x22011110 //BWSCON
- .long 0x00000700 //BANKCON0
- .long 0x00000700 //BANKCON1
- .long 0x00000700 //BANKCON2
- .long 0x00000700 //BANKCON3
- .long 0x00000740 //BANKCON4
- .long 0x00000700 //BANKCON5
- .long 0x00018005 //BANKCON6
- .long 0x00018005 //BANKCON7
- .long 0x008C04F4 //REFRESH
- .long 0x000000B1 //BANKSIZE
- .long 0x00000030 //MRSRB6
- .long 0x00000030 //MRSRB7
u-boot移植(七)---代码修改---存储控制器的更多相关文章
- u-boot移植(八)---代码修改---存储控制器--MMU
一.MMU介绍 1.1 虚拟地址与物理地址 建立两个应用程序,hello1.c和hello2.c,然后运行: hello1.c hello2.c 运行结果如下: 可以看到两个结果打印的地址是一样的,都 ...
- -boot移植(十一)---代码修改---支持nandflash
一.移植前的修改 1.1 include/configs/jz2440修改 原来的定义: 可以看出,要先定义CONFIG_CMD_NAND才能使能NANDFlash. 这个在我们文件中的82行有定义, ...
- u-boot移植(五)---代码修改---时钟修改、SDRAM
最开始已经建立了新单板以及配置文件,现在就需要做的是代码的修改,配置成适合目标板使用的u-boot. 一.时钟修改 在代码流程分析中,我们知道,系统的启动是: 设置 CPU 为管理员模式 关闭看门狗 ...
- u-boot移植(十二)---代码修改---支持DM9000网卡
一.准备工作 1.1 原理图 CONFIG_DM9000_BASE 片选信号是接在nGCS4引脚,若要确定网卡的基地址,则要根据片选信号的接口去确定. 在三星2440的DATASHEET中memory ...
- s3c2440存储控制器和地址以及启动的理解
转自:http://blog.sina.com.cn/s/blog_5ddb672b0100fkcf.html 1.首先应该先了解Flash ROM的种类 NOR FLASH地址线和数据线分开,来了地 ...
- ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)
继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND.DM9000等.但还需要完善比如环境变量.mtdpart分区.裁剪.制作补丁等.下面的工作就是完善移植的u-b ...
- JZ2440 裸机驱动 第6章 存储控制器
本章目标: 了解S3C2410/S3C2440地址空间的布局 掌握如何通过总线形式访问扩展的外设,比如内存.NOR Flash.网卡等 ························ ...
- Spring Boot (七): Mybatis极简配置
Spring Boot (七): Mybatis极简配置 1. 前言 ORM 框架的目的是简化编程中的数据库操作,经过这么多年的发展,基本上活到现在的就剩下两家了,一个是宣称可以不用写 SQL 的 H ...
- spring boot / cloud (七) 使用@Retryable来进行重处理
spring boot / cloud (七) 使用@Retryable来进行重处理 前言 什么时候需要重处理? 在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败,调用远程服务失败,争抢锁 ...
随机推荐
- awk、sed、grep三大shell文本处理工具之grep的应用
1.基本格式grep pattern [file...](1)grep 搜索字符串 [filename](2)grep 正则表达式 [filename]在文件中搜索所有 pattern 出现的位置, ...
- .gitignore & .DS_Store
.gitignore & .DS_Store https://stackoverflow.com/questions/107701/how-can-i-remove-ds-store-file ...
- windows下 navicat_premium破解方法
https://blog.csdn.net/qq_21205435/article/details/78902052
- codeforces631B
Print Check CodeForces - 631B Kris works in a large company "Blake Technologies". As a bes ...
- BZOJ2120&2453数颜色——线段树套平衡树(treap)+set/带修改莫队
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- Dapper 连表查询
实体类: UserInfo: public partial class UserInfo { public UserInfo() { this.Persion = new HashSet<Per ...
- MT【230】一道代数不等式
设$a,b,c>0,$满足$a+b+c\le abc$证明:$\dfrac{1}{\sqrt{1+a^2}}+\dfrac{1}{\sqrt{1+b^2}}+\dfrac{1}{\sqrt{1+ ...
- 01 自学Aruba之功率单位和相对单位
点击返回:自学Aruba之路 01 自学Aruba之功率单位和相对单位 功率单位是用来测量传输振幅和接受振幅的大小,功率单位测量的是绝对功率 相对单位是用来计算增加电缆或天线后的损耗和增益的大小,相对 ...
- 【BZOJ3512】DZY Loves Math IV(杜教筛)
[BZOJ3512]DZY Loves Math IV(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\] 其中\(n\le 10^5,m\l ...
- [luogu2144][bzoj1002][FJOI2007]轮状病毒【高精度+斐波那契数列+基尔霍夫矩阵】
题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...