UARTのCTS・RTSについて

RX231を使用しています。

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

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

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

どうして。。。

Parents Reply Children
  • チョコです。
    8250は使ったことはありませんが,何となく,これは8251Aの初期バージョンのCTSの問題と同じトラブルのようですね。
    以前のNSのイメージは,"とにかくバグが多い"でした。

    >8251とZ8440は、調歩同期式シリアルとクロック同期式シリアル
    8251の同期式シリアルはSPIのようなクロック同期シリアルとは違います。あくまで,回線経由で通信する
    ことを意識した通信で,データを通信していないときには,同期キャラクタをやり取りすることで,同期
    状態を保持するものです(マイコン関係ではあまり使いませんでしたが)。
  •  チョコさん、こんにちは。NoMaYです。

    リプライ有難う御座います。チョコさんが3つ前の投稿で書かれていた8251Aの初期バージョンでのCTSの問題は、8251Aのdatasheetの以下の記載から、~CTS(~はローアクティブの印)が送信回路に入力されていることが分かりますので、論理設計ミスがあったのだろうな、とは推測出来るのです。ですが、8250(といっても8250Aですが)のdatasheetには「~CTS has no effect on the Transmitter.」と書かれていて、~CTSと送信回路は何の関係も無い筈で、それでどうしてそんなバグが発生したのか推測出来ないのです。

    あと、今しがた気付いたのですが、以下の文面からすると、8251Aでは送信途中に~CTS=Low→Highの変化があると送信中のデータが壊れる(その時点から強制的にTxD=Highになる)と読み取れるのですが、そうなのですか? (もしそうなら、そういうものはフロー制御と呼ぶものでは無いのでは?という気がしています。) ただ、チョコさんの3つ前の投稿には「CTSに対応するRTSはRxRDYを使っていた記憶があります。これでも,最悪で1キャラクタ分は送信されてくる可能性があったので,外部にF/Fを付けて,スタート・ビットでRTSをオフしたこともありました。」とも書かれていて、それと整合性が取れていない(スタートビットの初めの部分でTxDが一瞬だけHigh→Low→Highと変化するのみで、正常なデータが送信されることは無い?)ような気もして、首を傾げているところです。

    8251Aのdatasheetから抜粋

    Transmitter Buffer

    The Transmitter Buffer accepts parallel data from the Data Bus Buffer, converts it to a serial bit stream, inserts the appropriate characters or bits (based on the communication technique) and outputs a composite serial stream of data on the TxD output pin on the falling edge of ~TxC. The transmitter will begin transmission upon being enabled if ~CTS = 0. The TxD line will be held in the marking state immediately upon a master Reset or when Tx Enable or ~CTS is off or the transmitter is empty.
     

  • チョコです。
    その当時のデバイスは設計変更すると,動いていたものが動かなくなることがよくありました。
    CTSについても,Aのつかない8251では正しく動作していました。(オリジナルではチャントできていた
    機能が改良版では動かなくなったパターンです。送信中のデータが破壊されるのは経験していませんが,
    これは単にタイミングの問題でしょう。当時,UARTの受信では,スタートビットの中央辺りでノイズが
    載るとUARTが動かなくなってしまうなど結構問題がありましたよ。)
    また,当時は内部に訳の分からない回路があって,それが後から公開されたり,逆に,公開されていた
    機能が削除されたりしていました。
    8250でもCTSをサポートしようとして回路を組み込んだが問題があってCTS端子に動作しないように細工
    したんじゃないかと想像されます。とにかくお客様のセットは出さないといけないので,その回路を
    殺したものを正式な仕様にして,CTSが正常になったものを改版品としてしまったとか。
    そんな時代でした。

    追伸

    スタートビット云々は,8251での話です。8251Aは使いませんでした(使えなかったので,古い8251を

    かき集めて対応していました。その後,UPD71051に切り替えたので,8251Aは不採用でした)。