真的得为自己的粗心大意买单(关于SRAM电压问题)【恢复】
最近调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程序都改了个底朝天. 学习了,没想到SRAM对供电电压这么敏感 应该是写操作的时候内部地址译码不稳定,地址发生跳变把其他地方改写了,单纯SRAM的数据保持电压还是非常低的. SRAM 的电压和工作速度密切相关, 就算降到 3V 工作, 只要将速度调的很低, 还是能正常工作的. 【3楼】 chunjiu:
3V已经降到厂家推荐的极限之下了,所以即使稳定还是不可取(就算厂家-5%是个保守值).
另外我把主频率降低1倍(27MHZ),时序降低1倍(13.5MHZ),这个只有100MHZ的7.5分之一左右.问题依旧. http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_582124.GIF
(原文件名:sram.GIF)
可以看出12ns的是可以+/-10%,而我使用的10ns的则不能.
和速度相关的说法还是成立的,但可能3V已经是极限之下了. 我觉得调整读写时序能够解决你的问题。
曾经在调试 SRAM 于 DSP 配合的时候碰到过类似问题,不过我的电压是 3.3V。 我现在问题解决了:
我的时序是这样一来的,OE,CE,LB,UB直接地,
写:WR=0,ADD=写地址,DB=写数据(总线输出),第二周期完成了,可做下一步的事(暂时没考虑连写);
读:WR=1,ADD=读地址,DB=高阻,第二周期读出DB上的数据同时做下一步事情.
连读时只要改变地址+读DB&改地址+读DB&改地址....就好了 更正一下,之前的结论是错误的.
"【3楼】 chunjiu"和"【6楼】 avr-qq 高级工程叁"是正确的.
问题确实出现在时序上,和电压无关,上3.3V后只是问题是少了90%以上,当长时间刷SRAM也会发现同样问题.
我把写SRAM的时序贴出来:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_584364.GIF
(原文件名: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的输出状态,只让在写周期的后半周期输出总线数据. 为什么不直接通过CPU写SRAM 呢? 谢谢 SRAM担任的是显存,得时刻从里面读出数据不断送到LCD(27MB/S),不刷新LCD就没显示了.
所以不能使用CPU读 按之前的思路降低多少频率都不能解决,
因为每次都是ADD,DB,WE同时操作,必然冲突...
现在54M持续读写一天了没有问题 学习下! 学习了 学习 学习了,之前没碰到类似的问题,纯属侥幸。 关于电压,我也是吃了大亏的。
包括电压范围,3.3V/5.0V的匹配等,粗心大意,造成了很大的问题。
幸好后来找了一个简便的解决办法,否则,就可能破产了! 谢谢提醒,正在做板子中 再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
再次申明:次贴问题绝非电压问题.......................
发现好多人不看帖子跟进的?????? 请阿莫锁住此贴,不然跟长了后面来的又不知道了 恩,知道了~~~~~ 学习了!感受到了诸位的求是精神! 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&改地址....就好了 mark,用的时候来研究一下 mark 标记! (SRAM由空闲转入写则无这个问题,只会出现在读SRAM状态下直接切换到写).
----------------------------------------
如果一直读呢 mark mark mark 学习了 mark 很好 make 哈哈哈 好贴!
把8楼更新到1楼吧,马虎看帖的还是不少的~~~ 虽然来得晚,不过我想问一下,LZ的双向IO数据是怎么实实现的呢!本人做的时候双向IO上是怎么都没有数据的!真汗啊! 路过学习 谢谢你的提醒 mark 回复【37楼】TigerRay
-----------------------------------------------------------------------
呵呵,可以使用inout啊,不知道你问的是不是这个层面的.. 学习了 mark
页:
[1]