非同期─全二重─シングルエンド
主従関係なし
物理/論理トポロジ:P2P
- 接続
デバイス MCU
Tx ─→ Rx
Rx ←─ Tx
RTS ─→ CTS
GND ── GND
- 接続端子
信号端子
Tx(Transmit,TxD)
送信側の出力端子
受信側のRxと接続
Rx(Receive,RxD)
受信側の入力端子
送信側のTxと接続
ハードウェアフロー制御端子
RTS(Request To Send)
バッファの空き状況に応じて,
受信側より送信許可を出す
送信側のCTSと接続
CTS(Claer To Send)
出力された送信許可を受け取るための端子
受信側のRTSと接続
- 配線本数
ハードウェアフロー制御を使わなければ,2本
使えば,4本
- ハードウェアフロー制御
Tx,Rxの他にRTS,CTSを加えた4本で通信を行う。
受信側のバッファに空きができたら,RTS=0 を出力し,送信許可を出す。
バッファがほぼ満杯になったら RTS=1を出力し,送信停止信号を出。
専用の信号線で開始/停止制御を行うため,オーバーヘッドが無く,本来送りたいデータ量を多くすることができる。
またRTS/CTSで送信するのは1ビットのみのため,受信してから即座に停止処理を行う事ができ,バッファオーバーの恐れもない。
- 設定
送信側,受信側で,つぎを同じにする必要がある
ボーレート
1秒当たりのビット数(bps)
9600,115200bps等がある。
データビット数
フレーム内のデータのビット数。
一般的には8bitだが,7bitもある。
パリティ
フレーム内のパリティ有無。
パリティなし,偶数パリティ,奇数パリティの中から選択できる
(パリティなしでも通信は可能です)
ストップビット数
ストップビットは,通信終了の合図。
1bitまたは2bitで選択できる。
フロー制御
フロー制御なし,ソフトウェアフロー制御,ハードウェアフロー制御の中から選択できる。
設定は,SBC, MCU それぞれにおいて,プログラムで行う。
- 表記
例えば
ボーレート:9600 bps,
データビット:8 bit,
パリティ:なし (None),
ストップビット:1 bit,
フロー制御:なし
の場合,
「9600 8N1」
と書く。
- 標準的。
「標準的」 となる理由は:
○ 実装が簡単 (Cf. SPI は高速だが複雑)
配線がシンプル
ROS2 から扱いやすい
Linux でも安定
STM32 側も HAL で簡単に書ける
1ms周期のモータ制御にも十分な帯域
デバッグが容易
○ ROS2 と相性が良い
ROS2 のノードは,UART を簡単に扱える。
即ち,
/dev/ttyAMA0
/dev/serial0
などのデバイスファイルを使って通信できる。
○ STM32 HAL が UART を強力にサポート
HAL_UART_Transmit
HAL_UART_Receive
DMA 受信
割り込み受信
|