前回はVDS3104で保存したバイナリーデータを解析して、matplotlibで表示するようにしてみました。今回は、さらに実用的な、波形のタイミング解析ツールを作ってみました。
タイミング解析とは
I2CやSPIなどで通信するデバイスには、データを正しく送受信するために信号エッジ(立上り/立下り)の時間関係が規定されており、それらが実際に規定値範囲内に収まっているか確認する必要があります。それを調べるのがタイミング解析です。
I2Cには信号線は2本しかありませんが、スタートコンディション、ストップコンディションといった、伝送されるデータ本体以外の状態もあり、解析すべきタイミング項目は十数項目以上あります。
以下に、Start condition hold time と、Start contditon setup timeの解析例を示します。(この例では、テスト用に生成した波形データを解析しています)
さらに、同じSDAの変化でも立上りと立下りでは特性が違います。また、マスターが送信している時には受信側であるスレーブの規定を満たす必要がありますし、スレーブが送信している時には受信側であるマスターの規定を満たす必要がありますので、それらを区別して解析する必要があります。
以下に、VDS3104で実際に採取したデータでの Data input setup time の解析例を示します。マスター→スレーブの波形(上側の2枚)とスレーブ→マスターの波形(下側の2枚)ではタイミングがかなり違っていることがわかります。
タイミング解析ツール
ここに貼り付けるにはコードサイズが大きくなりすぎたので、githubで公開しています。
https://github.com/nachtele/TimAn
概要
- オシロスコープ等の波形データについてタイミング解析するツールです。(Setup Time、Hold Time、等)
- matplotlibにより、解析結果に基づいた波形画像を生成することができます。画像生成対象は、各解析項目について、全データ、もしくは最小値、最大値を選ぶことができます。
- openpyxlにより、解析結果一覧と画像を張り付けたxlsxファイルを生成することができます。(LibreOffice Calc等でも開けます)
- リスト形式の設定を作成することで、各種通信プロトコルなどに対応できます。とりあえずI2CとSPIの設定を作ってみました。
- OWON VDSシリーズのバイナリーデータに対応したデータ読み取りモジュールを用意しています。これを差し替えれば他のオシロスコープにも対応できます。
対象環境
python3
ファイル構成
- /src
- VdsTimAn_I2C.py (実行ファイル)VDSシリーズ用I2Cタイミング解析
- TimAn.py タイミング解析
- TimAnSettings.py 解析・画像生成設定
- TimAnMakeFig.py 波形画像生成
- vdsDat.py VDSシリーズ用データ読み取り
- getArgs.py コマンドライン引数取得
- /test
- Ex01_TimAn_I2C.py 波形解析テスト用(I2C)
- Ex01_TimAn_SPI.py 波形解析テスト用(SPI)
使用方法
VdsTimAn_I2C.py
OWONのVDSシリーズでバイナリーデータとして保存したI2C波形をタイミング解析する例です。
このコードでは、Ch1にSCL、Ch2にSDAを割り当てています。違う割り当ての場合は適宜書き換えてください。
出力ディレクトリー "ta_年月日_時分秒" を自動生成してそこに波形画像をpng形式で保存します。また、それらの画像を張り付けたシートと解析結果一覧のシートで構成したxlsxファイル "ta_年月日_時分秒.xlsx" を生成します。
python VdsTimAn_I2C.py (データファイル名) [-s (メイン領域分割数)]
Ex01_TimAn_I2C.py, Ex01_TimAn_SPI.py
波形解析のテスト用。疑似データを生成して解析・画像生成をテストするツールです(I2C, SPI用)。
TimAn.py、TimAnSettings.py、TimAnMakeFig.pyを同じディレクトリーに置いて実行してください。
python Ex01_TimAn_I2C.py
次回から、もう少し詳しく解説していきます。