- ベストアンサー
シリアル通信の仕組みとは?
- シリアル通信の調歩同期式は、スタートビット、データ、パリティビット、ストップビットを送信する方法です。
- 受信側は送信側のビットレートを制御信号で受け取ります。
- データが7ビットか8ビットかは制御信号で判断し、受信側はレジスタやメモリにデータを格納します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
それ「知る」わけじゃなくて、 お互いにこういう通信をしましょうね =これを「プロトコル」という。 で、その通り来て受け取れたものだけを、DATAバスに流す ってのが、RXチップですね。 逆に送る側は、そのスタートビット~実データ~エンドビットの ON/OFFをTX側にセットしていくのが、仕事。 (なお、RX/TXは大抵は同じチップ内で完結してるが) 全体のデータサイズは知ることが出来ないので、 これは、ソフト側のプロトコルを作ります。 例えば「今から100バイト送るね」ってヘッダーを送り 続けて100バイト送ったら、終りだね!って感じで。 で、レスポンスとして、100バイト来てないよ?もう一回送って? だったり、100バイト来ましたからね! って送り合ってデータの正当性を確かめます。 (多くはチェックサムを使っています)。 などなどで成り立ってます。 なお、シリアルコントローラーチップがある場合は、 通信レートとパリティー、スタートビット、エンドビットの長さを 先にプログラムしておくと、 指定された速度で、勝手にバイト→ビットで 送ってくれます。 同じように受信側も、1バイトたまったら、自動的に データバスに流す。の繰り返しで、後は自動だったりします。
その他の回答 (3)
- mimazoku_2
- ベストアンサー率20% (1905/9111)
これが参考になりませんか。 シリアル通信の基礎知識・用語解説 - RS-232C/422485 - https://www.contec.com/jp/support/basic-knowledge/daq-control/serial-communicatin/#top
お礼
参考URLありがとうございます!
- Ultra-Hetare
- ベストアンサー率38% (204/526)
調歩同期式とは言え、接続された2つの端末は、 どちらも送受信します(でないと通信が成立しません) で、単に送信を開始した側が、 最初に受信する側の設定に合わせないと 通信できないという、それだけのことです。 ciscoやcheckpointなど、 teratermのデフォルトで通信可能なものも有りますが、 サンゴマなど、ビットレート51200 フロー制御を「Xon/Xoff」に変えてやらないといけません。 要するにPC側が機器の仕様に合わせてやれば通信できます。
お礼
送信する側が受信する側の設定(プロトコル)に合わせて通信するのですね。簡潔に理解出来ました。ありがとうございます!
- haniriito2019
- ベストアンサー率47% (49/104)
回答します。 > 1.受信側は送信側のビットレートをどのように知るのでしょうか? 受信側で予め設定しておきます(プログラム中でビットレートを指定して待ち受ける)。 > 2.同様にデータが7ビットと8ビットのどちらであるかをどうやって判断するのでしょうか? 受信側で予め設定しておきます(プログラム中でビット長を指定して待ち受ける)。 > 3.受信側は送られてきたデータのビットを1バイト毎にレジスタやメモリに格納すると思うのですが、1つのプログラムにつきどこからどこまでが該当のデータであるかをどうやって判断するのでしょうか?(送られてくる全体のデータサイズをどうやって知るのでしょうか?) 基本的に、調歩同期式シリアル通信というレイヤーでは、データの「始まり」と「終わり」は定義されていません。区切りのない連続したデータとして取り扱います。 そこで、上位プロトコルが必要になります。これも通信プログラムの方で予め決めておきます。 例えば、SLIPのような方法を使うと決めて、任意のバイトを「パケット化」して送ることは可能です。そのために、送信側はエンコード処理、受信側がデコード処理が必要です。 単純に、送るデータをASCII文字や数値だけに限定しておいて、CR(キャリッジリターン)やLF(ラインフィード)を区切りコードとして使うこともあります。 結局のところ、やり方はアプリケーション次第です。
お礼
プロトコルが予め決まっていて、それに則って通信する、そしてそのプロトコルはアプリケーション次第ということですね。ご丁寧に回答ありがとうございます!
お礼
プロトコルが先に決められていて、それに沿ってそれぞれ送信・受信するのですね。すっきりと理解出来ました、ありがとうございます。