FIFO具体有什么作用

[复制链接]
 楼主| Fairchild2440 发表于 2011-4-5 18:41 | 显示全部楼层 |阅读模式
一般的数据采集卡为例,数据都是先通过AD采样单片机处理后送至FIFO,然后再用总线控制器从FIFO读取数据送到PC。那么FIFO的作用是什么呢?
如果每秒钟AD产生的数据大于总线每秒钟所能发送的数据,那么FIFO中的数据不是会溢出么。如果溢出了,AD还在产生数据怎么办?
如果每秒钟AD产生的数据小于总线每秒钟所能发送的数据,那么是不是没必要用FIFO了,反正产生的数据都能及时上传。
希望大家指点指点。
dqyubsh 发表于 2011-4-5 22:16 | 显示全部楼层
FIFO是提高速度用的,它可以绕过CPU,直接让主机和设备交换数据。
AD采集速度大于USB传输速度,数据在AD之后进行缓冲,比如放入另外的FIFO中,采用乒乓机制,它的FIFO满了(半满)才置入USB的FIFO。
AD多慢,FIFO也是必要的,如果16位AD数据从51CPU(68013)读进来,可能要ms级别,这显然是太慢了。实际的系统除了采集数据还有其它开销,你会觉得CPU永远是太慢太慢。(外设拖得CPU更慢,所以才有中断、DMA和FIFO)

而且,通常采集数据并不是一刻不停地采集数据,主机收到的数据也不是完全连续的。都是采集一段,传输一段,处理一段。相邻两次处理之间是有停顿的。
邪恶猛男 发表于 2011-4-13 15:42 | 显示全部楼层
FIFO让你AD一次传送很多个数据 还可以处理了之后给MCU FIFO可以让MCU处理不过来的数据先预备下
南极的问候 发表于 2015-8-17 14:41 | 显示全部楼层
Hu.Te 发表于 2016-7-5 09:17 | 显示全部楼层
恩。说的好。
数据缓冲就是为了平衡数据处理之间的不平衡而采用的。并非说谁快谁慢。
USB总线确实是需要一个时间点的,一帧的数据在USB2.0上时,125us,一个节点。
如果是Isochronous模式的话,取出的数据会比较大一些,不过也有可能会出现错误的机会。机制决定,如果是bulk型会要好一些吧。不过对实时性能要求高的话,还是需要FIFO的。(个人认为)
数据不可丢失。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

88

帖子

1

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