打印
[STM32F4]

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

[复制链接]
2233|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

使用特权

评论回复
5
jekey| | 2017-5-16 18:18 | 只看该作者
kokoromi 发表于 2017-5-16 15:53
FMC自动控制的是外扩的SDRAM啊,配置FMC的时候都是参照SDRAM手册里的时序设置的,也就是说FMC是自动控制 ...

流水线预取或都内核等待指令完成才执行。

使用特权

评论回复
6
1988020566| | 2017-5-16 23:48 | 只看该作者
没有时序等待不报错吗?

使用特权

评论回复
7
1988020566| | 2017-5-16 23:49 | 只看该作者
FSMC读取时序都是以控制时序。

使用特权

评论回复
8
yiy| | 2017-5-16 23:59 | 只看该作者
自动完成,楼主多虑

使用特权

评论回复
9
王紫豪| | 2017-5-17 14:47 | 只看该作者
你写的一条c指令,硬件上要有好多步骤来完成的,总线读写,是有一个“复杂”的逻辑的,包括你说的总线等待,执行完了,才会执行第三行。

使用特权

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

本版积分规则

111

主题

344

帖子

3

粉丝