この記事ではSiglent製オシロスコープ(SDS804X)と評価ボード(STB3)を用いてシリアル通信(UART、SPI、I2C)を解析する方法を解説します。
評価ボードSTB3の仕様
STB3はオシロスコープの操作を習得するために設計された評価ボードです。様々な種類の信号(正弦波、矩形波、バースト信号、AM変調波、シリアル信号など)を発生させることが可能で、オシロスコープの機能を試してみるのにはうってつけの基板です。
シリアル通信の種類は基板左上のSERIAL PROTOCOLと印字されたタクトスイッチ(S8)によって切り替えることが可能で、基板中央のLEDで現在のステータスを確認できます。
またシリアル通信に関わる信号は基板下部のピンヘッダーから出力されます。
SDS804Xのデコード機能
SDS804Xはエントリークラスのオシロスコープでありながら、多数のデコード・トリガー機能を有しています。デコード機能に関してはマイコンでよく使用されているUART、SPI、I2Cだけでなく、自動車の分野で使用頻度の高いCAN、LINまでサポートしています。デコード機能はデバッグで特に威力を発揮し、専用トリガーと組み合わせることで不具合の原因となるバグを迅速に見つけ出すことができます。
UARTの解析方法
UARTとは
UARTは全二重・非同期式のシリアル通信です。
全二重通信のため送信Txと受信Rxの2つの端子を備えています。また非同期で通信を行うためにボーレートによって通信速度を規定しています。UARTでは9,600bps、また 115,200bpsに設定することが多いです。
測定セットアップ
STB3でUART信号を測定するにはSERIAL PROTOCOLボタン(S8)を押下して、UARTと印字されたLED(HL1)を点灯させます。そしてプローブはピンヘッダー(J23)に接続します。グランドリードはGNDと印字されたピンヘッダー(J32など)に接続します。
接続が完了したら、トリガーの当たりをつけるためにAuto Setupボタンを押します。すると波形は完全にロックされませんが、ぼんやりと波形の特徴が確認できます。
ここではバースト信号全体が確認できるように時間スケールを10ms/div、オフセット時間を25msに変更します。
UART信号の仕様
トリガーをかけるためにはUART信号の仕様を確認しておく必要があります。STB3から出力されるUART信号の仕様は以下のとおりです。
ボーレートが9,600bps、データ長は8ビット、奇数パリティ、ストップビットが2ビットとなっています。
MSBとLSB
MSBはMost Significant Bitの頭文字を取ったもので、日本語では最上位ビットを意味します。反対に最下位ビットのことをLSB(Least Significant Bit)といいます。今回の仕様ではMSB firstが選択されているため、最上位ビットのデータから順に送信されます。
パリティビットとは
パリティビットはデータが正しく伝送されたかどうかをチェックするためのビットです。データビットの後ろに1ビット分の幅をもっており、偶数パリティ(EVEN)、奇数パリティ(ODD)、パリティなしから選択できます。奇数パリティではデータビットとパリティビットの「1」の数が奇数となるようにパリティビットの値が調整されます。
トリガーセットアップ
UART信号の仕様をもとにSDS804Xのトリガーを設定します。TriggerのSetupボタンを押して「Type」を「Edge」から「Serial」に変更します。
シリアル通信の種類は「Protocol」から「UART」を選択します。つづいて「Signal」から「Tx」と「Rx」のトリガーレベルを設定します。STB3は電源電圧Vddが3.3Vなので、トリガーのしきい値(Threshold)は1.5V程度としておくとよいです。
「Trigger Setting」は「Source Type」を「Tx」、「Condition」を「Start」に設定しています。これでTxの信号がStart状態になったタイミングでトリガーがかかるようになります。
「BusConfig」からUARTの仕様に沿って各項目を設定します。
デコードセットアップ
トリガーのセットアップが完了したら、次はデコードの設定です。デコード機能はフロントパネルの「Decode」ボタンを押します。まずは「Bus Protocol」を「UART」に変更します。
つぎに各種設定をトリガーから呼び出します。「Protocol Copy」から「Copy From Trigger」を選択します。するとトリガーセットアップの設定内容がデコードセットアップに反映されます。
「Protocol Signals」からRxとTxのチャネルを指定します。ただし今回はRxを測定しないため「Rx」は「Disable」、「Tx」を「C1」としてます。
波形の解析
シングルトリガーをかけて波形の更新を止めて、ズームボタンで波形を拡大してみます。
すると1つ目のバースト信号に対して、デコーダーは「S」と表示しています。つまりこの8ビットのデータがASCIIコードで「S」の文字に当たるということです。
表示形式の変更
ここではデータの表示形式がASCIIコードとなっていますが、表示形式は「Bus Display」の「Format」から2進数(Binary)、10進数(Decimal)、16進数(HEX)に変更できます。例えば16進数に変更してみると、1つ目のバースト信号に対してデコーダーは「0x53」という値を示します。
1つ目の信号が16進数で53となるのはSTB3のデータシートにも記載されています。
その後「49」「47」「4C」「45」「4E」「54」「5F」と続いていき、「XX」にはランダムな数値が割り当てられます。
リスト表示
すべてのデータを一括で確認するにはリストを使用すると便利です。リストを表示するには「Result List」から「Display」を「Bus1」を選択します。すると画面下部にデコードした結果がリストとして表示されます。
TXの列のデータを見ると、データシートに記載されたとおりの数値が並んでいることが確認できます。またここで表示形式をASCIIに戻すと送られているデータの意味を解読できます。
上から順に「S」「I」「G」「L」「E」「N」「T」となっており、メーカー名のSIGLENTの文字データが送られていたことがわかります。なお8つ目が“_”でそれ以降はランダムに適当な文字が表示されます。
SPIの解析方法
SPIとは
SPIは全二重・同期式のシリアル通信です。1対多の通信に対応しており、1つのマスターに対して複数の周辺デバイス(ペリフェラル)を接続できます。
マイコンがマスター、周辺デバイスがスレーブとなり、マスターからスレーブにデータを送信する場合はMOSI(Master Out Slave In)端子、マスターがスレーブからデータを受信する場合はMISO(Master In Slave Out)端子を使用します。また通信対象のデバイスはCS(Chip Select)端子で指定でき、CSがLowになったデバイスと通信します。
測定セットアップ
STB3のSERIAL PROTOCOLボタン(S8)を押下して、SPIと印字されたLED(HL2)を点灯させます。ここではSCLK、MOSI、CSの3つの信号を測定します。
チャネル1はSPI SCLKと印字されたピンヘッダー(J24)に接続します。チャネル2はSPI MOSIと印字されたピンヘッダー(J23)に接続します。チャネル3は10ピンのピンヘッダー(J13)のCSと印字された箇所に接続します。接続が完了したら、チャネル1~3をアクティブ状態にしてAuto Setupボタンを押します。
このままだと波形が見づらいので、各チャネルのスケールとオフセットを変更します。
ここではいずれも2V/divとし、オフセット電圧はチャネル1が2.5V、チャネル2が-2.5V、チャネル3が-7Vとしています。また横軸については1つのバースト信号が画面内に収まるように時間スケールやオフセットを調整します。
SPI信号の仕様
STB3から出力されるSPI信号の仕様は以下のとおりです。
通信速度が1Mbps、データ長が8ビット、CSはActive Lowとなっています。
クロックの極性と位相の設定
CPOLビットとCPHAビットはクロックの極性と位相を設定するためのものです。SPIではこの2つのビットの組み合わせによって、4つのモードを選択できます。
CPOL=1、CPHA=1のときはSCLKのアイドル状態がHighで、SCLKの立ち上がりエッジに合わせてSDAのデータをサンプリングします。
トリガーセットアップ
SPI信号の仕様をもとにSDS804Xのトリガーを設定します。TriggerのSetupボタンを押して「Type」を「Edge」から「Serial」に変更します。シリアル通信の種類は「Protocol」から「SPI」を選択します。
次に「Signal」からチャネルと信号の関係性を設定します。ここではSCLKがチャネル1、MOSIがチャネル2、CSがチャネル3としています。なおMISOもチャネル2となっていますが、この時点では無視してください。
「Trigger Setting」ではトリガー条件を指定します。デフォルトは「Position Type」が「Any」となっていますが、「Value」を選択すれば「Start bit」の位置が設定できます。今回はデフォルトのままとします。
またトリガーの設定が変更されたことによって波形の見え方が変わるため、改めてオフセット時間を調整します。ここでは60usとしています。
デコードセットアップ
デコード機能を有効にするためにフロントパネルの「Decode」ボタンを押し、「Bus Protocol」を「SPI」に変更します。
次に「Protocol Copy」から「Copy From Trigger」を選択します。
すると画面上にデコードされた結果が表示されます。
SPI信号を解析するだけならこのままの状態でも問題ありませんが、不要な信号であるMISOを非表示にします。非表示にする方法は「Protocol Signals」から「MISO」を選択して、チャネルソースを「Disable」にします。
波形の解析
Formatが「ASCII」に設定されている場合は、デコーダーに「SIGLENT_****(*はランダムで変化)」という文字列として表示されているはずです。
表示形式の変更
ここではデータシート通りに出力されているかを確認するために16進数表示に変更します。変更方法は「Bus Display」のFormatから「Hex」を選択します。
するとデコーダーが16進数表記に変化します。
左から順に「53」「49」「47」「4C」「45」「4E」「54」「5F」と続いており、仕様通りの信号が出力されていることが確認できます。
リスト表示
UARTと同様にデコード結果をリスト表示することも可能です。リスト表示するには「Result List」のDisplayを「Bus1」に設定します。すると画面下部にデコード結果がリストとして表示されます。
「Format」を再度「ASCII」に変更すると、上から順に上から順に「S」「I」「G」「L」「E」「N」「T」という文字列が表示されていることも確認できます。
© 2024 T&Mコーポレーション株式会社