搜索
bottom↓
回复: 43

真的得为自己的粗心大意买单(关于SRAM电压问题)【恢复】

[复制链接]

出0入0汤圆

发表于 2009-1-11 15:48:33 | 显示全部楼层 |阅读模式
最近调CPLD+SRAM+TFT,板子还是ppa2001送的那块,各器件型号,电压范围为:



CPLD---EMP570T144C5    :2.5V/3.3V内核电压;1.5V/1.8V/2.5/3.3V的IO电压;

SRAM---ISSI61LV25616   :3.3V(+10%;-5%);

TFT----LQ043T3DX02     :2.5V(2.3-3.3V);





因为不想用多电源系统,结合手上的LDO把工作电压选在了3V

(当时看错一个地方就是以为SRAM的工作电源是3.3V +/-10%,当时还计算过3V刚刚好...)



为了尽可能提供显存访问速度,对SRAM的操作均是单周期(即读和写1周期可完成),这样可以减少CPLD主频率和电源消耗;



结果调试起来就出问题了,症状为MCU(或ARM)通过总线写SRAM的时候不相干的地址总会出现雪花.



比如我写这个地址结果另外一些地方的数据同时也随机的发生了变化,读出SRAM发现那个地方的数据确实被异常改写了...



因为正常写的地方是写入了数据的,所以怀疑:



1.WR上升沿的时候地址线不稳;

2.单周器时序不能满足对SRAM的访问;

3.CPLD主频太高了,54MHZ的,其实27MHZ就够了;



以上都做了验证,还是一样.



总线接口也改了好多种方式,地址增量也那掉过,主要是尽能缩小故障的范围.无论怎样都还是解决不了.但问题缩小到CPLD写SRAM这一块了.



想来想去只可能是硬件问题了,于时在所有IC的电源脚附近又加了n多滤波电容,还是不行.



今天突然想到会不会是SRAM自身问题,但SRAM不象EEPROM身的,坏的可能性非常小的.



于时细看datasheet便发现了SRAM最低工作电压为3.3-5%(3.135V),立马从ARM开发板上飞个3.3V给系统......

呵呵,OK了.



真得为自己的粗心买单...

当时瞄了一眼以为是SRAM电源范围是+/-10%的,把主要重点都放在时序上了.



结果就出了这么个问题,还弄得把CPLD程序都改了个底朝天.

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-1-11 15:55:39 | 显示全部楼层
学习了,没想到SRAM对供电电压这么敏感

出0入0汤圆

 楼主| 发表于 2009-1-11 16:13:02 | 显示全部楼层
应该是写操作的时候内部地址译码不稳定,地址发生跳变把其他地方改写了,单纯SRAM的数据保持电压还是非常低的.

出280入168汤圆

发表于 2009-1-11 16:19:51 | 显示全部楼层
SRAM 的电压和工作速度密切相关, 就算降到 3V 工作, 只要将速度调的很低, 还是能正常工作的.

出0入0汤圆

 楼主| 发表于 2009-1-11 16:25:23 | 显示全部楼层
【3楼】 chunjiu:

3V已经降到厂家推荐的极限之下了,所以即使稳定还是不可取(就算厂家-5%是个保守值).



另外我把主频率降低1倍(27MHZ),时序降低1倍(13.5MHZ),这个只有100MHZ的7.5分之一左右.问题依旧.

出0入0汤圆

 楼主| 发表于 2009-1-11 16:31:21 | 显示全部楼层


 (原文件名:sram.GIF) 



可以看出12ns的是可以+/-10%,而我使用的10ns的则不能.



和速度相关的说法还是成立的,但可能3V已经是极限之下了.

出0入0汤圆

发表于 2009-1-11 17:36:31 | 显示全部楼层
我觉得调整读写时序能够解决你的问题。



曾经在调试 SRAM 于 DSP 配合的时候碰到过类似问题,不过我的电压是 3.3V。

出0入0汤圆

 楼主| 发表于 2009-1-11 17:53:19 | 显示全部楼层
我现在问题解决了:

我的时序是这样一来的,OE,CE,LB,UB直接地,



写:WR=0,ADD=写地址,DB=写数据(总线输出),第二周期完成了,可做下一步的事(暂时没考虑连写);



读:WR=1,ADD=读地址,DB=高阻,第二周期读出DB上的数据同时做下一步事情.



连读时只要改变地址+读DB&改地址+读DB&改地址....就好了

出0入0汤圆

 楼主| 发表于 2009-1-12 23:30:17 | 显示全部楼层
更正一下,之前的结论是错误的.

"【3楼】 chunjiu"和"【6楼】 avr-qq 高级工程叁"是正确的.





问题确实出现在时序上,和电压无关,上3.3V后只是问题是少了90%以上,当长时间刷SRAM也会发现同样问题.



我把写SRAM的时序贴出来:



 (原文件名:write.GIF) 

图上可以看出WE=0后SRAM的DB会维持一个时间的输出.问题就出在这里了.



写SRAM通常是通过状态机实现.

在写数据时刻:

   ADD=写地址,

   DB_BUS=写数据,

   DB_BUS=输出,

   WE=0;

而这时SRAM的DB口还处于输出状态,会持续输出5ns,这个时间和CPLD的DB口输出打架,造成冲突.

(SRAM由空闲转入写则无这个问题,只会出现在读SRAM状态下直接切换到写).





至于加大电源就好些就比较好理解了.



我现在的解决方法也很简单.

原来为:assign sram_db = (sram_db_out_oe) ? sram_db_out:16'hz;

改为  :assign sram_db = (sram_db_out_oe && !clk) ?sram_db_out:16'hz;



时钟54MHZ,半周期9ns,可以躲过5ns的输出状态,只让在写周期的后半周期输出总线数据.

出0入0汤圆

发表于 2009-1-13 09:15:07 | 显示全部楼层
为什么不直接通过CPU写SRAM 呢? 谢谢

出0入0汤圆

 楼主| 发表于 2009-1-13 13:31:26 | 显示全部楼层
SRAM担任的是显存,得时刻从里面读出数据不断送到LCD(27MB/S),不刷新LCD就没显示了.



所以不能使用CPU读

出0入0汤圆

 楼主| 发表于 2009-1-13 13:38:08 | 显示全部楼层
按之前的思路降低多少频率都不能解决,



因为每次都是ADD,DB,WE同时操作,必然冲突...



现在54M持续读写一天了没有问题

出0入0汤圆

发表于 2009-6-4 23:16:28 | 显示全部楼层
学习下!

出0入0汤圆

发表于 2009-6-5 13:27:54 | 显示全部楼层
学习了

出0入8汤圆

发表于 2009-6-5 15:00:11 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-6-12 22:57:34 | 显示全部楼层
学习了,之前没碰到类似的问题,纯属侥幸。

出50入255汤圆

发表于 2009-6-12 23:52:12 | 显示全部楼层
关于电压,我也是吃了大亏的。
包括电压范围,3.3V/5.0V的匹配等,粗心大意,造成了很大的问题。
幸好后来找了一个简便的解决办法,否则,就可能破产了!

出0入0汤圆

发表于 2009-6-13 00:09:06 | 显示全部楼层
谢谢提醒,正在做板子中

出0入0汤圆

 楼主| 发表于 2009-6-13 00:22:17 | 显示全部楼层
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................


发现好多人不看帖子跟进的??????

出0入0汤圆

 楼主| 发表于 2009-6-13 00:25:28 | 显示全部楼层
请阿莫锁住此贴,不然跟长了后面来的又不知道了

出0入0汤圆

发表于 2009-6-13 01:04:56 | 显示全部楼层
恩,知道了~~~~~

出0入0汤圆

发表于 2009-6-14 15:16:42 | 显示全部楼层
学习了!感受到了诸位的求是精神!

出0入0汤圆

发表于 2009-7-10 10:53:47 | 显示全部楼层
to【7楼】 Oliver大侠:
  我也在搞TFT+CPLD这个东东,对于您对SRAM的操作均是单周期的这个问题我想请教一下,我用的是50Mhz时钟,我想在一个时钟周期(20ns)读一次,连续读。我的时序也是和您一样的,OE,CE,LB,UB直接地, 可是读出来的时候就出现问题了,问题是这样的,我向sram中写入不同的颜色,写入是这样的,写完一帧需要的颜色后在从0开始写另一种颜色,但是出现的问题是当我一个时钟周期(20ns)读一次时,就出现的是很规律的竖条,竖条的显示是每三个点是当前显示的颜色然后一个点是要下一屏显示的颜色,然后重复,就这样形成了规律的竖条,但是我要是两个周期去读的话,就正常了。我现在怀疑的是送完地址后应该延时10ns再读数据,可是我怎么才能延时10ns呢?也 不知道我分析的正确不,您能帮我修改一下吗?谢谢啊。我折腾好几天了呵呵
always @(posedge clk)              //开始控制读写RAM和PSP数据发送函数
begin
                if(DISP)
                        begin
                                case(start)
        0:
                                begin
                                        oe=0;WRoe=0;
                                        WE=1;
                                        RADDER<=RADDER+1;        //addc0
                                        start=1;
                                        RamB0<=RamData;         //datab0
                                end  

                        1:
                                begin
                                        oe=0;WRoe=0;
                                        WE=1;
                                        RADDER<=RADDER+1;        //addc0
                                        start=0;
                                        RamC0<=RamData;         //datab0
                                end
end
我用两周期读时和您下面说的好像一样。  
写:WR=0,ADD=写地址,DB=写数据(总线输出),第二周期完成了,可做下一步的事(暂时没考虑连写);

读:WR=1,ADD=读地址,DB=高阻,第二周期读出DB上的数据同时做下一步事情.

连读时只要改变地址+读DB&改地址+读DB&改地址....就好了

出0入0汤圆

发表于 2009-7-18 10:44:33 | 显示全部楼层
mark,用的时候来研究一下

出0入0汤圆

发表于 2010-5-7 09:51:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-14 21:32:49 | 显示全部楼层
标记!

出0入0汤圆

发表于 2010-6-16 16:34:21 | 显示全部楼层
(SRAM由空闲转入写则无这个问题,只会出现在读SRAM状态下直接切换到写).
----------------------------------------
如果一直读呢

出0入0汤圆

发表于 2010-6-24 11:46:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-31 11:51:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-31 16:32:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-31 16:52:16 | 显示全部楼层
学习了

出0入0汤圆

发表于 2010-7-31 20:23:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-1 12:33:40 | 显示全部楼层
很好

出0入0汤圆

发表于 2010-8-31 11:49:01 | 显示全部楼层
make

出0入18汤圆

发表于 2010-9-8 15:31:57 | 显示全部楼层
哈哈哈

出0入0汤圆

发表于 2010-9-8 15:54:13 | 显示全部楼层
好贴!

把8楼更新到1楼吧,马虎看帖的还是不少的~~~

出0入0汤圆

发表于 2010-9-8 17:15:38 | 显示全部楼层
虽然来得晚,不过我想问一下,LZ的双向IO数据是怎么实实现的呢!本人做的时候双向IO上是怎么都没有数据的!真汗啊!

出0入0汤圆

发表于 2010-9-15 20:43:30 | 显示全部楼层
路过学习

出0入0汤圆

发表于 2010-12-28 17:48:54 | 显示全部楼层
谢谢你的提醒

出0入0汤圆

发表于 2010-12-28 21:06:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-30 15:21:01 | 显示全部楼层
回复【37楼】TigerRay  
-----------------------------------------------------------------------

呵呵,可以使用inout啊,不知道你问的是不是这个层面的..

出0入0汤圆

发表于 2010-12-31 15:09:26 | 显示全部楼层
学习了

出0入0汤圆

发表于 2010-12-31 15:58:13 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表