2011-05-31 100 views
1

我正在瀏覽FTDI網站上的示例代碼。打開設備和設定流量控制爲RTS /它們發送CTS和以下述方式接收數據後:使用FTDI的D2XX接口進行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

正確的方法是始終將信號返回到其非活動狀態。如果您沒有數據立即清除RTS。 DTR通常用於指示鏈路上存在終端設備,因此它應始終保持活動狀態,除非您身邊有故障。我不同意他們實施DTR的方式。這也假設你是作爲一個終端。 除非在同一時間接收和發送時無法處理數據,否則可以將CTS信號保持爲低電平,以便您立即收到所有數據。

我的實際做法是忽略控制信號和設置中斷和/或DMA進行傳輸。除非你使用的CPU非常有限,否則不會有任何問題。

+0

剛剛碰到這個:http://stackoverflow.com/q/957337/34989 – Gerhard 2011-06-01 06:34:33

+0

感謝您的信息。當你立刻說,你能以毫秒量化嗎?我們每秒接收/發送少量數據。我應該在每次發送後清除RTS嗎? – drinck 2011-06-01 16:52:16

+0

如果您有要發送的緩衝區中的數據,請發送它。如果你有一個空的緩衝區取消斷言。 – Gerhard 2011-06-02 06:16:33

1

RTS和DTR的斷言不影響PC和FTDI芯片之間的通信,FTDI芯片純粹是一個USB事務,它們是指令FTDI斷言FTDI芯片和FTDI芯片之間的連接中的對應線路目標微控制器/處理器。

因此,它們僅在硬件設計中實現時纔有意義。

DTR(數據終端準備就緒)用於PSTN通信調制解調器,以指示終端(在此情況下爲PC)已準備好進行通信。它也被用來暫時斷開線路來「掛斷」撥號連接。如果您的目標實現DTR握手,則可能在此處聲明完整性。如果沒有,信號將被忽略,所以是良性的。

相關問題