如何防止溢出缓冲器在245 FIFO模式?
只有当TXE#引脚为逻辑0时,245 FIFO接口才能被写入。
该TXE#引脚成为逻辑1再变回逻辑0,当每个字节被锁定。
如果在PC上的应用程序从不读取任何数据在PC(64k字节)则芯片上的缓冲器将会被写满。
当缓冲器被写满时,TXE#引脚应保持在逻辑1,直到PC上的应用程序作读取然后腾出空间。
有些用户报告TXE#变回逻辑0,在一个短暂时期之后(实际上与延迟定时器(latency timer)匹配)。
这会导致数据丢失由于数据溢出缓冲器。
为了防止这种情况的发生在PC上,应用程序应设置控制流量的RTS_CTS作流量控制。
虽然硬件没有RTS/CTS引脚而驱动程序并不知道,但现在不得不监控特定的状态位(certain status bits), 使TXE#引脚保持在逻辑1,直到有空间可用为止。
FTDI如何处理USB暂停(suspend)?
USB暂停由USB主机告诉告诉外围设备进入暂停状态。
FTDI的驱动程序不强制FTxxx设备进入暂停状态。
如果USB数据总线空闲时间>3毫秒,USB主机应该将FTxxx设备进入暂停状态。
为了防止这种情况发生,应该在3毫秒以内都保有数据。这可以藉由发送伪数据(dummy data)来完成。
另一种隐性解决方法是设置等待计时器(latency timer)为2毫秒。这迫使每2毫秒返回两个byte的状态字节 (status bytes),从而产生足够的流量,以保持设备的清醒。
FTDI芯片如何作RTS / CTS的流量控制?
FTxxx的RTS#是输出引脚。它应该在UART链路的另一端被连接到该设备的CTS#输入引脚。
如果RTS#为逻辑0则表示FTxxx设备可以接受更多的数据在RXD引脚上。
如果RTS#为逻辑1则表明FTxxx设备无法接受更多的数据。
当芯片缓冲器剩下最后32个字节的空间时,RTS#改变其状态,如此有足够的时间让外部设备停止发送数据到ftxxx装置。
FTxxx的CTS#是输入引脚。它应该在UART链路的另一端被连接到该设备的RTS#输出引脚。
如果CTS#为逻辑0则表示该外部设备可以接受更多的数据,FTxxx将在TXD引脚上发送数据。
如果CTS#为逻辑1则指示该外部设备不能接受更多数据。FTxxx将在0〜3个字符内停止传输, 这取决于什么样的数据在缓冲器内。
这种潜在的3个字符溢出偶尔会出现问题。客户应意识到FTxxx是USB设备,而不是作为看到PC上的“一般”的RS232设备。 是以数据包为基础的操作装置,而不是一个字节为基础。
明眼人不用多说。RS232的电平移位装置(例如MAX232)不仅做电平移位,而且也将信号作反相。
|