Правильная форма управления потоком RTS / CTS с интерфейсом FTDI D2XX - PullRequest
1 голос
/ 01 июня 2011

Я просматривал пример кода на сайте 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?а затем снова установить его высоко?или я просто устанавливаю высокое значение при каждой отправке новых данных?Почему они устанавливают DTR, если управление потоком определено как RTS / CTS?

Что касается передового опыта, это лучший способ читать и писать?

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Правильный способ - всегда возвращать сигналы в неактивное состояние. Если у вас нет данных для отправки немедленно очистите RTS. DTR обычно используется для обозначения присутствия терминального оборудования на линии связи, поэтому оно всегда должно оставаться в активном состоянии, если только на вашей стороне не происходит сбой. Я не согласен с тем, как они реализовали свой DTR. Это также предполагает, что вы работаете как терминал. Если вы не можете обрабатывать данные при одновременном получении и передаче, вы можете поддерживать низкий уровень сигнала CTS, чтобы сразу получать все данные.

Моя настоящая практика заключается в том, чтобы игнорировать управляющие сигналы и устанавливать прерывания и / или DMA для выполнения передач. Если вы не используете очень ограниченный процессор, проблем не будет.

1 голос
/ 01 июня 2011

Утверждение RTS и DTR не влияет на связь между ПК и микросхемой FTDI, которая является чисто транзакцией USB, они являются инструкциями для FTDI, чтобы установить соответствующие линии в соединении между микросхемой FTDI и целевой микроконтроллер / процессор.

Следовательно, они актуальны только в том случае, если они реализованы в вашем оборудовании.

DTR (терминал данных готов) используется в модемах связи ТСОП для указания того, что терминал (или ПК в этом случае) готов к связи. Он также используется для «зависания» коммутируемого соединения путем краткого удаления линии. Это, вероятно, утверждается здесь для полноты в случае, если ваша цель реализует рукопожатие DTR. Если этого не произойдет, сигнализация будет проигнорирована, а значит, доброкачественная.

...