- 締切済み
GPIOポートを使ったシリアル通信について
GPIOポート(デジタルの汎用入出力)を用いてのシリアル通信について質問させて頂きます。 通常シリアル通信にはTxD,RxDといったシリアル通信用のピンを用いますが、これは通常1デバイスに一ポート程度しかありません。そこで、多数のシリアル通信デバイスを制御するのに、数のあるGPIOピンを用いることができないか、と検討しております。 具体的には、raspberry piやarduinoに搭載されるGPIOピンと制御したいデバイス(PICマイコンなど)のシリアル通信ポートを接続し、制御したいということです。 説明が下手で意図がうまく伝わらないと思いますが、できるかできないか、または参考になる資料など、なんでもいいので情報の提供をよろしくお願いいたします。 イメージしている接続を図示してみましたので、説明の足しになれば幸いです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kngj1740
- ベストアンサー率18% (197/1052)
DOSの時代にシリアルのデータ抜けが問題になった。16550では間に合わずハードウェアFIFO付の16550Aが使われたくらいです。ひとつづに専用のシリアル通信用ICが必要です。CPUでシリアル通信は無理です。
- unagi-pie
- ベストアンサー率41% (166/397)
PIC を含めプログラミングは詳しくないですが、場つなぎ回答として。 「できるか」の答えとしては「できます」。 ただし、ソフトウェアの負担がそれなりに重くなります。場合によっては割込も使うでしょう。 送信は、スタート、パリティ、ストップビットを付けて所定のタイミングでパラシリ変換するだけなのでまだ楽ですが、 受信は、 1. いつ来るかわからない受信を待ちつづけ 2. スタートビットの前縁を検知したら 3. 0.5ビット長後にスタートビットがまだ続いてることを確認し 4. 1ビット長毎に8回データを取り込みシリパラ変換し 5. 1ビット長後にパリティ検査し 6. 1ビット長後にストップビットを確認 という動作が要ります。 これが複数ある場合は、それぞれは同期もせず任意のタイミングでスタートするので、 「0.5ビット長」「1ビット長」を測るタイマ割込なりも独立に要ることになります。 (より細かいタイマとして兼用させる手もなくはないですが) 更に、速度可変、データ長は5,6,7,8ビット選択可能、パリティビットあり/なし選択可能、な機能も付けるならまた大変です。 まぁローカルな通信なら、可変にする必要ありませんが。 「調歩同期式」は送信、受信とも独立し双方がいつでも送信できるし、相手をパソコンでシミュレーションデバグできる、等のメリットがあり使いやすいと思いますが、 逆に言うとその必要がないなら冗長すぎるとも言えます。 パラレルポートでソフト処理で通信するなら、 SPI http://www.ne.jp/asahi/rugbysensor/ohata/SPI_0.html の方が、制約もありますがソフト的にはまだ作りやすいと思います。