九鼎创展论坛
标题: 裸机DDR内存映射的配置问题(已解决) [打印本页]
作者: laotang365 时间: 2014-10-27 10:13
标题: 裸机DDR内存映射的配置问题(已解决)
本帖最后由 laotang365 于 2014-10-30 22:12 编辑
在syscfg.inc文件中DDR寄存器参数设置如下:- .if (CLK_400_200_166_133 == 1) || (CLK_800_200_166_133 == 1) || (CLK_1000_200_166_133 == 1)
- .equ DMC0_MEMCONFIG_0, 0x30F01313
- .equ DMC0_MEMCONFIG_1, 0x40F01323
- .equ DMC0_TIMINGA_REF, 0x00000618
- .equ DMC0_TIMING_ROW, 0x28233287
- .equ DMC0_TIMING_DATA, 0x23240304
- .equ DMC0_TIMING_PWR, 0x09C80232
-
- .equ DMC1_MEMCONFIG_0, 0x40F01313
- .equ DMC1_MEMCONFIG_1, 0x00E01323
- .equ DMC1_TIMINGA_REF, 0x00000618
- .equ DMC1_TIMING_ROW, 0x28233289
- .equ DMC1_TIMING_DATA, 0x23240304
- .equ DMC1_TIMING_PWR, 0x08280232
复制代码这里DMC0_MEMCONFIG_0中的chip_row设置为0x1 = 13bits,而DMC1_MEMCONFIG_0中的chip_row设置为0x2 = 14bits,但是看核心板原理图,不都是K4T1G164QQ么,行地址应该都是14bits才对啊。
DMC0_MEMCONFIG_1的chip1_base是0x40,chip1_mask是0xF0。而DMC1_MEMCONFIG_0也是chip1_base是0x40,chip1_mask是0xF0,这样地址映射不就重复了吗???
另外DMC1_MEMCONFIG_1的chip1_base居然是0x00,和chip1_mask的0xE0相与,那不就是IROM的地址范围么?怎么能这样设置呢?
而Uboot源码的DDR设置(uboot-x210\onenand_bl1\smdkc110\s5pc110_reg.inc)也有奇怪的地方:- CONFIG_CLK_1000_200_166_133
- .ifdef CONFIG_X210B
- .equ DMC0_MEMCONFIG_0, 0x30F82222
- .equ DMC0_MEMCONFIG_1, 0x40F82222
- .equ DMC0_TIMINGA_REF, 0x0000050E
- .equ DMC0_TIMING_ROW, 0x14233287
- .equ DMC0_TIMING_DATA, 0x12130005
- .equ DMC0_TIMING_PWR, 0x0E140222
- .equ DMC1_MEMCONTROL, 0x00212100
- .equ DMC1_MEMCONFIG_0, 0x40F01322
- .equ DMC1_MEMCONFIG_1, 0x50F01322
- .equ DMC1_TIMINGA_REF, 0x00000618
- .equ DMC1_TIMING_ROW, 0x11344309
- .equ DMC1_TIMING_DATA, 0x12130005
- .equ DMC1_TIMING_PWR, 0x0E190222
- .endif @;CONFIG_X210B
复制代码 DMC0_MEMCONFIG_0配置成0x30F82222,注意末尾的2222,chip_col设置成9bits(K4T1G164QQ的行地址不是10bits么)。
再看DMC1_MEMCONFIG_0 = 0x40F01322,这里chip_col设置成0x3 = 10bit了,难道这核心板上DDR芯片不一样么?
哦,看错了,makefile有S5PV210的定义
ifdef CONFIG_MCP_SINGLE
AFLAGS = --defsym $(FLAG4REV)=0x1 --defsym S5PV210=0x1
CFLAGS = -I../../include -Os -D$(FLAG4REV) -DS5PV210
CFLAGS_HOST = -D$(FLAG4REV) -DS5PV210
else
AFLAGS = --defsym $(FLAG4REV)=0x1
CFLAGS = -I../../include -Os -D$(FLAG4REV)
CFLAGS_HOST = -D$(FLAG4REV)
endif
S5PV210的定义隐藏得好深啊。。。
.ifdef S5PV210
.equ CONFIG_SMDKV210, 0x1
.else
.equ CONFIG_X210B, 0x1
.endif
所以uboot的DDR参数应该是- .ifdef CONFIG_SMDKV210
- .equ DMC0_MEMCONFIG_0, 0x20E01323
- .equ DMC0_MEMCONFIG_1, 0x40F01323
- .equ DMC0_TIMINGA_REF, 0x00000618
- .equ DMC0_TIMING_ROW, 0x28233287
- .equ DMC0_TIMING_DATA, 0x23240304
- .equ DMC0_TIMING_PWR, 0x09C80232
- .equ DMC1_MEMCONTROL, 0x00202400
- .equ DMC1_MEMCONFIG_0, 0x40C01323
- .equ DMC1_MEMCONFIG_1, 0x00E01323
- .equ DMC1_TIMINGA_REF, 0x00000618
- .equ DMC1_TIMING_ROW, 0x28233289
- .equ DMC1_TIMING_DATA, 0x23240304
- .equ DMC1_TIMING_PWR, 0x08280232
- .endif @;CONFIG_SMDKV210
- .endif @;CONFIG_CLK_800_200_166_133
复制代码 那么uboot的DDR设置可以理解了,但是九鼎裸机例程的DDR设置无法理解。有人看过这段代码么,交流一下,谢谢。
2014.10.30更新:
经测试,以上配置都有问题,因为根据datasheet第二章的内容,Memory Map规定DMC0的范围只能在0x2000_0000~0x3FFF_FFFF(512MByte),只有DMC1才能分配(0x4000_0000~0x7FFF_FFFF)(1GByte)
所以 0x40F01323不可能分配给DMC0_MEMCONFIG_1。分配了也不可用。
我的板子是X210II,只有512MByte,而且是DMC0挂了256M,DMC1上挂256M,真是蛋疼。
为了保持地址连续,最终我的配置是这样的:
.equ DMC0_MEMCONFIG_0, 0x30F01323 /*九鼎给的原值为0x0x30F01313*/
.equ DMC0_MEMCONFIG_1, 0x38F81323 /*九鼎给的原值为0x0x40F01323*/
.equ DMC0_TIMINGA_REF, 0x00000618
.equ DMC0_TIMING_ROW, 0x28233287
.equ DMC0_TIMING_DATA, 0x23240304
.equ DMC0_TIMING_PWR, 0x09C80232
.equ DMC1_MEMCONFIG_0, 0x40F01323 /*九鼎给的原值为0x50F01313*/
.equ DMC1_MEMCONFIG_1, 0x48F81323 /*九鼎给的原值为0x00E01323,这里chip_base不该是0x00吧,如果是0x00,DMC1只有128M可用*/
.equ DMC1_TIMINGA_REF, 0x00000618
.equ DMC1_TIMING_ROW, 0x28233289
.equ DMC1_TIMING_DATA, 0x23240304
.equ DMC1_TIMING_PWR, 0x08280232
完
作者: laotang365 时间: 2014-11-2 18:44
本帖最后由 laotang365 于 2015-5-6 14:20 编辑
2014.11.12更新:
之前理解错了,因为只是用了CS0作为片选,CS1当做BA3,X210的DMC0应该当做一个芯片来用,所以不需要设置DMC0_MEMCONFIG_1,但是DMC0_memcontrol[19:16]必须设置为0x0,即只有一个chip。同理DMC1_MEMCONFIG_1也不需要设置。
另外,纠正一个错误,X210ii的DDR2芯片行地址宽度是是13bit而非14bit,虽然原理图上给的是画的是14bit,可能只是为了扩展内存容量画的。
x210(512M版本)的DDR芯片属于上图的第三种配置 ,因此2^13 * 2^10 * 2^3 * 4 =512MB。行地址 13 bit,列地址10bit。因此是MENCONFIG_0[3:0] = 1313
欢迎光临 九鼎创展论坛 (http://bbs.9tripod.com/) |
Powered by Discuz! X3.2 |