2012-01-03 72 views
1

任何人都可以與我分享什麼正確發生(或意圖發生......)在RS232通信時,當RTS或CTS線的狀態改變的任何信息?RS232握手 - 詳細發生了什麼?

我正在研究一個應用程序,在該應用程序中,通過Qt的QextSerialPort庫連接到串行端口的PC與Atmel AVR微控制器進行通信。有時微控制器必須做些事情(檢查ADC,時間精確的時間間隔等),要求它禁用其內部中斷,並因此暫時關閉其UART端口。我正在使用RTS/CTS握手信號,以便AVR在將要通過將其RTS線路拉高來關閉其端口時向PC發出信號,並通過再次使RTS變爲低電平來通知重新打開端口。

基本上這個功能很好,但是我仍然不清楚如果RTS設置爲高電平而在通過任一方向傳輸的中途有一個字節時會發生什麼。在AVR方面,我可以在很低的水平上控制事物,但在PC端,我只是將QextSerialPort置於硬件流控制模式,這使得它可以執行底層的Windows功能。我想知道這裏的行爲不匹配可能是我在傳輸中偶然出現的一些故障的解釋。

回答

0

AFIAK,只有在字符之間的「空閒時間」內,RTS行才能在字節傳輸過程中被聲明。

問題是,握手幾乎從未正確執行。 Windows 應該符合標準(或維基百科條目),但我無法證實這一點。

1

不,這很麻煩。 RTS/CTS握手由驅動程序執行,而不是UART。當CTS關閉時,它會停止將字節寫入發送器FIFO。你將會得到飛行中的字節以及FIFO中仍然可以傳輸的任何信息。如果接收器FIFO不夠大並且中斷關閉時間過長,這肯定會出錯。 PC端的FIFO爲16字節,取決於硬件。不知道AVR,你沒有提到一個模型。

一定要在AVR端執行緩衝區溢出檢查來診斷這種事故。降低波特率是一種便宜的解決方法。

+0

這是照亮,謝謝你;我不知道當CTS上線時USART繼續工作,我認爲它只是在它的軌道上停下來(或者最多傳輸了當前字節後)。這也許可以解釋我偶爾看到的其他一些奇怪的效果,雖然也許不是我現在正在處理的那個。 – 2012-01-03 22:12:48