打印
[STM32F1]

用FSMC控制外部SRAM有几个问题

[复制链接]
8116|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
夏阳的鱼|  楼主 | 2014-5-22 01:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天用stm32f103vet6的FSMC读写外部扩展RAM,遇见了几个问题,实在不知道该怎么解决,请高手指点指点。我说说我的几个疑问;
1.stm32f103vet6这个芯片是100脚的,FSMC的Bank1区的四个子分区由FSMC_NE[4:1]片选,但是引脚中的片选只有NE1,也就是PD7引脚。那么外部SRAM的片选就只能接PD7了,那么初始化FSMC结构体只能是这样:FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1,不知道说的对不对。
2.外部RAM是IS64LV51216,地址18位,数据16位。因为vet6这块芯片没有低16位地址线,所以低16位地址只能与数据线复用。那么在初始化FSMC结构体的复用模式必须使能,也就是这个ram只能用FSMC的复用模式来读写,因为其他模式无法提供正确的地址信号。那么扩展模式不使能FSMC_ExtendedMode_Disable。因为选了复用模式,就不能用扩展模式(ABCD)了,这些模式有各自独立的时序,不能混着用。不知道说的对不对。
3.我在实验过程中出现了两个现象,不知道什么原因:
(1)比如说我用FSMC在外部ram的某个地址上(假设为0x5a5a)写一个数(0x1110),然后再读取这个地址的数,串口显示出来的低三位总是1,也就是读出来0x1117,不管这个地址是多少,写的数据是多少,最后三位总是高电平,我用万用表测得ram上的地址引脚就是0x5a5a没有错,也就是说硬件连接不可能出错,我也认真检查过确实没错,不知道这是什么原因。(我考虑到了内部和外部地址应该移位,这个没问题)
(2)第二个问题:程序一:如果先在0x5a5a上写一个0x1110,然后读0x5a5a,接着再在0x5a60处写一个0xF0F0,然后再读取0x5a60,两次读出来的数分别是0x1117和0xF0F7,因为低三位总是高电平。程序二:连续写两次,再读两次。先在0x5a5a写一个0x1110,再在0x5a60处写0xF0F0,然后接着读0x5a5a和0x5a60,读出来的数分别是0x5a67和0xF0F7,也就是第一次读出来的数据是第二次写入时的地址,这个现象怎么解释。我觉得应该是时序的问题。

就这么多问题,请大家看看,看我哪里有错。补充一点:外部ram地址用两个74HC574锁存地址,锁存信号为FSMC的NADV信号,上升沿锁存地址。




沙发
zchong| | 2014-5-22 09:23 | 只看该作者
时序都搞到最大,看看是否有同样问题

使用特权

评论回复
板凳
夏阳的鱼|  楼主 | 2014-5-22 09:38 | 只看该作者
zchong 发表于 2014-5-22 09:23
时序都搞到最大,看看是否有同样问题

我说的前面两点都对吗,还有就是在平常的使用中时序都是都是很大吗。

使用特权

评论回复
地板
香水城| | 2014-5-23 13:45 | 只看该作者
第一个问题,理解正确。100引脚封装,FSMC只有只有Bank1的region1的片选(NE1),或者Bank2的片选(NCE2),二者是内部连在一起的。只能

第二个问题:100引脚封装,低16位地址信号和16位数据信号复用,因此设置成复用模式没错。对应库里的NORSRAMInit初始化来说,是【FSMC_DataAddressMux】这个成员置位。置于【FSMC_ExtendedMode】的设置,所谓“扩展模式”,我记得应该是指外部所连memory的“读”和“写”时序是否一致。

使用特权

评论回复
5
zh9454| | 2014-5-23 17:29 | 只看该作者
这个我也搞不懂  帮你顶一下

使用特权

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

本版积分规则

3

主题

17

帖子

0

粉丝