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有误的猜测,但是以我的经验无法分析出什么情况会导致这样一个现象。所以有请各位老司机帮忙分析一下。
(焊接没有问题,没有对地和对其他引脚的短路)




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。