使用FTDI的D2XX接口正确形成RTS / CTS流控制

时间:2011-05-31 21:36:39

标签: .net vb.net embedded serial-port

我正在浏览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?

就最佳实践而言,这是读写的最佳方式吗?

2 个答案:

答案 0 :(得分:2)

正确的方法是始终将信号返回到无效状态。如果您没有数据立即发送清除RTS。 DTR通常用于指示链路上是否存在终端设备,因此除非您身边出现故障,否则它应始终保持活动状态。我不同意他们实施DTR的方式。这也假定您作为终端运行。 如果在同时接收和发送时无法处理数据,则可以保持CTS信号为低电平,以便您立即接收所有数据。

我的实际做法是忽略控制信号并设置中断和/或DMA来进行传输。除非您使用非常有限的CPU,否则不会有任何问题。

答案 1 :(得分:1)

RTS和DTR的断言对PC和FTDI芯片之间的通信没有任何影响,这完全是USB事务,它们是指示FTDI在FTDI芯片和FTDI芯片之间的连接中断言相应线路的指令。目标微控制器/处理器。

因此,只有在硬件设计中实现它们才具有相关性。

在PSTN通信调制解调器中使用DTR(数据终端就绪)来指示终端(或在这种情况下为PC)准备好进行通信。它还用于通过简单地断言线路来“挂断”拨号连接。在目标实现DTR握手的情况下,可能会在此处声明完整性。如果没有,信号将被忽略,因此是良性的。