看不见 发表于 2013-12-21 11:00:34

lpc1788sdram 地址问题

我用了一片16位的HY57V561620FTP-6 这个是32M字节吗,所以我这样定义
#define SDRAM_SIZE                200 0000
#define SDRAM_BASE               0xA000 0000
不是这样吗。但我现在操作 oxA250 0000竟然能写成而且读也正确,
为什么呢!!

gnocy 发表于 2013-12-21 11:58:47

这个地址里面的内容,应该是前面 ox50 0000这附近的重了了,你可以查一下,

看不见 发表于 2013-12-21 16:42:01

gnocy 发表于 2013-12-21 11:58
这个地址里面的内容,应该是前面 ox50 0000这附近的重了了,你可以查一下,

什么意思,能详细说一下吗,
#define SDRAM_SIZE               0x02000000
#define SDRAM_BASE               0xA0000000
为什么 会重复,,

看不见 发表于 2013-12-21 16:48:06

这是王0xA000 0000 都用55填充,为什么有错误的呢,

nongxiaoming 发表于 2013-12-21 17:11:03

楼主啊,这个地址肯定可以的啊,为什么?你说就比如你声明一个int型变量,然后给他赋值1000,然后你再声明一个char型变量,然后把int型变量强制转换并赋值给char型变量,会怎么样?你觉得char的值为多少?对于sdram来说,你这个地址是被EMC总线通过地址线发送出去的,你这个地址在EMC总线上是存在的,只是他的区域并不在你的sdram上面,但是实际上EMC发出行列地址的时候,因为你多余的地址并没有接,你的sdram也没有那么多地址线,所以多余的高位地址线无效,那对于你的sdram其实没啥,它只接收对他有效的那些地址线,也就是相当于int型的转成char型的,它不管你高出的那些位,直接丢掉,但还是有低位有效的。反正会得出一个对于你的sdram有效的地址,这个然后你写数据读数据都是没问题的,因为对于超出的地址,你的sdram是不管的。反正在0xA0000000~0xAFFFFFFF这个范围内,你发什么它的低位地址线都是有效的,地址有效,你读写就没问题。只是对于你的sdram,并不是这个地址。

看不见 发表于 2013-12-21 17:46:05

nongxiaoming 发表于 2013-12-21 17:11
楼主啊,这个地址肯定可以的啊,为什么?你说就比如你声明一个int型变量,然后给他赋值1000,然后你再声明 ...

就是实际存在了地地址了,懂了!!谢谢,还有上面数据错了怎么回事,不是地址线虚焊吧

看不见 发表于 2013-12-21 21:03:34

nongxiaoming 发表于 2013-12-21 17:11
楼主啊,这个地址肯定可以的啊,为什么?你说就比如你声明一个int型变量,然后给他赋值1000,然后你再声明 ...

哥哥,你在帮我看看,这个问题

gnocy 发表于 2013-12-21 22:14:39

你用的SDRAM是多少行多少列的,原来我也是出现过这样的问题,就是写过了SDRAM的地址也是对的,后来我这里两个地址都用了后才发现超过地址范围后会覆盖到前面来,这个也是我调试时发现的,因为我前面存放了一张图片,后面再写入就把图片数据给冲掉了。你也可以这样试试。就是上面这个寄存器的设置问题。

看不见 发表于 2013-12-22 13:34:50

gnocy 发表于 2013-12-21 22:14
你用的SDRAM是多少行多少列的,原来我也是出现过这样的问题,就是写过了SDRAM的地址也是对的,后来我这里两 ...

手册是这么写的,就是 139
Row Address: RA0 ~ RA12, Column Address: CA0 ~ CA8
Auto-precharge flag: A10
我这么写,就会覆盖原来的数据

saddam911 发表于 2013-12-25 01:12:47

本帖最后由 saddam911 于 2013-12-25 01:14 编辑

看不见 发表于 2013-12-21 21:03
哥哥,你在帮我看看,这个问题

这个应该不是手册写错了,好像是跟SDRAM的结构有关系,什么先组后列,还是先列后组,具体我也没搞明白那,不知楼主现在这块高明吧了没,
页: [1]
查看完整版本: lpc1788sdram 地址问题