【问题标题】:Correct form of RTS/CTS Flow Control with FTDI's D2XX Interface使用 FTDI 的 D2XX 接口的 RTS/CTS 流控制的正确形式
【发布时间】:2011-05-31 21:36:38
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的信息。当您立即说时,您能以毫秒为单位进行量化吗?我们每秒接收/传输少量数据。每次发送后我应该清除 RTS 吗?
    • 如果缓冲区中有数据要发送,请发送。如果您有一个空缓冲区取消断言。
    【解决方案2】:

    RTS 和 DTR 的断言对 PC 和 FTDI 芯片之间的通信没有影响,纯粹是一个 USB 事务,它们是对 FTDI 的指令,用于断言 FTDI 芯片和 FTDI 芯片之间的连接中的相应线路目标微控制器/处理器。

    因此,它们只有在您的硬件设计中实现时才相关。

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

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多