我正在浏览FTDI网站上的示例代码。打开设备并将流量控制设置为RTS / CTS后,它们以下列方式发送和接收数据:
' Set RTS
FT_Status = FT_SetRts(FT_Handle)
If FT_Status <> FT_OK Then
Exit Sub
End If
' Set DTR
FT_Status = FT_SetDtr(FT_Handle)
If FT_Status <> FT_OK Then
Exit Sub
End If
' Write string data to device
FT_Status = FT_Write_String(FT_Handle, TextBox4.Text, Len(TextBox4.Text), BytesWritten)
If FT_Status <> FT_OK Then
Exit Sub
End If
Sleep(100)
' Get number of bytes waiting to be read
FT_Status = FT_GetQueueStatus(FT_Handle, FT_RxQ_Bytes)
If FT_Status <> FT_OK Then
Exit Sub
End If
' Read number of bytes waiting
TempStringData = Space(FT_RxQ_Bytes + 1)
FT_Status = FT_Read_String(FT_Handle, TempStringData, FT_RxQ_Bytes, BytesRead)
If FT_Status <> FT_OK Then
Exit Sub
End If
' Close device
FT_Status = FT_Close(FT_Handle)
If FT_Status <> FT_OK Then
Exit Sub
End If
基本上他们设置了RTS,DTR,然后将数据写入设备。
这是对的吗?如果我多次向设备发送,我是否需要每次都清除RTS?然后再把它设置得高?或者我每次发送新数据时都将其设置为高?如果将流量控制定义为RTS / CTS,他们为什么要设置DTR?
就最佳实践而言,这是读写的最佳方式吗?
答案 0 :(得分:2)
正确的方法是始终将信号返回到无效状态。如果您没有数据立即发送清除RTS。 DTR通常用于指示链路上是否存在终端设备,因此除非您身边出现故障,否则它应始终保持活动状态。我不同意他们实施DTR的方式。这也假定您作为终端运行。 如果在同时接收和发送时无法处理数据,则可以保持CTS信号为低电平,以便您立即接收所有数据。
我的实际做法是忽略控制信号并设置中断和/或DMA来进行传输。除非您使用非常有限的CPU,否则不会有任何问题。
答案 1 :(得分:1)
RTS和DTR的断言对PC和FTDI芯片之间的通信没有任何影响,这完全是USB事务,它们是指示FTDI在FTDI芯片和FTDI芯片之间的连接中断言相应线路的指令。目标微控制器/处理器。
因此,只有在硬件设计中实现它们才具有相关性。
在PSTN通信调制解调器中使用DTR(数据终端就绪)来指示终端(或在这种情况下为PC)准备好进行通信。它还用于通过简单地断言线路来“挂断”拨号连接。在目标实现DTR握手的情况下,可能会在此处声明完整性。如果没有,信号将被忽略,因此是良性的。