2022/8/15
製品
カテゴリー
タグ
9691 Views
[ラインモニタ機能]コマンドファイルの書き方
説明するのは以下の内容です。
Contents
機能概要
コマンド定義ファイルを使って、取得した通信データが意味する内容を定義することができます。これにより、ラインモニタレポートに通信コマンド内容が表示されることで、通信のシーケンス確認が容易になります。従来のオシロスコープで通信波形を取得と通信仕様書と照らし合わせることを繰り返す確認作業は、不要になります。
コマンドファイルの記述方法
コマンドファイル(拡張子.txt)に記述する内容と、記述することでラインモニタレポート上のどの部分に変化があるかを説明します。
ベースフォーマット
// 定義ライン名
[I2C]
// $(定義データ指定)=(Commandに表示する内容),,(Infoに表示する内容)
$80hxxh=Master,,ReadDistReg
通信プロトコルの種類を記述する
DT+Traceのラインモニタ機能でキャプチャできる通信プロトコルは、SPI/I2C/UARTです。通信プロトコル名を[ ]で括ります。
コマンド定義の対象とするデータパターンを記述する
コマンド定義の対象とするデータパターンを $ から = の間に記述します。コマンドファイル上で定義した値と、モニタした値が合致する必要があります。80h または 81H のように、2桁の16進文字を記述し、 h or H で区切ることで指定できます。また、値を記述すべき箇所に、x や X で指定することで、その値が何でも良いことを示します。(ワイルドカード)
※2進数で指定も可能です。詳細はDT+Traceアプリケーションのヘルプ [ラインモニタのコマンドフォーマット]をご確認ください。
なお、データ長およびデータの値は、完全一致で反映されます。例えば、5byteで1パケットのデータを取得し、3byteで1パケットの値を定義して仮に3byte分が一致しいても、データ長が一致しないため反映されません。
また、ラインモニタ機能では、1パケット1~256byteのデータ長まで解釈できます。
定義したい内容を記述する
定義したデータとモニタしたデータが合致した場合に、Command列やInfo列に表示させる文字を指定します。日本語も使用可能です。決められた書式を使用することで、モニタしたデータ内容を表示することも可能です。※応用編にて詳細解説します。
Command列に表示させたい内容は、= と ,, の間に記述します。
Info列に表示させたい内容は、,, 以降に記述します。
コマンドファイルの適用例
ここからは、実際の環境に適応する例を用いて説明します。
サンプル環境
- マイコンと距離センサモジュールがI2Cで通信をしている
- Master:マイコン Slave:距離センサモジュール
Master ⇒ Slave は1パケット2byte
// 定義ライン名
[I2C]
// 2byteの通信
// 1byte目が80固定
// 2byte目はワイルドカード
// ⇒ 「Master」をCommand列に表示
$80hxxh=Master,,
----------
[I2C]
// 2byte目の値に応じて、「ReadDistReg」か「RESET」をInfo列に表示させたい場合は必要分定義
$80h5Eh=Master,,ReadDistReg
$80hFFh=Master,,RESET
Slave ⇒ Master は1パケット3byte
// 定義ライン名
[I2C]
// 3byteの通信
// 1byte目が81固定
// 2byte目が68~6Bの不定
// 3byte目はワイルドカード
$81h68hxxh=Slave,,Dist≒26.00 cm
$81h69hxxh=Slave,,Dist≒26.25 cm
$81h6Ahxxh=Slave,,Dist≒26.50 cm
$81h6Bhxxh=Slave,,Dist≒26.75 cm
応用編 ~Dataの値をCommand/Infoに引用したい場合~
サンプルの環境で、Slave ⇒ Master のデータは1パケット3byteでした。そのうえ3byte目のデータについてはワイルドカードで指定しています。そこで、ここからは、Data列の情報を引数として、Command/Infoに表示させる手順を説明します。
コマンドファイル上で引数を指定する書き方
コマンドファイルでは、「%(書式,引数)」 の形式で記述することで、モニタした生の値「ラインモニタレポート上のData列に表示されている内容」を引数として、CommandやInfoの情報として使用可能です。
今回は、「2byte目と3byte目の値を2桁の16進数で表示」してみます。手順は以下の通りです。
- 書式部分に記述する項目
- 最小表示文字数:02 (少なくとも2文字分表示し、不足分は0で埋まる意)
- 表示形式:x (小文字16進数で表示する意)
- 引数部分に記述する項目
- 2byte目が引数:d2 (d の次の数字byte目を表示する意)
- 3byte目が引数:d3 (d の次の数字byte目を表示する意)
したがって、以下のような記述になります。今回の例では、Info列にのみ適応していますが、同じ記述をしてあげれば、Command列にも指定できます。
// 定義ライン名
[I2C]
// 3byteの通信
// 1byte目が81固定
// 2byte目が68~6Bの不定
// 3byte目はワイルドカード
// Infoには2byte目および3byte目の値を「DistReg = 0x(2byte目) , 0x(3byte目)」の形式で表示
$81h68hxxh=Slave,,DistReg=0x%(02x, d2), 0x%(02x, d3), Dist≒26.00 cm
$81h69hxxh=Slave,,DistReg=0x%(02x, d2), 0x%(02x, d3), Dist≒26.25 cm
$81h6Ahxxh=Slave,,DistReg=0x%(02x, d2), 0x%(02x, d3), Dist≒26.50 cm
$81h6Bhxxh=Slave,,DistReg=0x%(02x, d2), 0x%(02x, d3), Dist≒26.75 cm
適応後の表示
※最小表示文字数や表示形式、引数の記号については、書きたい書き方によって異なります。詳細はDT+Traceアプリケーションのヘルプ [ラインモニタのコマンドフォーマット]をご確認ください。
ご不明な点がありましたら、弊社サポートチームまでご連絡ください。
コマンドファイルのサンプル
// 定義ライン名
[I2C]
// 2byteの通信
// 1byte目が80指定
// 2byte目が5E指定
// ⇒ 「Master」をCommand列に表示 / 「ReadDistReg」をInfo列に表示
$80h5Eh=Master,,ReadDistReg
// 3byteの通信
// 1byte目が81指定
// 2byte目が65指定
// 3byte目は指定なし(xはワイルドカード)
// ⇒「Slave」をCommand列に表示
// ⇒2byte目及び3byte目を引数として「DistReg=0x(2byte目16進文字),0x(3byte目16進文字),Dist≒25.25 cm」をInfo列に表示
$81h65hxxh=Slave,,DistReg=0x%(02x, d2), 0x%(02x, d3), Dist≒25.25 cm
// 3byteの通信
// 1byte目が81指定
// 2byte目が6B指定
// 3byte目は指定なし(xはワイルドカード)
// ⇒「Slave」をCommand列に表示
// ⇒2byte目及び3byte目を引数として「DistReg=0x(2byte目16進文字),0x(3byte目16進文字),Dist≒26.75 cm」をInfo列に表示
$81h6Bhxxh=Slave,,DistReg=0x%(02x, d2), 0x%(02x, d3), Dist≒26.75 cm
Q&A
記述が重複している場合はどうなる?
⇒先(上)に記述されているものが適用されます。
Xbyte目の値によって、パケット数が可変長なんだけど、完全一致でないとだめ?
⇒バイト数及び記述内容の完全一致で表示可能です。(ワイルドカードは使用可能)
I2Cの(N)や、UARTの(P)/(F)って何者?
⇒I2Cの(N)は、NACK。ACK(1)があるべき位置にACK確認できない場合に表示されます。
UARTの(P)は、パリティエラー。設定されているパリティビットと計測されたパリティビットに差がある場合に表示されます。
UARTの(F)は、フレーミングエラー。ストップビットのあるべき位置にストップビットが確認できない(0)場合に表示されます。
UART通信でパリティエラーやフレーミングエラーはないはずなんだけど・・・
⇒処理上で指定しているBPSと、実測BPSに差分がある可能性があります。
設計上のBPS ± 100BPS程度を指定して再解析をかけることによって改善する場合があります。
※取った波形に対して設定に応じて解析をかけるので、波形を再取得しなくてもBPSなどの設定を変更して再解析することで確認できます。
各通信のキャプチャ可能なスペックは?
⇒各通信のスペックは以下の通りです。
通信 | スペック |
---|---|
SPI | 最大クロックスピート:10MHz |
I2C | 最大クロックスピード:5MHz |
UART | ボーレート:110~921600BPS |
※波形品質によっては信号検出用しきい値の調整が必要です。
ラインモニタ機能使用時はエッジトリガーを指定します。
ロジックCHと各通信のCH指定は?
DBOX+Trace Logic Board CH | 説明 |
---|---|
1 | SPI通信のCLKに接続 |
2 | SPI通信のCSに接続 |
3 | SPI通信のMISOに接続 |
4 | SPI通信のMOSIに接続 |
5 | I2C通信のSCLに接続 |
6 | I2C通信のSDAに接続 |
7 | UART通信のTXDに接続 |
8 | UART通信のRXDに接続 |