FSMC驱动SRAM出现问题,请大佬们帮忙看看问题出在哪...

2019-07-20 02:50发布

先说电路。画板子的时候琢磨了一下既然是SRAM,地址和数据都随便接了只要读出来的跟写进去的一样那大家就当无事发生过。画到一半想起来不对数据线上还有LB和UB呢,只能在一个字节内瞎接。既然如此干脆一不做二不休LB UB也不要了,直接接地然后按字(word)访问。PSRAM的片选接在NE2上,同时NE1上接了一片LCD,RS是A1。这是硬件大概的情况。软件使用HAL库,CubeMX直接生成Keil工程。LCD已经调通无误,但是SRAM出现了问题。
QQ图片20190401002121.png QQ图片20190401002126.png
如图。testram是定义在0x64000000上的uint16_t数组。for循环预期的结果是01 00 03 02 05 04 07 06...(arm小端在前)....实际的结果是03 02 03 02 07 06 07 06.....
根据实际现象做出合理猜测,我觉得是地址线的A0被错误的驱动,导致读写奇数字的时候偶数字上的数据被覆盖。
然后此时又了解到16bit模式下HADDR上的地址会被右移....调试LCD的时候遇到过这个问题,但是时间比较久记不清了,又回去看了下原子哥的视频,确定移位发生HADDR上,与FSMC_A无关,不会造成A0不可用的问题。
为了排除这个因素,又做了一个测试。
QQ图片20190401002130.png
QQ图片20190401002133.png
这里修改了FSMC的配置,将SRAM位宽改为8b,相当于16位的SRAM高8位弃置不用,当作8位SRAM用。这样一来就不会有地址右移的问题。testram是定义在0x64000000上的uint8_t数组,预期结果是00 01 02 03 04 05 06.....实际结果是01 01 03 03 05 05 07 07....
我觉得这里的结果基本上可以证实前面A0有误的猜测,但是以我的经验无法分析出什么情况会导致这样一个现象。所以有请各位老司机帮忙分析一下。
(焊接没有问题,没有对地和对其他引脚的短路)




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
分析纯金
1楼-- · 2019-07-20 08:26
 精彩回答 2  元偷偷看……
分析纯金
2楼-- · 2019-07-20 12:52
尴尬。刚刚估计了一下数据的量级...RAM测试才写了256个字,而LCD的分辨率是480*272@16bpp...所以上文的波形图中最显著的pattern其实是LCD初始化产生的........前文说过LCD的RS线接在A1上,LCD控制器比较特殊,不过驱动也使用原子的程序修改来的,基址为0x60000002。这样寄存器写地址为10右移一位得1,此时A0=1,A1=0,LCD写入命令,RAM写地址为(2+2)右移一位得10,此时A0=0,A1=1,LCD写入数据
干掉了LCD驱动程序之后的波形如下,按图片顺序分别为A0,A1,A2,A3。比之前干净了很多,但仍然无法确定A1,A2,A3上第一个触发的信号是什么(16个脉冲),为什么A0上没有。但是可以确认A0并非无法动作....其实正确的测法应该是示波器开2个以上通道用NE2做触发一起测,但我现在只有一个探头,只能根据信号的模式进行猜测....
DS1Z_QuickPrint6.png
DS1Z_QuickPrint7.png
DS1Z_QuickPrint8.png
DS1Z_QuickPrint9.png

分析纯金
3楼-- · 2019-07-20 18:35
 精彩回答 2  元偷偷看……
分析纯金
4楼-- · 2019-07-20 22:49
 精彩回答 2  元偷偷看……

一周热门 更多>