打印
[STM32F4]

STM32F439 SDRAM和NE2片选一起使用,就出错

[复制链接]
6782|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
    您好!
现在,我们使用的芯片是ST公司的STM32F439IG,在使用过程中,发现有下面的问题,烦请各位工程师帮我分析,如何去解决。
        具体的图纸和源代码请见附件。
         程序使用到的硬件资源包括芯片内部的SRAM(起始地址:0x20000000)、外扩WINBOND公司的SDRAM(型号:W9825G6JH,容量:,4M words*4 banks*16bits,起始地址:0xc0000000)、NE2片选外部SRAM设备(起始地址:0x64000000)、芯片自带的液晶屏控制器(驱动3.5寸的320*24016位色的LCD)。
程序MAIN函数的执行过程是:先初始化SDRAM、FMC、内部LCD控制器的硬件管脚和时序,然后往SDRAM送固定的数据。存放到SDRAM的固定数据是图像的8位黑白亮度信号。接着,循环从SDRAM中取数据,每次读取一个字节,并把它转换为16位的LCD数据,并送LCD上去显示。在LCD上一直循环显示SDRAM中存放的固定数据。这样操作没有问题。如果把这16位的LCD数据,同时送到NE2片选,LCD上就会显示横道的干扰条纹。干扰条纹的位置在变化,SDRAM中的数据是固定的,是不应该出现一些随机的干扰条纹的。
为此,在程序中做了个测试,2次读取SDRAM中的数据,如果把这16位的LCD数据,送到LCD、NE2片选,就会发生2次读到的SDRAM同一地址的数据不相同。如果16位的LCD数据只送LCD,不送NE2片选,2次读到的SDRAM同一地址的数据相同。
部分程序的代码见下:
j=addro[i+320*m]; //第一次从SDRAM读数
k=addro[i+320*m]; //第二次从SDRAM读数
if (j!=k)
{
j=k; //如果没有LCD的话,可以在此设置断点,观察程序执行情况
}
上面就是我说的问题,麻烦各位工程师帮我分析问题,解决问题。
非常感谢!
                                          
      

问题描述.zip

300.33 KB

问题描述

CODE.zip

6.39 KB

源代码

图纸.pdf

292.09 KB

图纸

沙发
guozhiyong|  楼主 | 2014-9-7 10:44 | 只看该作者
有工程师知道我的问题吗?帮我分析分析。谢谢了!

使用特权

评论回复
板凳
搞IT的| | 2014-9-8 22:16 | 只看该作者
帮忙顶一个!!

使用特权

评论回复
地板
guozhiyong|  楼主 | 2014-9-10 15:04 | 只看该作者
烦请各位高手看看我的问题,我已经折腾快一个月了!麻烦各位高手给我提点建议或测试的思路。谢谢了!

使用特权

评论回复
5
HORSE7812| | 2014-9-10 15:21 | 只看该作者
顶起

使用特权

评论回复
6
guozhiyong|  楼主 | 2014-9-11 10:48 | 只看该作者
谢谢帮顶起的各位高手!!!

使用特权

评论回复
7
guozhiyong|  楼主 | 2014-9-16 09:04 | 只看该作者
还得各位高手关注一下我的问题。这个问题是芯片的BUG,还是我的程序哪儿设置不对?另外我的编译器是KEIL5,和这个编译器有关吗?谢谢高手们!

使用特权

评论回复
8
Rain_King| | 2014-9-16 09:14 | 只看该作者
你的NE2和SDRAM是共用的脚???

使用特权

评论回复
9
Rain_King| | 2014-9-16 09:31 | 只看该作者
我看了一下你的原理图和程序,还有我由于只用FMC接一个SDRAM,就是说没有复用过,我看你有复用....所以我猜测了一下,FMC使用的时候,貌似脚只能工作在一个芯片上,直接用地址的话,他可以直接自动片选么???我看你的程序是将SDRAM地址和SRAM的地址赋值后,就直接开始写数据,读数据了,这个过程,FMC会自动实现片选么??不是应该人工使能一个,静止另一个,在开始的么???以上仅仅是猜想,因为我在使用FMC的时候,发现没有自动片选的这一个选择.....

使用特权

评论回复
10
Rain_King| | 2014-9-16 09:35 | 只看该作者
如果我猜测的没错的话,那肯定读取数据是随机的啊.........还有为啥LCD会有莫名的显示了,你的LCD肯定是用的RGB接口,使用了LTDC了....这个就很好解释了..仅仅是猜测,我也没有复用过

使用特权

评论回复
11
guozhiyong|  楼主 | 2014-9-16 22:02 | 只看该作者
首先非常感谢Rain_King,您对我问题给与了太多的关注和解答,多谢了!

使用特权

评论回复
12
guozhiyong|  楼主 | 2014-9-16 22:03 | 只看该作者
你的NE2和SDRAM是共用的脚???

NE2是外部类似SRAM设备地址的片选,是静态的,SDRAM是动态的。
NE2和SDRAM共用了数据线和部分地址线,但读、写等控制信号线是独立的。

使用特权

评论回复
13
guozhiyong|  楼主 | 2014-9-16 22:06 | 只看该作者
Rain_King的第二个答复。我看了一下你的原理图和程序,还有我由于只用FMC接一个SDRAM,就是说没有复用过,我看你有复用....所以我猜测了一下,FMC使用的时候,貌似脚只能工作在一个芯片上,直接用地址的话,他可以直接自动片选么???我看你的程序是将SDRAM地址和SRAM的地址赋值后,就直接开始写数据,读数据了,这个过程,FMC会自动实现片选么??不是应该人工使能一个,静止另一个,在开始的么???以上仅仅是猜想,因为我在使用FMC的时候,发现没有自动片选的这一个选择.....

对,是的,我的FMC了接一个动态的SDRAM设备和一个静态的NE2片选外部类似SRAM的设备。NE2和SDRAM虽然共用了数据线和部分地址线,但是它们的地址范围是不一样的。NE2地址:0x64000000,SDRAM地址:0xc0000000。这样,如果STM32F4输出不同的地址,应该会实现不同的片选,选择对应地址范围的设备去工作。我以前用过SAMSUNG公司的ARM9芯片S3C2440,就是这样使用的。您说的通过人工干预,使能一个,禁止一个,也是一个测试的办法和思路,我去试试,谢谢了。

使用特权

评论回复
14
guozhiyong|  楼主 | 2014-9-16 22:08 | 只看该作者
Rain_King的第三个答复。
如果我猜测的没错的话,那肯定读取数据是随机的啊.........还有为啥LCD会有莫名的显示了,你的LCD肯定是用的RGB接口,使用了LTDC了....这个就很好解释了..仅仅是猜测,我也没有复用过

数据不是随机的,程序执行过程中,先初始化SDRAM、FMC、内部LCD控制器的硬件管脚和时序,然后往SDRAM送固定的数组数据。 SDRAM内部是固定的数组数据。我的LCD用的是RGB接口,是的,使用了LTDC了。是我使用了LCD,容易观察到SDRAM中数据变化的情况。如果从SDRAM中读数据,不送NE2片选,送LCD,LCD显示的固定的图像,因为SDRAM内部是固定的数组数据。如果从SDRAM中读数据,送NE2片选,送LCD,LCD显示的是带干扰横条纹的图像,读SDRAM内部的数据有变动。测试发现同时读2次SDRAM同一地址的数据,有时还不相同。

使用特权

评论回复
15
Rain_King| | 2014-9-16 23:56 | 只看该作者
本帖最后由 Rain_King 于 2014-9-16 23:57 编辑

我找到资料, 我原先的猜测是对的....附上图片:

这里就说了:FMC 一次只能访问一个外部器件,这里的一次,应该是使能一个的意思,因为单片机本身就是一句话一句话执行,没有同时执行两句话,所以,应该是一次只能访问一个器件;最后,要是我理解错了这句话了,原谅一下.....

使用特权

评论回复
16
Rain_King| | 2014-9-17 08:09 | 只看该作者
对了,现在还有点问题就是,由于你的LCD用SDRAM,你很了解RGB接口的工作原理么;我不是很了解,貌似是映射关系;如果禁止掉SDRAM,显示屏会不会出问题....你应该明白我意思....

使用特权

评论回复
17
honami520| | 2014-9-17 16:12 | 只看该作者
439禁止掉了SDRAM,LCD没有现存,还能刷新吗?

使用特权

评论回复
18
guozhiyong|  楼主 | 2014-9-22 09:05 | 只看该作者
前2天出差了,也没回复大家。非常感谢Rain_King和honami520对我问题的关注。谢谢了!

使用特权

评论回复
19
Rain_King| | 2014-9-22 10:18 | 只看该作者
guozhiyong 发表于 2014-9-22 09:05
前2天出差了,也没回复大家。非常感谢Rain_King和honami520对我问题的关注。谢谢了! ...

你这个最后怎么解决了啊....使能一个的话,LCD工作还正常么....

使用特权

评论回复
20
guozhiyong|  楼主 | 2014-9-22 14:53 | 只看该作者
Rain_King,您好!我现在还没解决,正在试验如何关闭SDRAM后,SDRAM以前存储的数据还不能丢失。测试思路还是您说的,使能一个,关闭一个。

使用特权

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

本版积分规则

8

主题

41

帖子

0

粉丝