RS232CとUARTの違いをアナライザで確認してみた

本サイトはアフィリエイト広告を利用しています。
インターフェース

今回は筆者が持っているラズベリーパイとRS232Cを接続してRS232CとUARTの違いをアナライザで確認してみた」を紹介します

 

RS232CとUART通信の差を比較するまでの手順を紹介しています。「自分でRS232Cを色々解析してみたい!」という方におススメな記事となっています

 

過去記事の「UART通信のシリアル波形をアナライザで解析してみた」でUARTでも同様に解析しました。UARTのことも調べたいという方は下記記事をご覧ください

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

 

スポンサーリンク

RS232CとUARTの違い

RS232CとUARTの違いに関しては既にネットの先人たちが多くの記事を書いてくださっているので大分省略しますが、大きな違いとして2点あります。

出力電圧レベル

①出力電圧レベルが異なる
RS232C ・・・出力電圧がH_+5V~+15V、L_-5V~-15V
UART ・・・出力電圧がH_2.8V~3.3V、L_0V~0.5V

※RS232C・UARTともにIC次第で電圧レベルが差がありますので詳細は使用するICのデータシートをご確認ください。上記はあくまで1例です。

 

実際にオシロでRS232C・UARTの電圧レベルを確認した記事が下記になります。

よろしければご覧ください。(リンク先はこちら)

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

 

信号論理

②信号論理が逆
RS232C ・・・アクティブHi
UART ・・・アクティブLow

この違いを踏まえて記事を紹介していきます

 

ラズベリーパイとRS232C接続をしてみる

まずはRS232C通信環境をラズベリーパイを使って作っていきます。

 

今回の環境構成

ラズベリーパイとPCをRS232C接続はUARTと違いひと手間あります。電圧レベル・信号論理が異なるためインバータ(バッファ)を噛ます必要があります

実際につなげた写真がこちらとなります。

 

「ラズベリーパイ」「USB-RS232C変換モジュール」「インバータ(バッファ)」PCを接続しています。

 

インバータ(バッファ)はDIP形状のためブレッドボード上で接続をしています。

 

使用したICは「TC74HC4049AP」で汎用ICです電子部品パーツ店行けばどこにでも置いてあるようなインバータ(バッファ)です。

このICで電圧レベル・信号論理を変換します

 

USB-RS232C変換モジュールも一般的なものです。最近はAmazon経由で中国製品が安く買えるので助かっています。

 

コネクタになっているので、ピンに直接ジャンパー接続してあげましょう

 

筆者のは少し型が古いラズベリーパイですが、UART(RS232C)をつなぐのは新旧ともに簡単にできます。

 

USB-RS232C変換モジュールは下記製品を使っています。非常に安くても機能的に問題無しです

 

TC74HC4049APも調べたらAmazonで一応売っていましたが、すごく高かったので安い電子パーツ店での購入をおススメします(20180817時点)

 

回路図(概要)

概要の回路図的には下記の形になります。インバータバッファを噛まして「3,3V」「GND」「TX」「RX」繋げるだけです。

 

点線箇所のUSB-RS232C変換IC(PC)は必要箇所だけ切り取った概要のブロック図となっています。

 

筆者のイメージで記載しているので省略・実際の回路と違うことがあることはご了承ください。(20180817時点での参考データシートはこちらから)

※1_ラズベリーパイのGPIOピン配置は新しい型に合わせています
※2_GND配線が見やすさ優先したため実配線箇所と異なっています
※3_TXD,RXD配線名はPC側視点で書いています

 

ソフト(Tereterm)

そしてPCからコンソール接続するソフト「Tereterm」を起動していきます

※Teretermの詳細に関してはググってもらえればすぐダウンロードサイトが出てきますので省略します。ダウンロードすればすぐに使えます

 

動作手順

下記がTeretermを動かした際の手順です。
①USB-RS232C変換モジュールをPCのUSBポートに挿す。ドライバが自動的にインストールされます

※今回のドライバはCH340というものでした

 

②最初の選択でシリアルを選択してUSB-RS232C変換のポートを選択します

 

③設定⇒ボーレートで115200を選択します。
※ボーレートというのは通信速度のことでラズベリーパイのデフォルト設定は115200となっていると思います。

 

④「Enter」を押してみましょう。ログイン画面が出てきます(もし電源投入時は初期のカーネルログが出てくると思います。)これで無事RS232C経由でUART通信ができました。

 

アナライザを使ってRS232Cの波形を次章から紹介してきたいと思います

 

アナライザを用意する

今回はRS232Cの「TX」「RX」を見ますのでアナライザを使って確認していきます。

 

最近はI2CやSPIなど数MHz,数十MHz程度の解析するアナライザが1000円足らずで買えます。筆者は色々触りたかったのでモジュール化されていないアナライザの開発ボードを買いました。

 

(値段は一番安く多くのピンで遊べますが、EEPROMなどの設定が必要ですのでマイコン初心者は少し難しいかもしれません)

 

本当にマイコン(サイプレス製CY7C68013A)が載っているだけのボードです。PCとUSB経由で接続して解析することができます。詳細は下記になります
MiniUSBケーブルとジャンパーワイヤは別で購入が必要です

 

但し数百円の差ですので下記のようなモジュールになっているアナライザを買った方が直ぐに測定できて楽できるかと思います。

 

PCとUSB接続してI2C,UART,SPIなど多くの通信を解析できます。USBケーブル、ジャンパーワイヤまで付いてきますので単に解析するだけならば筆者的には下記をおススメします

 

アナライザを使ってRS232Cの波形を確認する

アナライザにも配線する必要がありますので下記のようにブレッドボードで中継していきます

 

アナライザを使ってラズベリーパイ側の「TX」「RX」の箇所に接続します。
最初に説明したようにRS232Cだと電圧レベルがUARTと違いアナライザ側の定格超える恐れがあるためです。

 

そしてEnter押してラズベリーパイのログイン画面を表示した波形を確認します。

 

今回のRS232C-uartの通信内容

実際に回路図ベースでイメージすると下記のような内容になります

 

①USB-RS232C変換モジュール(PC)側から「Enter」のキー入力がラズベリーパイ側に送信されます

②ラズベリーパイ側からログイン画面の表示がUSB-RS232C変換モジュールに送信されます

 

波形をアナライザで解析する

そして実際にとれた波形の一部が下記です。無事「TX」「RX」の波形を取れました。(この波形では①②の全体波形を示しています)
※TX,RXは上記回路図の信号シンボル通りUSB-RS232C変換モジュール側の視点です

 

これだけだと何のデータか分からないので前回同様解析の設定でUARTを選択します。正しい波形が取れていれば勝手に解析をしてくれます

 

これで、無事アナライザでUARTの解析ができました。下記のように各bit、[Start bit][Stop bit]のデータが視覚的に分かるようになります。

 

今回はRS232CとUARTの信号論理が本当に逆になっているかを次の章から確認してみます

 

RS232CとUARTの信号論理の違いを見てみる

信号論理をアナライザで測定したいのですが、前章で記述したように電圧レベルが異なりRS232Cを直接アナライザで測定できません。

 

※マイナス電圧域を測定できるオシロがあれば測定可能ですが、筆者含めてプライベートでオシロを持っている方は非常に少ないと思いますので今回は別案でいきます

 

従来の「インバータバッファ」を「バッファ」に改造してラズベリーパイ側でRS232Cの信号論理をそのままで測定します

 

ブレッドボード上の使うICを変更します。型番一つ違いのICです。これも電子パーツ店で安く入手できます。同じDIPの形状ですので置き換えるだけで改造も簡単です。

従来_インバータバッファ TC74HC4049AP
改造_     バッファ TC74HC4050AP

 

では実際に従来(UART)改造(RS-232C)の波形を並べてみました。

枠で囲っているTXの波形の信号論理が逆になっていることを確認できています

 

これで実際に信号論理がUARTとRS232Cで逆になっていることが十分に確認できました

余談_改造後のコンソール表示

半分余談になりますがせっかくなので、改造状態の場合Teretermのコンソール上ではどのように表示されるのかを確認してみます。

Enterを押すと改行されず「C」が返ってきます。

 

従来のUARTでのEnterの改行は「CR_0x0d」ですので逆値の[0xF2]になると思いきや全く異なる値になっています。このカラクリについて少し考えてみます

 

これは「信号論理が逆」「Start bitが送信と受信で2回ずれる」と、「ASCII文字が「0x7f」で終わっている」ことが影響していそうです。フローとしては下記流れだと思います

 

①USB-RS232C側から0x0d(CR)が送信される
0x0d= [10110000]

②ラズベリ-パイ側が受け取る際に「信号論理が逆」+「Start bitがずれる」0x79として受信する
0x79= [_10011110]

③ラズベリ-パイ側から0x79が送信される
0x79= [_10011110]

④USB-RS232C側が受け取る際に「信号論理が逆」+「Start bitがずれる」0xC3として受信する
0xC3= [__11000011]
さらにASCII文字は基本0x7fまでしかないので一番上のbitは無視され0x43として判断する
0x43= [__?1000011]

 

例えば①⇒②の「信号論理が逆」+「Start bitがずれる」イメージとしては先ほどの下記波形で見ると分かりやすいです

 

RS232Cをつなげる際は信号論理が逆になっていることを気にしないとデータが簡単に壊れてしまうので注意しましょう。

 

まとめ・感想

結局のところRS232CとUARTの違いとしては「①電圧レベルが異なること」「②信号論理が逆なこと」がメインだと思います。

この2つを忘れて接続するとICが壊れたり、データが壊れたりするので(筆者含めて)忘れないようにしないといけませんね。

 

データシート見て確認するのもいいですが、やはり実物の波形見ることでよりUART・RS232Cの理解が深まると思います。よろしければ皆様もアナライザを購入して確認してみてください

 

<<20190512追記>>
シリアル(uart)通信でRead/Write・ボーレート変更時の波形をアナライザで確認しました。

Pythonとraspberry piでテストして測定動画も撮っており、シリアル通信を分かりやすく説明した記事となっています。(リンク先はこちらから)

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

 

 

コメント

  1. 電子工作初心者 より:

    いつも楽しく拝見しております。

    TC74HC4049APやTC74HC4050APのデータシートを見ると、入力電圧0~15V。
    一方RS232Cの出力電圧は、H_+5V~+15V、L_-5V~-15V。
    初心者の感覚では、RS232CのL出力(マイナス電圧)を、TC74HC4049APに入力してはいけないように思える(入力電圧の動作範囲がプラスなので壊れる?)のですが、
    実際そうではないんですよね。。。難しい。。。