USBシリアル通信のボーレートの最大は?通信速度(bps)をオシロで確認

インターフェース

シリアル通信の速度をオシロスコープで確認してみました。

USBシリアル変換ケーブルのICを調べて、最大のボーレートまで試しています

シリアル通信のボーレートの設定で通信速度(bps)がどのように変化するか紹介します。

 

スポンサーリンク

USBシリアル通信のボーレートの最大は?通信速度(bps)をオシロで確認

USBシリアル通信のボーレート設定を変更して、実際の転送速度をオシロで確認しました。

 

シリアル通信でよく使われるボーレート設定は115200の波形が下記となります。

1bit辺りの転送時間は1/115200s(8.68us)となり、通信速度が115200bpsを確認できました

 

USBシリアル通信の場合、ボーレートの最大値は変換ケーブル内のICによって変わります。

 

USBシリアル通信でボーレートを最大に変更して、転送速度を確認してみました。

ボーレートを最大12M設定にできるUSBシリアル変換ケーブルで確認した波形が下記です。

 

1bit辺りの転送時間は1/12000000s(83.3ns)となり、通信速度が12Mbpsを確認できました。

今回調査した内容を詳細に紹介していきます

 

USBシリアル変換ICを調査

最初にRS232C・UART含めてUSBシリアル変換ケーブルの3種類のICを調査していきます。

ICのスペックを確認してデータシート上でのボーレートの最大を調べます。

 

以前にRS232C・UARTの電圧レベルを測定したときと同じ変換ケーブルです。

シリアル通信の電圧測定をした記事は下記となります。(リンク先はこちらから)

RS232Cの電圧レベルをオシロスコープで測定してみた
RS232Cの電圧をオシロスコープで測定してみました。また通信プロトコルも確認しています。 USB-RS232C変換ケーブルの電圧波形を実際に確認しています。 RS232C通信の基礎を初心者の方にも分かりやすく紹介します。

 

USBに接続されている変換ケーブル内のICを確認する方法は簡単です。

 

ラズパイに変換ケーブルを挿して下記コマンドを打ち込めばUSB関連の情報を取得できます。

dmesg | grep -i usb

 

FTDI FT232BM

バッファロー製 RS232C変換ケーブルのICを確認します。

FTDI製のFT232BMというUSBシリアル変換ICを使っていました。

 

実際に調べた結果は下記です

 

データシートを確認するとFT232BMの最大のボーレートは3Mということでした

(データシートのリンク先はこちらから)

 

WCH CH341

海外製 格安品_RS232C変換ケーブルのICを確認します

WCH製のCH341というUSBシリアル変換ICを使っていました。

 

実際に調べた結果は下記です。

 

データシートを確認するとCH341の最大のボーレートは2Mということでした

(データシートのリンク先はこちらから)

 

Prolific PL2303

usb-シリアル変換ケーブルのICを確認します。

Prolific Technology製PL2303というUSBシリアル変換ICを使っていました。

 

実際に調べた結果は下記です。

 

データシートを確認するとPL2303の最大のボーレートは12Mということでした

(データシートのリンク先はこちらから)

 

シリアル通信のボーレートを最大に設定する

今回は最大ボーレートを12Mまで設定できるUSBシリアル変換ケーブルをメインに確認します。

シリアル通信のTX(送信)とGNDをプローブで掴みオシロで転送速度を測定します。

 

Pythonでシリアル通信をする場合

以前に下記記事でラズベリーパイとPythonでシリアル出力しました。

UARTでもRS232Cでも同じ対応が可能です。リンク先はこちらです。

Pythonでserial(シリアル)通信!Read/Writeの波形を見てみた
uartのシリアル通信でRead/Write・ボーレート変更時の波形をアナライザで確認しました。Pythonとraspberry piでテストして測定動画を撮っており、シリアル通信の使い方・基礎を確認したい方におすすめです。 以前...

 

今回もラズパイとPythonでUSBシリアル通信を行います

 

pyserialをインストール

Pythonでシリアル通信するために「pyserial」のパッケージをインストールします。

下記コマンドで簡単にインストールできました

pip3 install pyserial

 

ラズパイでPythonのプログラムを用意する

PythonでRS232C通信するプログラミングを行っていきます。

ラズベリーパイ(raspberry pi)はPythonがデフォルトでインストールされています。

 

一度もプログラミング・Pythonを使ったことが無い方でも大丈夫です。

下記記事でラズパイで簡単なプログラムの作成・実行方法を紹介しています

(リンク先はこちらから)

ラズベリーパイでプログラミング入門!Pythonの簡単な始め方
プログラミングを始めたい方にラズベリーパイを使った簡単な入門方法を紹介します。 プログラミング言語の中でも初心者にもやさしく、人気なPythonがラズパイならば簡単にスタートできます。 ラズベリーパイでプログラミング入門!Pytho...

 

「~~.py」というファイルを作って、Pythonの環境開いて3行書いて実行すれば完了です。

 

下記プログラムをコピペしてもらっても構いません。

 

Pythonのプログラムの内容

実際作成したプログラム内容も非常に簡単です。下記の2手順となっています

  1. 「pyserial」をインポートしてusb-シリアル変換(/dev/ttyUSB0)を使うように定義します
  2. RS232C(シリアル)通信で「Hello World」とWrite(出力)します。

 

Pythonでボーレートを変更する方法

Pythonを使ったシリアル通信のボーレートの変更の仕方は簡単です。

プログラム内の数字を変更するだけです。

ボーレートを12Mに速くしたいのであれば「12000000」にします。

 

また逆にボーレートを9600に遅くしたいのであれば「9600」にすればOKです

 

Teretermでシリアル通信をする場合

USBシリアル変換を使う場合、PC(パソコン)からTeretermで使う場合も多いと思います。

 

PCとTeretermを使ったUSBシリアル通信例は下記記事でも紹介しています(リンク先はこちら)

UART通信のシリアル波形をアナライザで解析してみた
今回は簡単にアナライザでラズベリーパイ(raspberry pi)のUART通信のシリアル波形を確認するまでの手順を紹介していきます。 I2CやSPIも同様にアナライザで波形確認していますのでよろしければ下記記事もご覧ください。 ...

 

Teretermのボーレートの最大は?

Teretermでのボーレートを変更したい場合についても紹介しときます。

 

基本的には「設定」→「シリアルポート」で「スピード」のタブからボーレートを設定します。

デフォルトのタブで選択できるボーレートは「921600」までしかありません。

 

もし今回のように12Mなどにしたい場合は「12000000」と手入力すればOKです。

(非常に稀なケースだと思いますが…)

 

UARTの通信速度(bps)を確認

実際にオシロスコープを使って通信速度(bps)を確認していきます。

UART(シリアル通信)の115200と12000000(12M)の2つのボーレートで確認します。

 

ボーレート115200の通信速度(bps)

標準的なボーレート115200で測定したUSBシリアル通信(UART)の波形が下記となります。

Pythonで出力した「Hello World」が信号出力されています

 

時間軸を拡大すると1bitあたりの転送時間が約8.68us(1/115200(s))でした。

通信速度が115200bpsを確認できました。

 

ボーレート12Mの通信速度(bps)

今回ボーレートを最大設定の12Mにして確認した波形が下記となります。

(デバッグ環境で適当な箇所で測定しているため波形がひどいことになっています)

 

時間軸を拡大すると1bitあたりの転送時間が約83.3ns(1/12000000(s))でした。

通信速度が12Mbpsを確認できました。

 

デコードしてシリアル通信が正常かを確認

今回のシリアル通信であるUARTで12Mbpsが正常に波形出力できているか確認してみます。

筆者のオシロスコープはシリアル通信を解析するデコード機能があるので利用します

 

筆者のオシロスコープの詳細については下記記事で紹介しています。(リンク先はこちらから)

オシロスコープはおすすめ!電子工作のために購入してみた
オシロスコープを個人で購入してみました。 オシロがあれば電子工作の測定、電子回路の勉強などに使えて非常に役立ちます。 現役のエンジニアが自宅でオシロを使うメリット・デメリットを説明します。 また実際に通販で購入して、使い始めるまでの一連の流れも紹介します。

 

12Mbpsの出力信号をオシロスコープの機能でデコードして正常を確認できました。

無事にラズパイ+Pythonで出力した「Hello World」が確認できています。

 

RS232Cの通信速度(bps)の最大を確認

今回メインの測定候補から外れたUSB-RS232C変換ケーブルでも通信速度を確認します。

 

同じシリアル通信と言えど、UARTとRS232Cでは多くの差異があります。

RS232Cのボーレートを9600,115200,403200,3Mにした場合どうなるか確認しました。

 

RS232Cの規格上の最大通信速度

ちなみにRS232Cの規格としては通信速度は100k~200kbps程度が限界になります。

※ケーブルの負荷容量などの条件次第では20kbps程度に遅くなります

(ICとしては最大ボーレートが3Mですが…)

 

高い電圧レベル(±5V~15V)の波形を維持するためには、通信速度を抑える必要があるためです。

そのためRS232Cでは4800,9600,57600など比較的遅めのボーレートが使われています。

 

※RS232Cの規格詳細についてはTI社のデザインノートを参考になります。

(英語ですがリンク先はこちらから)

 

ボーレート_9600の通信速度(bps)

ボーレート9600で測定したRS232Cの波形が下記となります。

立ち上がり・立ち下がりも垂直で綺麗な波形となっています。

 

時間軸を拡大すると1bitあたりの転送時間が約104us(1/9600(s))でした。

通信速度が9600bpsを確認できました。

 

ボーレート_115200の通信速度(bps)

ボーレート115200で測定したRS232Cの波形が下記となります。

立ち上がり・立ち下がりに傾きが見え始め、スルーレートに若干影響が出てきています

 

時間軸を拡大すると1bitあたりの転送時間が約8.68us(1/115200(s))でした。

通信速度が115200bpsを確認できました。

 

ボーレート_403200の通信速度(bps)

ボーレート403200で測定したRS232Cの波形が下記となります。

垂直には立ち上がることはできず、スルーレートの影響がかなり出てきています。

 

時間軸を拡大すると1bitあたりの転送時間が約2.48us(1/403200(s))でした。

通信速度が403200bpsを確認できました。

多少波形に影響は出ていますがRS232C通信は問題なく送受信できるレベルだと思います。

 

ボーレート_3Mの通信速度(bps)

今回テストに使っているUSBシリアル変換ICとしてはの最大ボーレートは3Mです。

RS232C通信で実際に3Mにした場合どうなるのか確認してみます。

 

ボーレート3Mで測定したRS232Cの全体波形が下記となります。

波形として異常で、RS232Cの出力電圧±5V~15Vを満たせていないことが分かります。

 

時間軸を拡大すると1bitあたりの転送時間が約333ns(1/3000000(s))でした。

通信速度は3000000(3M)bpsを確認できました。

しかしスルーレートが限界で正常な電圧まで到達できないことが分かります。

 

まとめ

今回の記事をまとめますと下記になります。

シリアル通信のボーレートの最大はICによって異なります
UART通信では通信速度12Mbpsまで確認できました。
RS232C通信では高速通信は難しい(高い電圧レベルを維持できない)

 

今回オシロスコープで10Mbps以上の波形測定を行うことができました

趣味レベルのオシロのRIGOL DS1054Zでもシリアル通信の測定・解析が可能です

よろしければ皆さまもオシロスコープを触ってみてください

コメント