シリアル通信の速度をオシロスコープで確認してみました。
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の電圧レベルを測定したときと同じ変換ケーブルです。
シリアル通信の電圧測定をした記事は下記となります。(リンク先はこちらから)
USBに接続されている変換ケーブル内のICを確認する方法は簡単です。
ラズパイに変換ケーブルを挿して下記コマンドを打ち込めばUSB関連の情報を取得できます。
FTDI FT232BM
バッファロー製 RS232C変換ケーブルのICを確認します。
FTDI製のFT232BMというUSBシリアル変換ICを使っていました。
実際に調べた結果は下記です
1 2 3 4 5 6 7 8 9 10 11 |
[ 253.873986] usb 1-1.3: new full-speed USB device number 4 using xhci_hcd [ 254.019824] usb 1-1.3: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 4.00 [ 254.019840] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 254.019853] usb 1-1.3: Product: USB HS SERIAL CONVERTER [ 254.019865] usb 1-1.3: Manufacturer: FTDI [ 254.019877] usb 1-1.3: SerialNumber: FTY513QL [ 254.085961] usbcore: registered new interface driver ftdi_sio [ 254.086039] usbserial: USB Serial support registered for FTDI USB Serial Device [ 254.086263] ftdi_sio 1-1.3:1.0: FTDI USB Serial Device converter detected [ 254.086410] usb 1-1.3: Detected FT232BM [ 254.089293] usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB0 |
データシートを確認するとFT232BMの最大のボーレートは3Mということでした
(データシートのリンク先はこちらから)
WCH CH341
海外製 格安品_RS232C変換ケーブルのICを確認します
WCH製のCH341というUSBシリアル変換ICを使っていました。
実際に調べた結果は下記です。
1 2 3 4 5 6 7 8 9 |
[ 77.791640] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd [ 77.927951] usb 1-1.3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.54 [ 77.927967] usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0 [ 77.927980] usb 1-1.3: Product: USB2.0-Ser! [ 78.020775] usbcore: registered new interface driver usbserial_generic [ 78.020839] usbserial: USB Serial support registered for generic [ 78.023195] usbcore: registered new interface driver ch341 [ 78.023289] usbserial: USB Serial support registered for ch341-uart [ 78.026426] usb 1-1.3: ch341-uart converter now attached to ttyUSB0 |
データシートを確認するとCH341の最大のボーレートは2Mということでした
(データシートのリンク先はこちらから)
Prolific PL2303
usb-シリアル変換ケーブルのICを確認します。
Prolific Technology製PL2303というUSBシリアル変換ICを使っていました。
実際に調べた結果は下記です。
1 2 3 4 5 6 7 8 |
[ 508.526438] usb 1-1.3: new full-speed USB device number 5 using xhci_hcd [ 508.660882] usb 1-1.3: New USB device found, idVendor=067b, idProduct=2303, bcdDevice= 3.00 [ 508.660898] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 508.660911] usb 1-1.3: Product: USB-Serial Controller [ 508.660923] usb 1-1.3: Manufacturer: Prolific Technology Inc. [ 508.741518] usbcore: registered new interface driver pl2303 [ 508.741591] usbserial: USB Serial support registered for pl2303 [ 508.752953] usb 1-1.3: pl2303 converter now attached to ttyUSB0 |
データシートを確認するとPL2303の最大のボーレートは12Mということでした
(データシートのリンク先はこちらから)
シリアル通信のボーレートを最大に設定する
今回は最大ボーレートを12Mまで設定できるUSBシリアル変換ケーブルをメインに確認します。
シリアル通信のTX(送信)とGNDをプローブで掴みオシロで転送速度を測定します。
Pythonでシリアル通信をする場合
以前に下記記事でラズベリーパイとPythonでシリアル出力しました。
UARTでもRS232Cでも同じ対応が可能です。リンク先はこちらです。
今回もラズパイとPythonでUSBシリアル通信を行います
pyserialをインストール
Pythonでシリアル通信するために「pyserial」のパッケージをインストールします。
下記コマンドで簡単にインストールできました
ラズパイでPythonのプログラムを用意する
PythonでRS232C通信するプログラミングを行っていきます。
ラズベリーパイ(raspberry pi)はPythonがデフォルトでインストールされています。
一度もプログラミング・Pythonを使ったことが無い方でも大丈夫です。
下記記事でラズパイで簡単なプログラムの作成・実行方法を紹介しています
(リンク先はこちらから)
「~~.py」というファイルを作って、Pythonの環境開いて3行書いて実行すれば完了です。
下記プログラムをコピペしてもらっても構いません。
1 2 3 4 |
import serial ser = serial.Serial('/dev/ttyUSB0', 115200) ser.write(b'Hello World') |
Pythonのプログラムの内容
実際作成したプログラム内容も非常に簡単です。下記の2手順となっています
- 「pyserial」をインポートしてusb-シリアル変換(/dev/ttyUSB0)を使うように定義します
- RS232C(シリアル)通信で「Hello World」とWrite(出力)します。
Pythonでボーレートを変更する方法
Pythonを使ったシリアル通信のボーレートの変更の仕方は簡単です。
プログラム内の数字を変更するだけです。
ボーレートを12Mに速くしたいのであれば「12000000」にします。
また逆にボーレートを9600に遅くしたいのであれば「9600」にすればOKです
Teretermでシリアル通信をする場合
USBシリアル変換を使う場合、PC(パソコン)からTeretermで使う場合も多いと思います。
PCとTeretermを使ったUSBシリアル通信例は下記記事でも紹介しています(リンク先はこちら)
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を確認できました。
しかしスルーレートが限界で正常な電圧まで到達できないことが分かります。
まとめ
今回の記事をまとめますと下記になります。
今回オシロスコープで10Mbps以上の波形測定を行うことができました
趣味レベルのオシロのRIGOL DS1054Zでもシリアル通信の測定・解析が可能です
よろしければ皆さまもオシロスコープを触ってみてください
コメント