UARTのCTS・RTSについて

RX231を使用しています。

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

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

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

どうして。。。

Parents
  • almondさん、こんにちは。NoMaYです。(ひと月ぶりでしょうか。)

    片方しかない理由を考えていて、ちょっと思い浮かんだことがあります。送受信をDMAで行う場合とそうでない場合とに分けて考えてみると、片方あればシビアな状況に対応出来るような気がしました。

    DMAを使う場合

    ・ 受信でDMAを使えば凄い勢いでドンドン送られてくるデータにも対応出来る
    ・ 送信でDMAを使う場合はCTSでハード的に待てるようでないと相手が受信しきれないケースも有り得る

    DMAを使わない場合

    ・ 送信ではポートでCTSを読んで待ってあげれば充分である
    ・ 受信では受信割り込みが間に合わないことが想定される事情がもしあるならハード的にRTSで相手を待たせるようにする必要がある

    というのはどうでしょうか?

    [追記] 03/28 07:09 この後のチョコさんの投稿を読んだ後で追記しました

    >・ 受信では受信割り込みが間に合わないことが想定される事情がもしあるならハード的にRTSで相手を待たせるようにする必要がある
    この場合、相手側の作りとして、RTS=Highでは1バイトも送らないようになっている必要がありますね。
    (もっとも、こちら側の受信はダブルバッファになっているので1バイトのマージンはありそうですが。)
    また、RTSの出力がHighに変化するのは以下のようにスタートビットを検出したタイミングのようです。

    RX230,231のハードウェアマニュアルの画面コピー


Reply
  • almondさん、こんにちは。NoMaYです。(ひと月ぶりでしょうか。)

    片方しかない理由を考えていて、ちょっと思い浮かんだことがあります。送受信をDMAで行う場合とそうでない場合とに分けて考えてみると、片方あればシビアな状況に対応出来るような気がしました。

    DMAを使う場合

    ・ 受信でDMAを使えば凄い勢いでドンドン送られてくるデータにも対応出来る
    ・ 送信でDMAを使う場合はCTSでハード的に待てるようでないと相手が受信しきれないケースも有り得る

    DMAを使わない場合

    ・ 送信ではポートでCTSを読んで待ってあげれば充分である
    ・ 受信では受信割り込みが間に合わないことが想定される事情がもしあるならハード的にRTSで相手を待たせるようにする必要がある

    というのはどうでしょうか?

    [追記] 03/28 07:09 この後のチョコさんの投稿を読んだ後で追記しました

    >・ 受信では受信割り込みが間に合わないことが想定される事情がもしあるならハード的にRTSで相手を待たせるようにする必要がある
    この場合、相手側の作りとして、RTS=Highでは1バイトも送らないようになっている必要がありますね。
    (もっとも、こちら側の受信はダブルバッファになっているので1バイトのマージンはありそうですが。)
    また、RTSの出力がHighに変化するのは以下のようにスタートビットを検出したタイミングのようです。

    RX230,231のハードウェアマニュアルの画面コピー


Children
No Data