UART通信¶
UARTとは¶
UART(Universal Asynchronous Receiver Transmitter)は、マイコンやコンピュータ同士がシリアル通信を行うための通信方式である。
STM32、Raspberry Pi、Arduinoなど、多くの組み込み機器で利用されている。
AsterではALEO(STM32)とAC(Raspberry Pi)の通信手段として利用する予定である。
特徴¶
UARTには以下の特徴がある。
メリット¶
- 配線が少ない
- 実装が簡単
- STM32やRaspberry Piが標準対応している
- デバッグしやすい
デメリット¶
- SPIより通信速度が遅い
- 複数機器接続には向かない
- アドレス機能がない
配線¶
UART通信は最低3本の配線で構成される。
| 信号 | 説明 |
|---|---|
| TX | 送信 |
| RX | 受信 |
| GND | 基準電位 |
接続例
STM32 Raspberry Pi
TX ----------------> RX
RX <---------------- TX
GND --------------- GND
TXとRXは交差接続する。
GNDが必要な理由¶
UARTは電圧で信号を判断する。
例えば
0V → Low
3.3V → High
として認識するため、通信相手と電圧の基準を共有する必要がある。
そのためGNDの接続は必須である。
通信の仕組み¶
UARTは1bitずつ順番にデータを送信する。
例えば文字「A」はASCIIコードで
01000001
として送信される。
フレーム構造¶
UARTでは以下の形式でデータが送信される。
Start
↓
Data
↓
Stop
例
┌─┬────────┬─┐
│S│ DATA │P│
└─┴────────┴─┘
スタートビット¶
通信開始を表す。
通常は
0
が送信される。
データビット¶
実際のデータ。
一般的には8bitが利用される。
ストップビット¶
通信終了を表す。
通常は
1
が送信される。
ボーレート¶
ボーレート(Baud Rate)は通信速度を表す。
よく利用される設定
| ボーレート |
|---|
| 9600 |
| 19200 |
| 38400 |
| 57600 |
| 115200 |
| 921600 |
STM32では115200bpsがよく利用される。
ボーレート不一致¶
通信する機器同士でボーレートが一致していないと通信できない。
例
STM32 : 115200
Raspberry Pi : 9600
この場合、文字化けや通信エラーが発生する。
8N1とは¶
UART設定でよく見かける
8N1
は以下を意味する。
| 項目 | 内容 |
|---|---|
| 8 | データ長8bit |
| N | パリティ無し |
| 1 | ストップビット1bit |
現在最も一般的な設定である。
STM32での利用¶
STM32にはUART機能が内蔵されている。
CubeMXでUSARTを有効化するだけで利用できる。
一般的な設定
USART1
115200bps
8N1
Raspberry Piでの利用¶
LinuxではUARTは
/dev/ttyAMA0
または
/dev/ttyS0
として利用できる。
Node.jsではSerialPortライブラリを利用することが多い。
例
const { SerialPort } =
require("serialport");
const port =
new SerialPort({
path: "/dev/ttyAMA0",
baudRate: 115200
});
UARTと他通信方式の比較¶
| 項目 | UART | I2C | SPI |
|---|---|---|---|
| 配線数 | 少ない | 少ない | 多い |
| 通信速度 | 普通 | やや遅い | 高速 |
| 実装難易度 | 低い | 中 | 中 |
| 複数接続 | 不向き | 得意 | 可能 |
よくあるトラブル¶
TXとRXが逆¶
誤
TX → TX
RX → RX
正
TX → RX
RX → TX
GND未接続¶
UARTで最も多いトラブルの一つ。
通信相手とGNDを共有する必要がある。
ボーレート不一致¶
通信速度の設定が異なると通信できない。
電圧レベル不一致¶
例えば
5V UART
↓
3.3V UART
へ直接接続すると故障する可能性がある。
接続前に動作電圧を確認すること。
Asterでの利用¶
AsterではUARTを利用してACとALEOを接続する。
AC
(Raspberry Pi)
⇅
UART
⇅
ALEO
(STM32)
通信内容の例
- モータ制御指令
- 状態取得
- センサ情報
- エラー通知
Asterでの利用¶
ACとの通信はCAN通信を使用しているのでメイン機能では使わないがデバックには使用するため今回紹介した。
まとめ¶
UARTは組み込み開発で最も基本的なシリアル通信方式の一つである。
- TXとRXで通信する
- GND共有が必要
- ボーレートを合わせる
- STM32とRaspberry Piで簡単に利用できる
実装が容易で信頼性も高いため、AsterにおけるALEOとACの通信方式として適している。