マイコン周りのシリアル通信プロトコルまとめ
なんかいろいろあって??ってなるので特徴を覚え書き。線は信号に関係するものだけ (普通は +VDD が必要)
| 名前 | 線 | 特徴 | 速度 | 備考 |
|---|---|---|---|---|
| 1-wire | SIGNAL, GND | 半二重 1対多 非同期 | 標準 15.4kbps, オーバードライブ125kbps | SIGNAL が VDD を兼ねるので本当に2本だけでOK センサーとかで採用例がある。MAXIM の日本語スライド |
| I2C | SDA, SCL, GND | 半二重 多対多 同期 | ロースピード 10kbps 標準 100kbps ファーストモード 400kbps 高速モード 3.4Mbps | バス中のデバイスのどれでもマスターになれる。マイコンだと400kbpsまでが多い?ここに上げた中では唯一多対多のバスを作れる |
| SPI | SCK, MISO, MOSI, SS, GND | 全二重 1対多 同期 | クロック依存最大 1Mbps〜2Mbps | マスターはスレーブの数だけ SS が必要。1対1 なら SS は必要ない。 |
| RS232 | RxD, TxD, GND | 全二重 1対1 非同期 | 9600bps などいろいろ | PC でもよく使われていたインターフェイス。今でも USB 変換ケーブルは簡単に手に入る。フロー制御とかしないなら3本で使える |
| USB1.0 | D+, D-, GND | 半二重 1対多 非同期 | 1.5Mbsp, 12Mbps | 使うの面倒。USB2.0 は高速化版、USB3.0 はさらに高速化して全二重に |
AVR では
- SPI はほぼどの AVR でも使える
- I2C は AVR によっては専用ハード (TWI) が用意されてる。専用ハードでなくても USI があれば TWI をハンドリングできる (多少面倒だけどライブラリとして公開している人はいる)。
- RS232 はロジックレベルをドライバ (MAX232系の) で変換すれば USART で直接扱えるので簡単。
- USB は一部の AVR で組込み。V-USB を使えばソフトウェアだけでもいける。あるいは USB Serial 変換チップ (FTDIのが有名でクロスプラットフォーム) を使えば USART 経由で使える。変換チップ使うのが確実で汎用性があってよく使われていそう。
略語がいっぱい
- UART (Universal Asynchronous Receiver Transmitter) は非同期なシリアルを扱う回路の名前。同期なのを統合したものを USART (Universal Synchronous Asynchronous Receiver Transmitter) というらしい
- TWI (Two Wire Interface) はその名の通り2線式ってことなんだけど、AVR においては普通は I2Cのことを指しているっぽい。I2Cと名乗ってないのはなんか政治的な問題?
関連エントリー
- AVR TWI (I2C) 用のライブラリ そこそこ使いやすい感じなのを学習しながら書いてみた。 https://github.com/cho45/avr-utils/blob/mas...
- 続・GPIO (sysfs) を使ったソフトウェア I2C なんかうまく AVR だと動かなかったりしたので、カっとなってテストを充実させた。(動くようになった) とはいえ、コード上でテストだけ書いて...
- Linux 上の LL で I2C する (Ruby) なんとなく i2c-dev.h とかで定義されているAPIを呼ばないと使えないのかなあと思っていたけど、デバイスファイルの読み書きと ioc...
- AVR で USB 接続の PC キーヤーを作る PC からモールス符号を発生させて無線機に入力するものが欲しいと思っていた。当然既にそういうのはあるんだけど、どうも気に入るのがないので、必...
- Use IIC/I2C/TWI 1602 Serial Blue Backlight LCD Display ebay で IIC/I2C/TWI 1602 Serial Blue Backlight LCD Display という名称で売られている...