UARTのCTS・RTSについて

RX231を使用しています。

UARTを使うにあたり、CTS/RTS機能を使いたく調べたところ、どちらか一方しか選択できないとわかりました。

単純な疑問なのですが、どうして一方しか使えないような仕様になっているのか、理由が知りたいのです。

ハードフロー制御をあまり使ったことがないのですが、どちらか一方で足りるものなのでしょうか。

どうして。。。

Parents
  • マニュアルを見てみました。

    >どうして一方しか使えないような仕様になっているのか、理由が知りたいのです。

    ポートが兼用になってますね。ピン数が足りないからでしょう。

    >ハードフロー制御をあまり使ったことがないのですが、どちらか一方で足りるものなのでしょうか。

    わわいさんの回答の通りです。CTSはハード的に送信を止めます。ですから汎用ポートで代用は出来ません。
    中にはCTSが単なる入力ポートで、ポートを読んでユーザプログラムで止めると言うCPUも有るかも知れませんが。

     8251と言うLSIが有ったけど、RTSは単なるポートとして通信とは関係の無い用途にも使えました。
     逆にRTSと言う端子が無くても、汎用ポートをRTSとして使う事も出来ます。

     CTSを使う時は注意して下さい。CTSがOFFで送信出来ないのに、それに気付かずデバッグ時間を潰さないように。
Reply
  • マニュアルを見てみました。

    >どうして一方しか使えないような仕様になっているのか、理由が知りたいのです。

    ポートが兼用になってますね。ピン数が足りないからでしょう。

    >ハードフロー制御をあまり使ったことがないのですが、どちらか一方で足りるものなのでしょうか。

    わわいさんの回答の通りです。CTSはハード的に送信を止めます。ですから汎用ポートで代用は出来ません。
    中にはCTSが単なる入力ポートで、ポートを読んでユーザプログラムで止めると言うCPUも有るかも知れませんが。

     8251と言うLSIが有ったけど、RTSは単なるポートとして通信とは関係の無い用途にも使えました。
     逆にRTSと言う端子が無くても、汎用ポートをRTSとして使う事も出来ます。

     CTSを使う時は注意して下さい。CTSがOFFで送信出来ないのに、それに気付かずデバッグ時間を潰さないように。
Children
  • チョコです。
    >8251と言うLSIが有ったけど、
    懐かしい名前ですね。CTS以外の3本の制御信号は汎用のポートとして使っていました。CTSに対応する
    RTSはRxRDYを使っていた記憶があります。これでも,最悪で1キャラクタ分は送信されてくる可能性が
    あったので,外部にF/Fを付けて,スタート・ビットでRTSをオフしたこともありました。

    また,CTSで送信を禁止してから実際に送信しなくなるまでにどれだけのキャラクタが送信されるかは,
    個々のセットで異なります。
    (8251の改良版の8251Aの初期のバージョンではCTSが変化すると,同じデータが2回送信されるバグが
    あり,使い物になりませんでした。最終的には問題は解消されたようですが,CMOSのUPD71051に変更
    したので,結果は確認していません。)

    どちらで使うにしても,送信禁止信号の出力タイミングとCTSを検知してから停止するまで何キャラクタ
    掛かるかの合計のタイミングを検討する必要があるので,ある程度のバッファを準備する必要があります。
    そのうちに,RL78でハードウェア・ハンドシェイクの例をアップする予定です(RL78/G10でアセンブラ
    でのプログラムは何年か前に作ったことがあるので,それをCに移植するだけですが)。