打印

请教DSP6713如何使程序在外部SDRAM上运行呢

[复制链接]
6796|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eagle200203|  楼主 | 2013-3-3 19:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是DSP初级菜鸟一枚,最近在用6713。遇见各种问题,各种不懂啊,求大侠们指教,感激不尽!
1 将程序烧录到外部FLASH之后在内部RAM里面运行是成功的。但是烧写后如何程序在外部SDRAM运行呢?
2 我试着用DATA_SECTION将部分数据放在外部SDRAM,编译也报错,是什么问题呢?
3 我将CMD文件修改,想将程序放在外部SDRAM里面仿真调试也不成功。仿真调试的时候只能将程序放在内部RAM里面吗?

相关帖子

沙发
jlass| | 2013-3-4 11:47 | 只看该作者
可以现在内部运行,然后用一段小程序把代码拷贝到外部去,再跳转到外部运行。

使用特权

评论回复
板凳
gygp| | 2013-3-5 16:10 | 只看该作者
需要把程序再读会ram运行的

使用特权

评论回复
地板
eagle200203|  楼主 | 2013-3-5 23:43 | 只看该作者
谢谢楼上两位的回答
想问问2楼的大侠,怎样把程序拷贝到外部呢,怎么跳转的呢?
#program CODE_SECTION可以解决吗?

还有一个问题想问问,我前面一直做软件方面的,对硬件一窍不通哈
SDRAM的时钟是怎么决定的呢?我们用的SDRAM是MT48LC2M32,硬件工程师给我说是7NS那款。我以为SDRAM的时钟就是143M了。但是今天有位工程师说是由DSP给的。我看了原理图,我们的板子SDRAM的时钟是与DSP的ECLKOUT连接的,就是输出给EMIF的时钟,那SDRAM的时钟是这个吗?也就是说我要输出EMIF以143M的频率吗?我一直输出80M的频率。

使用特权

评论回复
5
eagle200203|  楼主 | 2013-3-5 23:44 | 只看该作者
jlass 发表于 2013-3-4 11:47
可以现在内部运行,然后用一段小程序把代码拷贝到外部去,再跳转到外部运行。 ...

谢谢回答呢,请问如何拷贝的呢?

使用特权

评论回复
6
jlass| | 2013-3-6 08:31 | 只看该作者
eagle200203 发表于 2013-3-5 23:43
谢谢楼上两位的回答。
想问问2楼的大侠,怎样把程序拷贝到外部呢,怎么跳转的呢?
#program CODE_SE ...

之所以不能直接在sdram中执行程序是因为sdram必须先进行初始化操作。
如果你的程序很小,可直接放在片内ram中,然后用读写指令拷到初始化完成的sdram中即可。
如果你的程序很大,可建一个二进制的文件存放第二级的代码,把第一级的引导代码在ram中运行之后,先初始化sdram,再去读取那个二进制文件,并把数据写到sdram中,完成后跳转到sdram中运行。
MT48LC2M32的时钟是由DSP给的,给多给少都可以,在硬件允许的范围内,一般是越快越好。你可自行查阅DSP与sdram的时钟频率的上限,以确定给多少。

使用特权

评论回复
7
eagle200203|  楼主 | 2013-3-7 22:48 | 只看该作者
jlass 发表于 2013-3-6 08:31
之所以不能直接在sdram中执行程序是因为sdram必须先进行初始化操作。
如果你的程序很小,可直接放在片内r ...

SDRAM初始化是指什么呢?是不是EMIF中SDRAM几个寄存器的设置,INIT使能是不是就能自动初始化了呢?还是还有其他的初始化操作?
您所说的程序大那种情况是不是指二次BOOTLODER呢?我的肯定要啊。DSP内部RAM好像是192KB,我的程序现在还没有超过,但是还没有写完,估计后面会不够用,所以想放部分在外部SDRAM里面运行。现在我用的TI的例程的BOOT这种方式,程序全部放在内部RAM运行的。看了很多网上的资料也都是放在内部的,就是不知道怎么在外部SDRAM里面运行程序呢。
大侠,我的QQ号是125420311,您方便加我吗?有很多问题想向您请教呢,谢谢哈!

使用特权

评论回复
8
jlass| | 2013-3-8 08:24 | 只看该作者
eagle200203 发表于 2013-3-7 22:48
SDRAM初始化是指什么呢?是不是EMIF中SDRAM几个寄存器的设置,INIT使能是不是就能自动初始化了呢?还是还 ...

SDRAM初始化确实是配置寄存器,理论上应该是你主动配置的参数,因为不同的sdram的参数是不同的。不确定你说的INIT使能包不包括这部分。

是指二次BOOTLODER,这种用法也很常见,网上应该有例程吧,你再找找。

需要指导的话建议你去TI的官方论坛http://www.deyisupport.com/

使用特权

评论回复
9
blacksword| | 2013-3-8 12:50 | 只看该作者
http://www.ti.com/dsp/docs/litab ... 1&familyId=2967

上面是TI官方的二次引导教程

使用特权

评论回复
10
770907690| | 2013-3-8 17:02 | 只看该作者
建议还是上TI的官方论坛吧

使用特权

评论回复
11
eagle200203|  楼主 | 2013-3-11 13:07 | 只看该作者
jlass 发表于 2013-3-8 08:24
SDRAM初始化确实是配置寄存器,理论上应该是你主动配置的参数,因为不同的sdram的参数是不同的。不确定你 ...

虽然我没有解决,但是谢谢您的回复。:)

使用特权

评论回复
12
eagle200203|  楼主 | 2013-3-11 13:28 | 只看该作者
blacksword 发表于 2013-3-8 12:50
http://www.ti.com/dsp/docs/litabsmultiplefilelist.tsp?sectionId=3&tabId=409&literatureNumber=spra999 ...

您好,谢谢您的回复。我现在基本上按照官网的做的,但是有点疑问想请教。
我的程序用仿真器在线调试的时候是正常的。烧写程序完成后,按复位键后程序照常运行(没有关电源),但是关闭电源重启系统,程序就运行不正常了。我们自己的板子和开发板似乎都有这个毛病。但是用合纵达给的例程BOOT都是正常的,重启电源运行也正常(例程是最简单的点灯程序)。因为在开发板上面也是这个情况,初步排除硬件的问题,我怀疑是我的程序问题,但是在线调试又是正常的,所以很纠结。
我的CMD文件如下:
因为程序较大与官网相比就只是修改了一下FLASH_REST:、IRAM的长度值。我不知道是不是这个问题,IRAM不是有192KB吗,我感觉我设置IRAM到30000应该没有问题吧,还是其他造成的呢?
MEMORY
{
/*the FLASH_BOOT and FLASH_REST sections are not needed if the hex converter */
/*is used to create the copy table*/
FLASH_BOOT: o = 0x90000000 l = 0x00000400 /* Flash − for custom boot code */
FLASH_REST: o = 0x90000400 l = 0x0002FC00 /* Flash – for application code */
BOOT_RAM o = 0x00000000 l = 0x00000400 /* L2− for custom boot code*/
IRAM: o = 0x00000400 l = 0x0002fc00 /* L2− for non−custom boot code*/
SDRAM: o = 0x80000000 l = 0x10000000 /* EMIF − CE1 − SDRAM */
}

SECTIONS
{
/*When using the hex converter to generate the copy table, the load
address as well as the LOAD_START, RUN_START, AND SIZE linker options
do not need to be specified. Only the run address must be specified */
.boot_load : LOAD = FLASH_BOOT, RUN = BOOT_RAM
.text : LOAD = FLASH_REST, RUN = IRAM
LOAD_START(_text_ld_start),
RUN_START(_text_rn_start),
SIZE(_text_size)
/*LOAD_START, RUN_START, AND SIZE are only required when using the linker
options to generate the copy table */
.const > FLASH_REST
.cinit > IRAM
.pinit > IRAM
.switch > IRAM
.data > IRAM
.cio > IRAM
.bss > IRAM
.far > IRAM
}

使用特权

评论回复
13
eagle200203|  楼主 | 2013-3-11 13:48 | 只看该作者
blacksword 发表于 2013-3-8 12:50
http://www.ti.com/dsp/docs/litabsmultiplefilelist.tsp?sectionId=3&tabId=409&literatureNumber=spra999 ...

SECTIONS贴错了,是下面这样的

SECTIONS
{
/*When using the hex converter to generate the copy table, the load
address as well as the LOAD_START, RUN_START, AND SIZE linker options
do not need to be specified. Only the run address must be specified */
.boot_load : LOAD = FLASH_BOOT, RUN = BOOT_RAM
.text : LOAD = FLASH_REST, RUN = IRAM
LOAD_START(_text_ld_start),
RUN_START(_text_rn_start),
SIZE(_text_size)
/*LOAD_START, RUN_START, AND SIZE are only required when using the linker
options to generate the copy table */
.cinit > FLASH_REST

.const > IRAM
.stack > IRAM
.bss > IRAM
.data > IRAM
.far > IRAM
.switch > IRAM
.sysmem > IRAM
.cio > IRAM
}

使用特权

评论回复
14
eagle200203|  楼主 | 2013-3-13 16:21 | 只看该作者
关于12楼的问题已经解决,程序做了修改。虽然解决但是没有找到原因,很奇怪的问题。
但是在外部SDRAM运行程序还是没有得到解决啊,还有那些大侠可以指点指点呢?

使用特权

评论回复
15
candiselx666| | 2017-6-27 20:58 | 只看该作者
eagle200203 发表于 2013-3-13 16:21
关于12楼的问题已经解决,程序做了修改。虽然解决但是没有找到原因,很奇怪的问题。
但是在外部SDRAM运行程 ...

解决没 我现在boot里面的sdram配置不成功
为什么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

67

帖子

1

粉丝