[LPC] LPC1788外挂SDRAM问题

[复制链接]
11035|31
 楼主| qzroger 发表于 2014-3-21 17:29 | 显示全部楼层 |阅读模式
各位大神:
    SDRAM 读写测试都是正常的。现在 用malloc 开辟一个很大的空间 程序就跑飞了 因为空间大于片内内存的空间 片外的没有用上。我想知道要怎样用上片外的SDRAM,非常感谢
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中运行,是不是就不会存在我上面问的问题了,各位大神出来帮帮忙
 楼主| qzroger 发表于 2014-3-24 15:30 | 显示全部楼层
自己顶下,大神们,我想让程序在片外SDRAM中运行,分散加载文件要怎么写啊
huangxz 发表于 2014-3-24 17:28 | 显示全部楼层
为啥要用malloc呢,你用uclinux了吗
 楼主| qzroger 发表于 2014-3-24 22:26 | 显示全部楼层
huangxz 发表于 2014-3-24 17:28
为啥要用malloc呢,你用uclinux了吗

我是裸机跑的,因为带文件系统的,文件系统里有MALLOC函数,我现在只想让 程序在SDARAM中运行,不知道分散加载文件要怎么写
 楼主| qzroger 发表于 2014-3-24 22:29 | 显示全部楼层
huangxz 发表于 2014-3-24 17:28
为啥要用malloc呢,你用uclinux了吗

我是裸机跑的,因为带文件系统,文件系统中有MALLOC函数,我现在只想让程序在外挂的SDRAM中运行,不知道分散加载文件要怎么写
huangxz 发表于 2014-3-25 07:35 | 显示全部楼层
qzroger 发表于 2014-3-24 22:29
我是裸机跑的,因为带文件系统,文件系统中有MALLOC函数,我现在只想让程序在外挂的SDRAM中运行,不知道 ...

要在外面的sdram中跑,就要把程序load到sdram就可以了,
在lpc1788一般都是用0xa00000000.
所以分散加载文件把所有地址放在sdram空间才可以。
zf470 发表于 2014-3-25 08:27 | 显示全部楼层
你看看LPC1788跑ewin,他加载到sdram
 楼主| 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区域还没初始化,这个变量又存在哪里呢,这里会引起一系列问题。帮帮忙 谢谢
 楼主| qzroger 发表于 2014-3-25 16:27 | 显示全部楼层
zf470 发表于 2014-3-25 08:27
你看看LPC1788跑ewin,他加载到sdram

我把SDRAM初始化函数去掉,程序也运行正常的
huangxz 发表于 2014-3-25 20:00 | 显示全部楼层
qzroger 发表于 2014-3-25 15:49
恩 是的,但是现在遇到个问题就是初始化SDRAM会出现问题 程序老是死在SDRAM初始化函数里面, LPC_EMC->Dy ...

在使用sdram的时候当然不能再初始化sdram,
应该在加载到sdram前初始化好
 楼主| qzroger 发表于 2014-3-25 20:04 | 显示全部楼层
huangxz 发表于 2014-3-25 20:00
在使用sdram的时候当然不能再初始化sdram,
应该在加载到sdram前初始化好

现在是不知道怎样在加载前初始化,帮帮忙 能详细说下么,我已经折腾了好几天了,非常感谢
huangxz 发表于 2014-3-25 20:19 | 显示全部楼层
qzroger 发表于 2014-3-25 20:04
现在是不知道怎样在加载前初始化,帮帮忙 能详细说下么,我已经折腾了好几天了,非常感谢 ...

写一个bootloader(这个BOOTLOADER运行在内部FLASH里面),你已经初始化成功了,就用现在的程序去load就可以了.
 楼主| qzroger 发表于 2014-3-25 20:40 | 显示全部楼层
huangxz 发表于 2014-3-25 20:19
写一个bootloader(这个BOOTLOADER运行在内部FLASH里面),你已经初始化成功了,就用现在的程序去load就可以 ...

我可以理解为是这样么:就是把bootloader程序放在FLASH的0X000000,把应用程序放到Flash的0x00002000,在bootloader让程序跳到0x00002000是这样吗?
huangxz 发表于 2014-3-25 22:15 | 显示全部楼层
qzroger 发表于 2014-3-25 20:40
我可以理解为是这样么:就是把bootloader程序放在FLASH的0X000000,把应用程序放到Flash的0x00002000,在 ...

应用程序还没有运行的时候在哪里都无所谓,就算在spi-flash,twi-flash里面都可以,但是运行的时候一定是要在你分散加载文件指定的那个地址,
按楼主的意思应该就是在sdram 空间吧
 楼主| qzroger 发表于 2014-3-26 10:20 | 显示全部楼层
huangxz 发表于 2014-3-25 22:15
应用程序还没有运行的时候在哪里都无所谓,就算在spi-flash,twi-flash里面都可以,但是运行的时候一定是要 ...

其实我还不是很明白,问下bootloader能和应用程序放在一个工程文件中实现吗,就是在初始化SDRAM的时候内存在片内,初始化完了内存放到片外
huangxz 发表于 2014-3-26 14:50 | 显示全部楼层
qzroger 发表于 2014-3-26 10:20
其实我还不是很明白,问下bootloader能和应用程序放在一个工程文件中实现吗,就是在初始化SDRAM的时候内 ...

从原理上讲是可以的,只是我觉的没必要这样做,bootload跟app各司其职就可以了。
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部