- 公開日:2019年10月02日
- | 更新日:2024年05月29日
よく分かる! シリアル通信基礎講座
- ライター:Ge
- その他
現在、コンピュータ間、その付属部品間での通信方法には、大きくシリアル通信方式と、パラレル通信方式が一般的となっております。それぞれの通信方式を簡単にご紹介しますと
- シリアル通信:1つのデータ伝送路を使い。1ビットずつデータを送信する方式
図.1 シリアル通信
- パラレル通信:複数の伝送路を使い、1度に複数のデータを送信する方式
図.2 パラレル通信
パラレル通信のほうがシリアル通信よりも一度に多数のデータを送ることができるため、良いように思われがちですが、パラレル通信には複数の伝送線が必要になるため、コストが高くなりやすく、また複数のデータの同期をとる難しさなどがあます。そのため、現在はシリアル通信が主流になります。
この記事ではシリアル通信の中でもよく利用される、SPI、I2C、UARTについて説明します。
SPI通信
SPI通信とはデバイス同士を接続するのによく利用される同期式シリアル通信の一つです。
信号線
SPI通信には以下の4つの信号線を使用して通信を行います。
- SIMO(Slave In Master Out):マスターモード時はデータ出力ピンになり、スレーブモード時はデータ入力ピンになります。
- SOMI(Slave Out Master In):マスターモード時はデータ入力ピンになり、スレーブモード時はデータ出力ピンになります。
- SCLK(Serial Clock):マスターモード時はクロック出力ピンになり、スレーブモード時はクロック入力ピンになります。
- SS(Slave Select):Lowアクティブの信号になり、マスターは複数あるスレーブ機器のなかで、通信したいスレーブ機器のSS端子をLowに制御し通信を行います。スレーブ機器が一つしか接続されていない場合には、スレーブ側のSS端子をLow固定にすることで、配線を省くことが可能です。
接続例
以下のように、スレーブ機器には4線が接続され、マスター機器には、接続するスレーブ機器の数だけSS端子を接続します。
図.3 接続例(SPI)
通信タイミング
SPIマスターはSSをLowに駆動し、その後SCLKを出力します。このSCLKに同期してSIMOからデータ出力を行います。
SPIスレーブは、マスターから入力されたSCLKに同期してSOMIからデータを出力します。このSIMOとSOMIは同時に転送されるものになります。
図.4 通信タイミング(SPI)
この例では8bitでデータ転送をしていますが、SPIでは明確なデータ長は定義されておりません。また、クロックの極性なども定義はされておりません。そのため、使用するデバイスの仕様に合わせてデータサイズやクロックの極性を指定して利用します。
図.5 SPI通信概略図
I2C通信
I2C通信とはデバイス同士を接続するのによく利用される同期式シリアル通信の一つです。一般的に速度はSPI通信に劣りますが、I2C通信は2本の信号線ですべてのデータの送受信を行います。そのため、SPI通信よりも信号線が少なくてすみます。
信号線
I2C通信は以下の2つの信号線を使って通信を行います。
- SDA(データ信号用)
- SCL(クロック信号用):マスター側がSCLをスレーブに出力し通信を行います。
接続例
SCLとSDAのバスに、マスター機器及び、スレーブ機器が接続されます。また、SCL、SDAはプルアップする必要があります。プルアップする抵抗の値は数百から数キロΩを接続することが多いですが、使用するデバイスにより推奨値が用意されている場合があるので、ICの購入先に聞いてしまうのが手っ取り早いです。
図.6 接続例(I2C)
通信タイミング
図.7 I2CマスターからI2Cスレーブへのデータ送信例
- マスターはSCLがHighのときに、SDAをLowにするとスタートコンディションとなり、データの送信を開始します。
- 続いてスレーブアドレスを送信します。I2Cバスには複数のスレーブがぶら下がっているため、このスレーブアドレスでどのスレーブにデータを送信するか決めます
- 次にWrite(=0)コマンドを送信します。
- アドレスとコマンドを受け取ると、スレーブはACKを返します。
- ACKの後、マスターはデータを送信します。
- データを受信後、スレーブは再びACKを返します。
- SCLがHighのときに、SDAをHighにするとストップコンディションとなり、通信が終了します。
図.8 I2CマスターからI2Cスレーブのデータ受信例
- マスターはSCLがHighのときに、SDAをLowにするとスタートコンディションとなり、データの送信を開始します。
- 続いてスレーブアドレスを送信します。I2Cバスには複数のスレーブがぶら下がっているため、このスレーブアドレスでどのスレーブにデータを送信するか決めます
- 次にRead(=1)コマンドを送信します。
- アドレスとコマンドを受け取ると、スレーブはACKを返します。
- ACKの後、スレーブはデータを送信します。
- マスターはスレーブからのデータを受信後、ACKを返します。
- SCLがHighのときに、SDAをHighにするとストップコンディションとなり、通信が終了します。
UART通信
UART通信はこれまでのSPI、I2Cとは異なり、非同期でシリアル通信を行います。そのため、信号線は送信用のデータラインと、受信用のデータラインの2線で通信を行い、クロック用のラインは存在しません。
信号線
UART通信は以下の2つの信号線を使って通信を行います。
- TXD(データ送信に使用)
- RXD(データ受信に使用)
RTS(Request to Send)、CTS(Clear to Send)の信号線を使い、送信リクエストを送りあう方法(フロー制御)もありますが、今回はこの方法については省略します。
接続例
2つのデバイス間で、送信ピンと受信ピンをそれぞれ接続します。SPIやI2Cと異なり、クロックラインが無く、マスター/スレーブのような関係もありません。
図.9 接続例(UART)
通信タイミング
UARTにはクロック信号が無いため、通信をする前にあらかじめ送受信するデバイス間で、通信速度(ボーレート)を決めておきます。よく使用されるボーレートは下記になります。
- 1200 bps
- 2400 bps
- 4800 bps
- 9600 bps
- 19200 bps
- 38400 bps
- 57600 bps
- 115200 bps
このボーレートで、1bitの時間が決まります。
図.10 通信タイミング(UART)
- スタートビット:UARTにはクロックが無いため、データラインの立下りエッジで通信のスタートを知らせます。
送信側は立下りエッジから1bitの時間Lowを継続します。 この1bitをスタートビットと呼びます。 - データビット: データ長はデバイスにより設定できる幅が異なりますが、8bit前後の長さで使うことが多いです。
上の例はデータ長が7bitです。 - パリティビット:誤り検出符号ビットです。パリティビットは、ディスエーブル、偶数パリティ、奇数パリティの
3種類から選択できます。ディスエーブルのときはこのビットは使用されません。
偶数パリティのときは、データビットの”1”の数が偶数のときに、パリティビット=0となり、
データビットの”1”の数が奇数のとき、パリティビット=1となります。奇数パリティはこの逆になります。 - ストップビット:データビット、パリティビットの後に続くビットがストップビットとなります。
ストップビットの長さはデバイスで設定できますが、1bit~2bitで使うことが多いです。
送信側は、この指定したbitの時間Highを継続します。ストップビット検出後は、
データラインはHighに維持されますので、次のスタートビットを送信することが可能になります。
受信側はデータラインの立下りエッジを検出し、そこからボーレートによって決まるbit時間ごとに、データの取り込みを行います。データの取り込みは、1bit時間の中央で複数回サンプリングし、多数決を取り、そのデータが0か1かを判断します。
シリアル通信まとめ
今回シリアル通信の中でも基本的な通信方式である、SPI、I2C、UARTについて説明させていただきました。
それぞれの方式について以下にまとめます。
通信速度(目安) | クロックライン | 通信ライン | 通信方式 | |
---|---|---|---|---|
SPI | ~50Mbps | 有 | データ クロック チップセレクト |
x1マスター ⇔ 複数スレーブ |
I2C | ~1Mbps | 有 | データ クロック |
複数マスター ⇔ 複数スレーブ |
UART | ~500kbps | 無 | データ | x1デバイス ⇔ x1デバイス |
それぞれに特徴がありますので、用途に合わせて最適なシリアル通信を選択してみてください。
製品をお探しの方や不明点をお持ちの方は以下よりお問い合わせください。