2012-01-03 7 views
1

RTSまたはCTS回線のステータスが変更されたときにRS232通信で何かに関する情報を誰とでも共有できますか? RS232通信では、まったく同じことが起こりますか?RS232ハンドシェイク - 詳細はどうなりますか?

私は、QtのQextSerialPortライブラリ経由でシリアルポートに接続するPCがAtmel AVRマイクロコントローラと通信するアプリケーションに取り組んでいます。マイクロコントローラは、内部割り込みをディスエーブルにするために一時的にUARTポートをシャットダウンする必要がある(ADCをチェックし、正確な時間間隔などを守る)必要があります。私は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

明るくて、ありがとうございます。私は、USARTがCTSの立ち上げ時に働いていたことを知らなかった。私はそれがトラックで(または現在のバイトを送信した後で)ほとんど停止したと仮定していた。これは私が時折見られるいくつかの他の奇妙な影響を説明するかもしれませんが、おそらく私が現在取り組んでいるものではありません。 –

関連する問題