[STM32F4] 用FMC外扩SDRAM或者SRAM不需要内部时序等待吗?

[复制链接]
 楼主| kokoromi 发表于 2017-5-15 09:07 | 显示全部楼层 |阅读模式
这两天看FMC这块,其中关于外扩SRAM或者SDRAM这块有些疑问,比如外扩了SDRAM,SDRAM挂载在1区,在程序里读取SDRAM的数据:


1  uint32_t temp;
2  temp = *(uint32_t *)0xC000 0000;
3  if(temp > 100) temp = 0;


对于第二行代码,可能只需要几个时钟周期就执行完毕了,但是FMC控制时序将外部SDRAM中的数据读取出来并放到数据总线上需要的时间比执行刚才那个语句的时间长,如果没有等待机制的话,很有可能当程序执行到第三行的时候,实际数据还没有读过来,那岂不是会数据出错吗?


想知道这个问题到底是怎么解决的?

jekey 发表于 2017-5-15 10:21 | 显示全部楼层
当然是fsmc总线时序自动控制啊。设置fsmc总线时,可以设置等待周期!
 楼主| kokoromi 发表于 2017-5-16 15:53 | 显示全部楼层
jekey 发表于 2017-5-15 10:21
当然是fsmc总线时序自动控制啊。设置fsmc总线时,可以设置等待周期!

FMC自动控制的是外扩的SDRAM啊,配置FMC的时候都是参照SDRAM手册里的时序设置的,也就是说FMC是自动控制外部SDRAM的读写时序,但是怎么和 内部的代码执行相匹配呢?,就像我说的这个例子,内核执行第二行代码可能就需要几个周期就完事了,但是FMC控制时序操作SDRAM需要的时间基本是大于内核执行那行代码的时间的,处理器是怎么协调 "内核执行第二行代码的时间"  和 "FMC控制外部SDRAM读写时间" 这两个时间的?
zchong 发表于 2017-5-16 16:20 | 显示全部楼层
内核halt
jekey 发表于 2017-5-16 18:18 | 显示全部楼层
kokoromi 发表于 2017-5-16 15:53
FMC自动控制的是外扩的SDRAM啊,配置FMC的时候都是参照SDRAM手册里的时序设置的,也就是说FMC是自动控制 ...

流水线预取或都内核等待指令完成才执行。
1988020566 发表于 2017-5-16 23:48 | 显示全部楼层
没有时序等待不报错吗?
1988020566 发表于 2017-5-16 23:49 | 显示全部楼层
FSMC读取时序都是以控制时序。
yiy 发表于 2017-5-16 23:59 | 显示全部楼层
自动完成,楼主多虑
王紫豪 发表于 2017-5-17 14:47 | 显示全部楼层
你写的一条c指令,硬件上要有好多步骤来完成的,总线读写,是有一个“复杂”的逻辑的,包括你说的总线等待,执行完了,才会执行第三行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

344

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部