u-boot2010.06的移植(2)—— 时钟、SDRAM、UART
来源:互联网 发布:92kaifa源码 编辑:程序博客网 时间:2024/06/10 07:13
一、设置时钟:
本板子是外接的12MHz晶振。通PLL(设置MPLLCON寄存器的)倍频到200MHz,并设置时钟分频比(CLKDIVN寄存器)为
FCLK:HCLK:PCLK = 1:2:4 。s3c2440手册clock中有这么一个note:If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode using following instructions(S3C2440 does not support synchronous bus mode).
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
If HDIVN is not 0 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK.
#R1_nF:OR:R1_iA之类的是什么东东。对协处理器不懂,网上搜了下,也转载了一篇文章,在这copy过来主要注释,
mrc p15,0,r0,c1,c0,0是用于读取控制寄存器C1到R0中。orr r0,r0,#R1_nF:OR:R1_iA的意义就是先判断R1_nF是否为1,如为1,则对C1的nF位做或运算,也即把CPU的时钟模式设置为Synchronous模式;如为0,则对C1的iA位做或运算,也即把CPU的时钟模式设置为FastBus模式,接着通过mcr p15,0,r0,c1,c0,0语句把运算后的结果写回C1控制寄存器。最终个得到#R1_nF:OR:R1_iA 就是 #0xc0000000的意思。暂时先不对这个了解了,先顾全大局了,若有高手,还请不吝赐教。
二、SDRAM的几个难点:
1. 看s3c2440手册第五章内存控制器时,那个列表不是很清楚,经过查阅资料和分析如下解释,记下笔记便于以后查阅。
SDRAM 一般分为4个逻辑bank(L-Bank)。
以 H57V2562GTR 为例, 其容量为 256Mbit (16Mbit * 16bit 即 4Mb * 4Bank * 16I/O) 使用 两片16位H57V2562GTR ,并联成32位
行地址数位13,列地址数位9. datasheet中并没有明确给定有多少行,关于L-Bank 行数的确定,看下面第二点的介绍。
Bank Size:外接内存容量大小(H57V2562GTR 是 4Mbit*16bit*4Bank*2Chips/8=64MB)注意,Bank Size 中的Bank 和前面说的4Bank 中的 Bank 不是一回事。
Bus Width: 总线宽度:32bit (应该是两片16位H57V2562GTR 并联后的32位)
Base Component:单个芯片容量(bit)(256Mb)
Memory Configration:内存配置 ((4M * 16b * 4Banks)* 2Chips )
Bank Address:4 个 bank 的选择位
2.关于SDRAM的刷新周期
SDRAM要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs。
三、串口
编译,烧写,启动板子,出现乱码,可能是串口的寄存器(波特率与时钟方面)设置的不对,查找其波特率的设置,在get_PLLCLK()函数处发现错误(get_HCLK()函数设置也不对,需要对照改下),最后一行改成 return (2 * CONFIG_SYS_CLK_FREQ * m) / (p * 2 << s));重新烧写,仍旧出现乱码,找了半天,看了别人的文档才发现上面那没改对,犯了两个超2b的错误:首先手册是这样写的 "Mpll = (2 * m * Fin) / (p * 2^s)".第一个错误就是优先级弄错了,"*"的优先级大于"<<";第二个就是对左移运算掌握的不熟了,左移n位就相当于"*2^n" 而"2 << s"就是"2*2^s",自然就不对了,修改正确后,编译、烧写,OK。
本板子是外接的12MHz晶振。通PLL(设置MPLLCON寄存器的)倍频到200MHz,并设置时钟分频比(CLKDIVN寄存器)为
FCLK:HCLK:PCLK = 1:2:4 。s3c2440手册clock中有这么一个note:If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode using following instructions(S3C2440 does not support synchronous bus mode).
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
If HDIVN is not 0 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK.
#R1_nF:OR:R1_iA之类的是什么东东。对协处理器不懂,网上搜了下,也转载了一篇文章,在这copy过来主要注释,
mrc p15,0,r0,c1,c0,0是用于读取控制寄存器C1到R0中。orr r0,r0,#R1_nF:OR:R1_iA的意义就是先判断R1_nF是否为1,如为1,则对C1的nF位做或运算,也即把CPU的时钟模式设置为Synchronous模式;如为0,则对C1的iA位做或运算,也即把CPU的时钟模式设置为FastBus模式,接着通过mcr p15,0,r0,c1,c0,0语句把运算后的结果写回C1控制寄存器。最终个得到#R1_nF:OR:R1_iA 就是 #0xc0000000的意思。暂时先不对这个了解了,先顾全大局了,若有高手,还请不吝赐教。
二、SDRAM的几个难点:
1. 看s3c2440手册第五章内存控制器时,那个列表不是很清楚,经过查阅资料和分析如下解释,记下笔记便于以后查阅。
SDRAM 一般分为4个逻辑bank(L-Bank)。
以 H57V2562GTR 为例, 其容量为 256Mbit (16Mbit * 16bit 即 4Mb * 4Bank * 16I/O) 使用 两片16位H57V2562GTR ,并联成32位
行地址数位13,列地址数位9. datasheet中并没有明确给定有多少行,关于L-Bank 行数的确定,看下面第二点的介绍。
Bank Size:外接内存容量大小(H57V2562GTR 是 4Mbit*16bit*4Bank*2Chips/8=64MB)注意,Bank Size 中的Bank 和前面说的4Bank 中的 Bank 不是一回事。
Bus Width: 总线宽度:32bit (应该是两片16位H57V2562GTR 并联后的32位)
Base Component:单个芯片容量(bit)(256Mb)
Memory Configration:内存配置 ((4M * 16b * 4Banks)* 2Chips )
Bank Address:4 个 bank 的选择位
2.关于SDRAM的刷新周期
SDRAM要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs。
三、串口
编译,烧写,启动板子,出现乱码,可能是串口的寄存器(波特率与时钟方面)设置的不对,查找其波特率的设置,在get_PLLCLK()函数处发现错误(get_HCLK()函数设置也不对,需要对照改下),最后一行改成 return (2 * CONFIG_SYS_CLK_FREQ * m) / (p * 2 << s));重新烧写,仍旧出现乱码,找了半天,看了别人的文档才发现上面那没改对,犯了两个超2b的错误:首先手册是这样写的 "Mpll = (2 * m * Fin) / (p * 2^s)".第一个错误就是优先级弄错了,"*"的优先级大于"<<";第二个就是对左移运算掌握的不熟了,左移n位就相当于"*2^n" 而"2 << s"就是"2*2^s",自然就不对了,修改正确后,编译、烧写,OK。
0
上一篇:ORR R0,R0,#R1_nF:OR:R1_iA
下一篇:UBOOT-2012-10在OK6410平台的移植(三)uboot 2012.10编译配置
相关热门文章
- SHTML是什么_SSI有什么用...
- shell中字符串操作
- shell中的特殊字符
- 关于java中的“错误:找不到或...
- linux设备驱动归纳总结...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- u-boot2010.06的移植(2)—— 时钟、SDRAM、UART
- u-boot2010.06的移植(1)——准备移植
- u-boot-2012.04.01移植笔记——时钟、SDRAM、UART
- u-boot2010.06的移植(4)——支持norflash
- 【Linux 移植 】——3、移植 u-boot-2012.04.01 之 修改代码(时钟,SDRAM,UART)
- 06-S3C2440学习之移植2012u-boot到S3C2440(移植过程一)新建单板+修改时钟+SDRAM+UART
- u-boot2010.06的移植(5)——支持nandflash、分区及环境参数的设置
- u-boot2010.06的移植(3)——支持nand启动
- u-boot2010.06的移植(6)——支持yaffs下载
- U-Boot2010.06移植总结
- U-Boot2010.06移植(2440)-----基本移植
- Mini2440 u-boot2010-3的移植
- U-Boot移植——设置SDRAM
- U-Boot2010.06移植(2440)-----移植NorFlash驱动
- U-Boot2010.06移植(2440)-----移植NandFlash驱动
- U-Boot2010.06移植(2440)-----移植网卡DM9000驱动
- u-boot-2016.05移植:(2)、修改时钟 初始化sdram 重定位u-boot 配置smdk2440.h 修改u-boot.lds
- U-Boot2010.06移植(2440)-----添加MTD(NAND)分区
- set_irq_reg()函数
- sql创建外键
- 关于静态变量和变量初始化问题
- ORR R0,R0,#R1_nF:OR:R1_iA
- iOS开发中UITableView和UItableViewCell的几种形式
- u-boot2010.06的移植(2)—— 时钟、SDRAM、UART
- UBOOT-2012-10在OK6410平台的移植(三)uboot 2012.10编译配置
- u-boot2010.06的移植(3)——支持nand启动
- u-boot2010.06的移植(4)——支持norflash
- source insight 里的函数有时候会突然变黑
- 宏定义的顺序
- 99乘法java
- 嵌入式Linux常用工具下载官网
- expected declaration or statement at end of input
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
兽人之雌性难为淡淡年华
完美雌性养成系统
未来星际之雌性
雌性激素食物
雌性偏高尽量不要吃什么食物
兽人之纯种雌性
完美雌性培养系统
未来自然雌性软萌受
未来星际之软萌雌性
星际单纯小受稀有雌性
星际未来之自然雌性争夺记
人形雌犬系列
雌狐
雌虎威龙
总攻浴室腿根雌侍
兽人之一朝为雌
左炔诺孕酮炔雌醚片
雌蕊
雌蕊由什么组成
我以我肾爱雌虫
星际雌虫穿成乡村哥儿格格党
雌虫穿成乡村哥儿
雌雄同体
雌雄大盗
一决雌雄
雌雄同体人
夺命雌雄剑
雌雄莫辨
雌雄同体动物
雌雄同体的动物
海马雌雄同体
皇家师姐雌雄大盗
皇家师姐3雌雄大盗
鹦鹉怎么分雌雄
雌雄同体人图片
星际雌雄之宠婚
日本阴阳人雌雄同体
雌雄同体决战扶她奶茶
雌雄同体的动物有哪些
八哥怎样分雌雄
带雌雄的成语