您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [原创]求救: sdram 初始化问题~~
本帖共有2094个阅读者
发表帖子 发表投票 回复主题
[原创]求救: sdram 初始化问题~~
szrong3000(论坛新手)
szrong3000
头衔:社区公民
帮派:无帮无派
帖数:22
金钱:305
积分:27
注册时间:2012/1/10
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[原创]求救: sdram 初始化问题~~


现遇到一个sdram启动问题:
1)使用的板子是bf518,SDRAM 从MT48L32M16A -75(64M) 换成MT48L16M16A -75(32M);
2)原来开发板是使用 MT48L32M16A -75 。 ADSP-BF518-proc.xml 设置启动如下
<register name="EBIU_SDRRC"  reset-value="0x026B" core="Common" />  
<register name="EBIU_SDBCTL" reset-value="0x25" core="Common" />  
<register name="EBIU_SDGCTL" reset-value="0xC0911109" core="Common" />
3)我现在的板子换成 MT48L16M16A -75 ,但 ADSP-BF518-proc.xml 按照论坛的说法,设置成
<register name="EBIU_SDRRC"  reset-value="0x0817" core="Common" />  
<register name="EBIU_SDBCTL" reset-value="0x13" core="Common" />  
<register name="EBIU_SDGCTL" reset-value="0x0091998d" core="Common" />
问题也就出来了:
a)换成 3)的设置,load后压根连Run都进不了;
b)改回原有2)设置,仿真的时候load后能Run,但RUN后就不动了,s在半路;
请问:
<1> 为什么64M换成32M 只有2)这种设置才能RUN,是不是ADSP-BF518-proc.xml 还要修改什么地方???
<2> 针对MT48L16M16A -75的SDRAM,EBIU_SDRRC=0x0817;EBIU_SDBCTL=0x13;EBIU_SDGCTL=0x0091998d;到底能不能跑??
<3> 设EBIU_SDRRCEBIU_SDBCTL,EBIU_SDGCTL这几个寄存器,改了也不让运行,所以特意来请教大家,
这几个寄存器的值到底是什么??希望谁能帮我设一下;在此谢过了~~

blackfine 的初学者~~
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/14 11:37:03
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

1.  修改后load不成功,可能存在的问题:

     1.板卡硬件SDRAM异常,导致load的代码不能正确加载指定的地址。

     2.工程LDF文件分配地址异常,如LDF文件仍是按64MB分配空间,这样BANK2和3的地址就会溢出。

建议找个简单的代码先对SDRAM做遍历操作,然后再确定LDF文件分配,通常可直接生成一个新的LDF。

2. 可能你的LDF分配异常。

3. 32MB的SDRAM,设置值就是这样,没有错。

  


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/14 14:20:07
szrong3000(论坛新手)
szrong3000
头衔:社区公民
帮派:无帮无派
帖数:22
金钱:305
积分:27
注册时间:2012/1/10
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
遍历 0x0000004~0x01ffffff ;发现写入和读出数据都ok! ldf文件是建立 VDK 工程时自动生成,不知道如何修改!!郁闷

blackfine 的初学者~~
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/14 17:13:13
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
重新建立一个工程,把你所要的.C文件载入工程看看吧,我在使用bf518例子程序的时候也碰到了和你同样的问题,由于系统下工程关联VDSP下的软件太紧密了,不知道他关联了哪里。后来重新建立工程,将系统下有用的代码提出来再修改,就好使了。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/15 18:54:52
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我今天测试了bf518上的SD卡代码,用的32MBSDRAM,和你一样修改了xml,之前调试没有跑通系统下自带的那个带文件系统的代码,就自己建了工程,从例子程序下提了些文件,弄了一个测试的。今天将板卡上的SDRAM换成了64MB(我设计是按照64MB连线的,封装兼容32MB) ,改回xml,发现那个SD卡程序一跑就通。计划以后板卡就焊接64MB,免得ADI资源用不了。

因为这个代码关联的文件太多,大概在VDSP软件下有将近20多个,很有可能他的一些数据使用了32MB以外的空间,所以我们改为32MB内存后,因为代码没有办法跟踪(很多代码编译后只能在汇编中看到Main,C中没有Main函数,不知道ADI人怎么写的),不知道代码会在哪里出错。

建议你也改为64MBSDRAM,试试看。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/16 19:09:31
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我收到一个邮件应该也是你问的吧,我回一下SDRAM的配置吧。

上传的图片
  201221716102583.jpg [ 168.48 KB 1024×768 ] (缩略时请点击查看原图)

 

对于SDRAM配置,需配合SDRAM的数据手册来配,找到数据手册中上图的参数,-75的是后面的的参数。然后打开帮助文件找到需要配置的SDRAM寄存器。

如配置EBIU_SDRRC 寄存器

帮助文件对该寄存器的配置做了以下描述:

To calculate the value that should be written to the EBIU_SDRRC register, use the following equation:

RDIV = ((fSCLK ¥ tREF) / NRA) – (tRAS + tRP)

Where:

  • fSCLK = SDRAM clock frequency (system clock frequency)
  • tREF = SDRAM refresh period
  • NRA = Number of row addresses in SDRAM (refresh cycles to refresh whole SDRAM)
  • tRAS = Active to Precharge time (TRAS in the SDRAM Memory Global Control register) in number of clock cycles
  • tRP = RAS to Precharge time (TRP in the SDRAM Memory Global Control register) in number of clock cycles

可以看出其配置公式为:

        RDIV = ((fSCLK ¥ tREF) / NRA) – (tRAS + tRP)

假设系统时钟 133MHz ,

tREF查上表为64ms

tRAS =  44~120000 nS  133M时,一个系统周期是7.5nS,要大于44nS,需要6个系统时钟,即寄存器TRAS最小值为6,要小于120000nS,即小于16000 该寄存器位于EBIU_GCTL寄存器的boit6-9。你配置的为0x0091998d,bit6-9的值为0110,   TRAS = 0110B = 6 符合最小时序。


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/17 16:13:10
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

以此类推,tRP的值 TRP寄存器,位于Bit11-13,其值为011tRP = 3

NRA 的值在数据手册有一段话描述:

The 256Mb SDRAM is a high-speed CMOS,
dynamic random-access memory containing
268,435,456 bits. It is internally configured as a quadbank
DRAM with a synchronous interface (all signals
are registered on the positive edge of the clock signal,
CLK). Each of the x4’s 67,108,864-bit banks is organized
as 8,192 rows by 2,048 columns by
4 bits. Each of the x8’s 67,108,864-bit banks is organized
as 8,192 rows by 1,024 columns by 8 bits. Each of
the x16’s 67,108,864-bit banks is organized as 8,192
rows by 512 columns by 16 bits.

其他的不需要看,只看 8,192 rows  

所以NRA = 8192

根据公式:

     RDIV = ((fSCLK ¥ tREF) / NRA) – (tRAS + tRP)

     RDIV = (133*1000000*  0.064/8192)  – (6+3)

             =    1039 – 9

             =   1030   = 0x406

这个值是两次刷新所需要的最小时间,填入这个寄存器的时间必须大于该值。

之所以填817,我在帮助文件中找到bf533上的寄存器配置:

  • fSCLK = 133 MHz
  • tREF = 64 ms
  • NRA = 4096 row addresses
  • tRAS = 2
  • tRP = 2

The equation for RDIV yields:

  • RDIV = ( (133 x 106 x 64 x 10-3) / 4096) – (2 + 2) = 2074 clock cycles

可能之前使用的SDRAM NRA4096,所以写入值是0x817

这个问题我也是刚刚注意到,可能因为刷新时间长的话只能影响SDRAM速度,并不影响数据读取。其他的寄存器按照这个方法配置吧。


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/17 16:13:44
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159164 Call, 1 Queries, Processed in 0.031250 second(s),