打印
[LPC]

LPC1788外挂SDRAM问题

[复制链接]
10247|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qzroger|  楼主 | 2014-3-21 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
Auir| | 2014-3-21 18:35 | 只看该作者
建议使用ASM9260T,芯片内置256Mbit sdram,内置以太网,LCD等控制器,不要考虑片外sdram等问题。

使用特权

评论回复
板凳
qzroger|  楼主 | 2014-3-21 21:47 | 只看该作者
Auir 发表于 2014-3-21 18:35
建议使用ASM9260T,芯片内置256Mbit sdram,内置以太网,LCD等控制器,不要考虑片外sdram等问题。 ...

哎,公司已经确定去LPC1788了,没办法

使用特权

评论回复
地板
qzroger|  楼主 | 2014-3-22 09:11 | 只看该作者
如何使程序在SDRAM中运行呢?如果程序能在SDRAM中运行,是不是就不会存在我上面问的问题了,各位大神出来帮帮忙

使用特权

评论回复
5
qzroger|  楼主 | 2014-3-24 15:30 | 只看该作者
自己顶下,大神们,我想让程序在片外SDRAM中运行,分散加载文件要怎么写啊

使用特权

评论回复
6
huangxz| | 2014-3-24 17:28 | 只看该作者
为啥要用malloc呢,你用uclinux了吗

使用特权

评论回复
7
qzroger|  楼主 | 2014-3-24 22:26 | 只看该作者
huangxz 发表于 2014-3-24 17:28
为啥要用malloc呢,你用uclinux了吗

我是裸机跑的,因为带文件系统的,文件系统里有MALLOC函数,我现在只想让 程序在SDARAM中运行,不知道分散加载文件要怎么写

使用特权

评论回复
8
qzroger|  楼主 | 2014-3-24 22:29 | 只看该作者
huangxz 发表于 2014-3-24 17:28
为啥要用malloc呢,你用uclinux了吗

我是裸机跑的,因为带文件系统,文件系统中有MALLOC函数,我现在只想让程序在外挂的SDRAM中运行,不知道分散加载文件要怎么写

使用特权

评论回复
9
huangxz| | 2014-3-25 07:35 | 只看该作者
qzroger 发表于 2014-3-24 22:29
我是裸机跑的,因为带文件系统,文件系统中有MALLOC函数,我现在只想让程序在外挂的SDRAM中运行,不知道 ...

要在外面的sdram中跑,就要把程序load到sdram就可以了,
在lpc1788一般都是用0xa00000000.
所以分散加载文件把所有地址放在sdram空间才可以。

使用特权

评论回复
10
zf470| | 2014-3-25 08:27 | 只看该作者
你看看LPC1788跑ewin,他加载到sdram

使用特权

评论回复
11
qzroger|  楼主 | 2014-3-25 15:49 | 只看该作者
huangxz 发表于 2014-3-25 07:35
要在外面的sdram中跑,就要把程序load到sdram就可以了,
在lpc1788一般都是用0xa00000000.
所以分散加载 ...

恩 是的,但是现在遇到个问题就是初始化SDRAM会出现问题 程序老是死在SDRAM初始化函数里面, LPC_EMC->DynamicControl = 0x0183;执行完这句,下一句就会跑飞,但是我RAM区域设置在片内就没有问题。还有个问题就是SDRAM初始化中有延时,延时需要用到变量,但是RAM区域还没初始化,这个变量又存在哪里呢,这里会引起一系列问题。帮帮忙 谢谢

使用特权

评论回复
12
qzroger|  楼主 | 2014-3-25 16:27 | 只看该作者
zf470 发表于 2014-3-25 08:27
你看看LPC1788跑ewin,他加载到sdram

我把SDRAM初始化函数去掉,程序也运行正常的

使用特权

评论回复
13
huangxz| | 2014-3-25 20:00 | 只看该作者
qzroger 发表于 2014-3-25 15:49
恩 是的,但是现在遇到个问题就是初始化SDRAM会出现问题 程序老是死在SDRAM初始化函数里面, LPC_EMC->Dy ...

在使用sdram的时候当然不能再初始化sdram,
应该在加载到sdram前初始化好

使用特权

评论回复
14
qzroger|  楼主 | 2014-3-25 20:04 | 只看该作者
huangxz 发表于 2014-3-25 20:00
在使用sdram的时候当然不能再初始化sdram,
应该在加载到sdram前初始化好

现在是不知道怎样在加载前初始化,帮帮忙 能详细说下么,我已经折腾了好几天了,非常感谢

使用特权

评论回复
15
huangxz| | 2014-3-25 20:19 | 只看该作者
qzroger 发表于 2014-3-25 20:04
现在是不知道怎样在加载前初始化,帮帮忙 能详细说下么,我已经折腾了好几天了,非常感谢 ...

写一个bootloader(这个BOOTLOADER运行在内部FLASH里面),你已经初始化成功了,就用现在的程序去load就可以了.

使用特权

评论回复
16
qzroger|  楼主 | 2014-3-25 20:40 | 只看该作者
huangxz 发表于 2014-3-25 20:19
写一个bootloader(这个BOOTLOADER运行在内部FLASH里面),你已经初始化成功了,就用现在的程序去load就可以 ...

我可以理解为是这样么:就是把bootloader程序放在FLASH的0X000000,把应用程序放到Flash的0x00002000,在bootloader让程序跳到0x00002000是这样吗?

使用特权

评论回复
17
huangxz| | 2014-3-25 22:15 | 只看该作者
qzroger 发表于 2014-3-25 20:40
我可以理解为是这样么:就是把bootloader程序放在FLASH的0X000000,把应用程序放到Flash的0x00002000,在 ...

应用程序还没有运行的时候在哪里都无所谓,就算在spi-flash,twi-flash里面都可以,但是运行的时候一定是要在你分散加载文件指定的那个地址,
按楼主的意思应该就是在sdram 空间吧

使用特权

评论回复
18
qzroger|  楼主 | 2014-3-26 10:20 | 只看该作者
huangxz 发表于 2014-3-25 22:15
应用程序还没有运行的时候在哪里都无所谓,就算在spi-flash,twi-flash里面都可以,但是运行的时候一定是要 ...

其实我还不是很明白,问下bootloader能和应用程序放在一个工程文件中实现吗,就是在初始化SDRAM的时候内存在片内,初始化完了内存放到片外

使用特权

评论回复
19
huangxz| | 2014-3-26 14:50 | 只看该作者
qzroger 发表于 2014-3-26 10:20
其实我还不是很明白,问下bootloader能和应用程序放在一个工程文件中实现吗,就是在初始化SDRAM的时候内 ...

从原理上讲是可以的,只是我觉的没必要这样做,bootload跟app各司其职就可以了。

使用特权

评论回复
20
qzroger|  楼主 | 2014-3-26 16:49 | 只看该作者
huangxz 发表于 2014-3-26 14:50
从原理上讲是可以的,只是我觉的没必要这样做,bootload跟app各司其职就可以了。 ...

int main()
{
SDRAMInit();
execute_user_code();
return 0;
}

__asm void boot_jump( uint32_t address ){
   LDR SP, [R0]                ;Load new stack pointer address
   LDR PC, [R0, #4]        ;Load new program counter address
}

void execute_user_code(void)
{

        SCB->VTOR =(0x00002000) & 0x3FFFFF80;
        boot_jump(0x00002000);
}
bootloder是不是就这么写就可以了

使用特权

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

本版积分规则

7

主题

26

帖子

0

粉丝