如何解决带有FTDI的D2XX接口的RTS / CTS流控制的正确形式
| 我正在浏览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?
就最佳实践而言,这是读写的最佳方法吗?
解决方法
正确的方法是始终将信号恢复为非活动状态。如果没有数据要立即发送,请清除RTS。
DTR通常用于指示链路上是否存在终端设备,因此,除非出现故障,否则它应始终保持活动状态。我不同意他们实施DTR的方式。这也假设您正在充当终端。
除非同时接收和发送时无法处理数据,否则可以将CTS信号保持为低电平,以便立即接收所有数据。
我的实际做法是忽略控制信号,并设置中断和/或DMA进行传输。除非您使用非常有限的CPU,否则不会有任何问题。
, RTS和DTR的声明对PC和FTDI芯片之间的通信没有影响,这纯粹是USB事务,它们是FTDI的指令,用于声明FTDI芯片与目标微型计算机之间连接中的相应线路。控制器/处理器。
因此,只有在您的硬件设计中实现它们后,它们才有意义。
PSTN通信调制解调器中使用DTR(数据终端就绪)来表示终端(或本例中的PC)已准备好进行通信。通过短暂地取消激活线路,它也用于“挂断”拨号连接。如果您的目标实现了DTR握手,则可能在这里断言其完整性。如果不是,则将忽略该信令,因此是良性的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。