2020年9月16日
USBアナライザーで仮想COMポートのシリアル通信を観察
最近のパソコンにはシリアルポートがないため、USBとシリアルの変換アダプタを使って、仮想COMポートでRS-232CやTTLのシリアル通信を行うことが多いのではないでしょうか。パソコン側がターミナルソフトではなく専用のアプリケーションである場合、実際にやり取りされるシリアル通信のデータを見るのは意外と難しかったりします。
USBシリアル変換アダプタを使っている場合、シリアル側にシリアル通信用のプロトコルアナライザーを接続することができます。しかし最近は、USBシリアル変換を内蔵したマイコンボードなども増えてきており、シリアル側にデータを見るための接続を追加するのが難しいことも少なくありません。
そこで今回は、仮想COMのシリアル通信をUSB通信として観察するとどのように見えるのかを確認してみました。
■接続構成と実験方法
パソコンのUSBにUSBシリアル変換アダプタを接続し、アダプタのシリアル側(RS-232C)にはシリアル通信対応のプロトコルアナライザー LE-3500XR (以下、シリアルアナライザー)を接続します。パソコンのソフトからシリアルアナライザーに対してASCII文字列「1234」を送信し、シリアルアナライザーはそのデータを受け取ったらパソコンに対して「5678」を返します。
そして、パソコンと変換アダプタの間にUSBアナライザー LE-650H2 を挟んで、USBケーブルを流れるデータをキャプチャします。
今回は市販の2種類のUSBシリアル変換アダプタで実験を行いました。
■結果
上記のような構成でUSBのデータを観察したところ、シリアル通信でやり取りされるデータ列をそのままUSB通信データの中でも確認することができました。なお、USBの通信データを見る場合、大量のNAKトランザクションが邪魔になるため、以下に紹介するスクリーンショットや動画では、LE-650H2のフィルタ機能を使って有用なデータのみを表示するようにしています。
[ LE-650H2のフィルタ設定 ]
<USBシリアル変換ケーブルの例1>
[ アナライザーでキャプチャ中の様子(動画) ]
このように、OUTにパソコンから送信された「1234」、INにシリアルアナライザーから送信された「5678」が、それぞれ16進数で1文字ずつ表示されているのが分かります。この表示状態は、フィルタを使ってSOFパケットとIN-NAKトランザクションというデータを非表示にしていますが、それらを除いては、シリアル通信データに相当するデータ以外は流れていないようです。
<USBシリアル変換ケーブルの例2>
[ アナライザーでキャプチャ中の様子(動画) ]
別のUSBシリアル変換アダプタでも確認してみました。1とは別のメーカー製の変換アダプタで別の変換チップを使っています。送受信しているシリアル通信のデータ、シリアルの通信条件は同じです。
例1とは異なり、IN側の「5678」が1つのパケット内にまとめて送信されています。また、IN側にはシリアル通信データとは関係なさそうなデータが常時流れており、OUT側の「1234」が1文字毎にかなりばらけて表示されています。ただし、この例においても、シリアル通信データに相当する部分を追っていくことは難しくありません。
■まとめ
USBアナライザーでUSBの通信データを観察すると、USBを通過している仮想COMのシリアル通信データがかなりそのまま見えることが分かりました。USB仮想COMを使用する機器のデバッグ作業などで、活用できることがあるかも知れません。
なお、今回の実験においてシリアル側ではRS-232Cの制御線を使っていません。制御線を使っている場合、その情報もUSBを通してやり取りされるため、通信データとは異なるデータがUSB上に出現することになります。また、今回の例では2種類のUSBシリアル変換アダプタにおいて、どちらでもすぐに通信データを判別することができましたが、これもアダプタ製品や搭載しているUSBシリアル変換チップの種類によって異なる可能性があります。