您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 【已解决】BF系列 SDRAM的用法疑问
本帖共有2354个阅读者
发表帖子 发表投票 回复主题
【已解决】BF系列 SDRAM的用法疑问
webom2008(论坛新手)
webom2008
头衔:社区公民
帮派:无帮无派
帖数:22
金钱:287
积分:29
注册时间:2013/9/9
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
【已解决】BF系列 SDRAM的用法疑问
本人刚接触BF51x的DSP嵌入式编程。对SDRAM理解不深,发起此话题请教下SDRAM的问题。

本人在EE-326手册里面看到,对于SDRAM的初始化有几种:

1.通过XML配置进行初始化;
2.通过C代码进行初始化;
3.通过系统服务模块进行初始化;
4.通过InitCode.dxe进行初始化;
5.通过OTP进行初始化。

本人有几个疑问:
1.本人使用第2中方法进行初始化化,即在main()函数里面调用EBIU的相关设置。
疑问:我程序里面有几个大的数组1024Byte的。但程序运行时,我的变量是在片内RAM呢,还是SDRAM?是系统自动分配吗?
我担心系统都是用了片内的SRAM,这样可能我的程序有内存溢出的隐患(大量全局大数组变量)。
系统能自动分配变量到片外的SDRAM吗?

2.如果手动进行指定分配的SDRAM。
疑问:是不是只有通过LDF先进行分配,再使用类似于“#pragma section("sdram0_bank1") ”的分配?


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/11 18:25:35
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
1. 默认的变量都会放在L1中,系统自动分配,如果在工程选项中使能了SDRAM,当出现大的数组,L1中放不下时,会自动分配到SDRAM中,也可以通过指令分配,放在数组或者函数前面,将其指定到SDRAM中。
2. LDF文件建议不要修改,直接用工程选项生成的,然后在工程选中把使能SDRAM打开,选择与你硬件匹配的内存大小。然后通过section("sdram0_bank1") 分配,没有“#pragma”。
如:  
section("sdram0_bank1")  char buffer[100000];
section("sdram0_bank1")  void test()
{
    **************
}

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/11 21:04:09
webom2008(论坛新手)
webom2008
头衔:社区公民
帮派:无帮无派
帖数:22
金钱:287
积分:29
注册时间:2013/9/9
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
谢谢andy答复!
刚遇到SDRAM在线JTAG调试是可以的。但是烧写后,程序跑不起来。哪位遇到过同样的问题?


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/12 16:50:00
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
init_code没有添加,或者错误。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/13 15:30:14
webom2008(论坛新手)
webom2008
头衔:社区公民
帮派:无帮无派
帖数:22
金钱:287
积分:29
注册时间:2013/9/9
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
添加InitCode后能够正常啦。终于可以分配给SDRAM跑了。谢谢andy解答!


我是ADSP的菜鸟,接触了2个月ADSP了,现在还有个疑问,不知高手能否为我解疑?

疑问:在烧写ldr文件时,过程所需dxe文件是否自动一并烧写进flash?
描述:我在开发过程中,会遇到两个dxe文件。第一个是flash的驱动dxe(例如SPI的M25P16);第二个就是initcode的dxe了。
我想应该此两个文件都会烧写进去,要不然裸机时就跑不了。
遇到问题了,假若我进行软件升级,只改写应用程序App部分(非initcode部分),那该如何操作。

我如何知道,上次烧写进去的用户App(ldr)会在flash哪个地址呀?
(0x0吗?烧写进flash时候会有偏移地址设置,但是0x0开始是存initcode的dxe呢,还是App的ldr?)


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/20 10:58:10
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
flash驱动DXE文件不会写入flash中,他是VDSP软件在烧写板卡Flash时用到的驱动,需要通过这个驱动将你生成的LDR文件写入FLash。
initcode文件在你生成LDR文件时,会被挂载到你的代码中,编译时,会被编译在代码的开始部分。
如果需要软件升级,通常你可以通过重新生成LDR文件来完成,如果你想通过非仿真器方式升级,要么你的代码应用部分要包含这部分升级代码,就是需要读取你的LDR文件,然后将Flash格式化再重新写入。或者你可以通过下载线或烧写器,将代码写入flash中。
LDR文件通常是从0地址按顺序往后写,无法确定你的应用程序是在哪一块,通常都是重新编译生成新的包含initcode的文件。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/21 16:58:03
webom2008(论坛新手)
webom2008
头衔:社区公民
帮派:无帮无派
帖数:22
金钱:287
积分:29
注册时间:2013/9/9
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
嗯嗯,InitCode部分听了版主andy的分析,我基本明白它的机制及作用了。


但是,对于Flash驱动部分dxe,依旧疑惑就是——
我理解DSP启动时,先从片内ROM获取启动方式-->片外SPI的flash-->运行flash的0x0地址。

但是,DSP启动时如何知道我"片外SPI的Flash"的时序方式和寄存器操作方式呢?我想ROM里面或许有吧,但是若是真的有,又何必需要加载dxe呢?
矛盾,不解...

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/22 9:42:42
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
norflash和SPIflash启动时的时序都是类似的,DSP根据boot模式不同,会采用不同的时序读取外部的flash,dsp上电后,会从默认的0地址读取,直到代码读取完毕。然后执行。如果flash读取时序为不通用的,则DSP会无法读取。
flash DXE仅仅是VDSP下挂在的驱动,目的是将代码写入板卡flash,和DSP启动没有任何关系。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/22 17:52:20
webom2008(论坛新手)
webom2008
头衔:社区公民
帮派:无帮无派
帖数:22
金钱:287
积分:29
注册时间:2013/9/9
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
谢谢andy!

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/23 9:03:12
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154425 Call, 1 Queries, Processed in 0.015625 second(s),