マイコン間(ロボット内部)通信方式のまとめ
イントロ
ロボット内部用の通信よくわからん.となったのでよく聞く方式をまとめてみました.
基本的に物理層とデータリンク層の話のつもりです.もっとも,OSI参照モデルがそもそもネットワーク通信の話なので,マイコン間通信に当てはめていいのか微妙ですけども.
基礎知識
いわゆるキーワードです.
- パラレル通信:1byte(8bit)の情報を送るのに8本の信号線を同時に使う方式.8人がそれぞれ同時に旗を上げ下げするような感じ.
- シリアル通信:1byte(8bit)の情報を送るのに1本の信号線をなんども使う方式.1人がリズムに合わせて旗を上げ下げするような感じ.
- 同期式シリアル通信: 同期信号に合わせて通信する方式 (wiki).送り手と受け手が同じメトロノームの音に合わせて旗を上げ下げするような感じ
- 非同期(調歩同期)式シリアル通信:あらかじめ通信のタイミングを決めて通信する方式.送り手と受け手がそれぞれ同じリズムの別々のメトロノームを見ながら旗を上げ下げするイメージ.
- 差動式信号:1つの信号を2本の信号線に乗った2つの信号の差として出す方式.ノイズに強い.
- 半二重通信:送信と受信のどちらかに切り替えながら行う通信.トランシーバーみたいなもの.
- 全二重通信:送信と受信を同時に行える通信.電話みたいなもの.
I2C
1対多の通信を2本の信号線で行う同期式シリアル通信 (wiki).GroveやQwiic などのモジュールで採用されている人気の通信方式.ノイズに弱いので同一基板上のIC間の通信が基本的な使い方.
Slave IC側で通信中に問題が生じると,I2C通信全体が止まる恐れがある.
SPI
1対多(n)の通信を(3+n)本の信号線で行える同期式シリアル通信 (wiki).n本の信号線のSSを切り替えることでSlave ICを切り替えることができる.送信用(MOSI)と受信用(MISO)の専用線がある.ノイズに弱いので同一基板上のIC間の通信が基本的な使い方.I2Cよりも高速に通信できる傾向がある.
UART/USART
本来はシリアル信号をパラレル信号にしたり,同期式シリアル信号を非同期式シリアル信号に変換するICのこと(Universal Synchronous Asynchronous Receiver/Transmitter).
Arduino においては TX ピンと RX ピンからの信号をUARTを介してUSBに変換してPCと通信する(Serial
クラスを使用).UART と Serial が本来の意味とはズレているので非常にややこしい.
USB2.0
D+とD-の2つの信号線を使った差動信号を用いた半二重非同期通信 (wiki).PCとの通信で非常によく使われている規格.マイコンから使う場合は基本的にUSB-シリアル変換器を使う.ハブをかませない場合は1対1通信になる.
USB 3.2 gen2
2連の全二重非同期通信.TX+, TX-, RX+, RX- のセットを2つ持った,パラレルにシリアル通信を行う方式.USBと名前がついているがUSB2.0とは物理的に別物.
Ethernet
いわゆるLANケーブルに使われている規格.ひとくちにEthernetといっても,実はさらに細かい仕様に分かれている(イーサネット仕様 ).8P8C(RJ-45)コネクタを使っているものが主流で,この場合は.TX+, TX-, RX+, RX- のセットを1つ持った全二重非同期通信となる.ハブをかませない場合は1対1通信になるが,大抵はハブ(ルーター)を入れることでN対Nの通信になる.
CAN
Controller Area Network という CANH と CANL の2つの信号線を使った差動信号を用いた半二重非同期通信.自動車用に設計された耐ノイズ性に優れた規格.通信速度に対して距離と接続数はトレードオフの関係にある.N対Nの通信ができる.マイコンから使う場合は基本的にCANトランシーバーを使う.
RS485
EIA-485とも呼ばれる,2つの信号線を使った差動信号を用いた半二重非同期通信.耐ノイズ性に優れた産業機器向けの規格.Dynamixel などで採用されている.N対Nの通信ができる.
Discussion