2010/06/04

連載企画 CPU 実験教室 実践編 第 4 回 RS232C について

今回は RS232C、つまりシリアル ポートによる通信の解説です。とはいっても、今回解説するのは RS232C の仕様だけで、具体的な通信仕様とモジュールの書き方については次回に回したいと思います。ソフトウェア的なことは cserver を参照してください。

あいずたん 具体的なモジュールの書き方は次回号を読んでねっ!

RS232C のピンについて

RS232C ポートにはピンがいっぱい伸びているけど、通信に使うのはたった 2 本の線、送信線と受信線です。この 2 本は全く無関係に動くので、送受信が同時にできます。他のピンは制御線ですが、仕様が曖昧なところもあり、使用はお勧めできません。むしろたった 2 本の線で通信できるのが RS232C のすごいところなので、これだけで通信しましょう。

ストレート ケーブルとクロス ケーブル

もともと RS232C は PC とモデムの間をつなぐのに使われていた物でした。そのときは、普通に PC から送信する線をモデム側が受信して、モデムが、 PC が受信できるように受信線に送信すればよかったわけです (ストレート ケーブル)。 これを、PC 間、あるいは他の機器と接続するとき、そのまま接続すると、受信線と受信線・送信線と送信線がつながってしまうということが発生してしまいます。そこで、受信線と相手の送信線をつなぐようにしたものを、クロス ケーブルというわけです。

これだけ聞くと当たり前であるように見えるのですが、制御線の定義を各メーカーが解釈したときに、クロス ケーブルの仕様がメーカー間で多少違いが出てきてしまったということがあります。これが制御線を使うのをお勧めできない理由のひとつ。

ちなみに筆者は ModelSim 上でストレート ケーブルでモジュールをつなげてしまうというミスをして、数時間ぐらいはまっていたことがあるので、皆さんは注意しましょうw。

あいずたん in と in , out と out をつなげても ModelSim は警告してくれないよっ!
りるふぇすたん そんなミスをするとかヒョットしてあんたバカァ?

通信速度

当初の規格では、かなりの低速通信用として開発されたため、baud rate (多少語弊はありますが、通信速度と思ってくれて構いません)は、110 bps(bit/s) -- 9600 bpsで策定されました。これが、ある程度時間がたつと、遅すぎるということで 14400 bps , 28800 bps が使われるようになり、さらに時間がたって、115200 bps が策定され、最終的に、Windows などで、その倍倍である、230400 bps , 460800 bps , 921600 bps が策定されたようです。

DELL の学科 PC や筆者の PC の後ろについているシリアル ポートは、多分 115200bps が上限 (デバイス ドライバ見てください)、それ以上の速さでは本来プログラムで開けないはずなんですが、TeraTerm では何をしているのか知らないけど、それ以上の速度で通信できているように見えてしまいます (多分実際にはその速度でやり取りしていないと思うのですが...)。入江先生の貸してくれたシリアル to USB を使うと、送信は 921600bps までいけて、受信は 460800bps までいけるようです。最も性能の高いシリアル to USB を使うと 921600 bps ≒ 1 Mbps まで出せるという噂もあります。こういう風に言っているのは、PC 側のシリアルデバイスに比べて、FPGA 基板の方が圧倒的に性能が高いため、たとえ 921600bps でも余裕で受信できるということ (1 bit に数十 -- 数百クロックかかります)。あと、921600bps で contest.sld を実行しても、IO だけで 0.5s かかります。

あいずたん ちなみに、USB 2.0 以降の通信速度は、旧基板のチップでもシリアルの速度が無視できるぐらい速いよっ! 旧基板でも概算で 50Mbps かなっ!

信号の電圧について

RS232C の信号は以下のような感じで定められています。

0 +12V
1 -12V

拡張基板上に RS232C ポートを作成する場合は、自分で電圧変換チップを挟む必要がありますが、新基板上では FPGA のピンをいったん電圧調整の石をはさんでソケットにつながっている形になっているので、何も考えずに送信線と受信線に 0 , 1 を出力すれば OK です。

参考文献

最後に

もし何か意見・質問ございましたら下のコメント欄にお寄せくださいお寄せくださいお寄せください。

りるふぇすたん さて、次回はいよいよ RS232C の通信方法とモジュールの書き方についての説明ね。あんまり私をがっかりさせないことね

0 件のコメント:

コメントを投稿