2009-04-03 14 views
3

私は既存のハードウェア製品の周辺にソフトウェアを設計しています。私は通信プロトコルを完全に制御していますが、デバイス検出を容易にする方法はわかりません。シリアルポートの設定を自動的に検出しますか?

デバイスは、実行時に検出する必要のある可能な構成の範囲(ボーレート、データビット、パリティビット、ストップビット)を持つことができます。どのような設定を使用しているかをソフトウェアが把握する最も簡単で信頼性の高い方法は何ですか?繰り返しますが、私は通信プロトコルを完全に制御していますので、私が望むあらゆるメカニズムを定義することができます。

答えて

3

これは全二重または半二重のデバイスですか?シリアルラインの両端で送信要求と送信クリアを監視できますか?シリアルラインはポイントツーポイント(RS-232など)かマルチドロップ(RS-485など)ですか?すでに接続されている他のデバイスと干渉し、新しく接続されたデバイスと交渉しようとしている場合は、(わずかながら)小さな違いになります。

リンクレイヤプロトコルをネゴシエートするモデムのようなハンドシェイクプロセスについて考えると、標準的なメッセージセットを使用して、通信の種類を記述し、もう一方の端から「ack」を待機します。あなたのケースでは、あなたのヘッドエンドがビットレートの範囲で生成し、デバイスからのACKを待つ「let's talk」標準メッセージを持つことをお勧めします。

また、デバイスの設定オプションの数を減らすことをお勧めします。可変データビット、パリティビット、ストップビットは無視してください。シリアル通信の世界は、もはや70年代のように不安定ではありません。 8データビット、パリティなし、1ストップビットを使用し、ビットレートを変更してください。メッセージの最後にあるCRCは、多くのエラーチェックを提供します。

+0

今私は全二重RS-232を見ていますが、RS-485は面白そうです。デュプレックスと制御要求/両端の送信クリアはどのような違いがありますか?必要な構成を使用して通信を開始し、切断せずにオンザフライで優先構成に変更できますか? – Gili

+0

全二重はほぼ同時にプロトコルデータユニット(メッセージ)を送受信しています。 RTS/CTSは、1ビットのメッセージのように、メッセージ交換開始/継続信号をシグナリングする簡単な方法です。エラー率が高くなりすぎる前に、リンクが処理できる速度までゆっくりと立ち上がり、絶対に始めることができます。 – Joel

関連する問題