(2021.7.23 作成)
コメントを頂きましたので、それを機に少しDSLogicを触ってみましたので紹介してみたいと思います。その1はこちら。
さて今回の題材として使用するのは以前作成した温度計測ロガーです。半日程度ロギングしたら知らぬ間に止まっていることがあったので、ちょうどよい機会かと思いました。結果としては残念ながら再現しなかったので、原因は不明なままなのですが、DSLogicの使用法については理解できました。
この引き出した線にDSLogicを接続します。今回使用しているSPIは1MHzで動いていますので、GNDは1点だけ接続しました。5MHz以上だとすべてのケーブルのGNDを接続したほうがいいみたいですね。
これだけで13chありますので、GNDを合わせて14本も接続しています。よって見ての通りぐちゃぐちゃです。。。
まずは長時間記録ということでStreamモードを試してみました。これに対する用語としてBufferモードというのがあるのですが、Streamと言うのは取得したデータを順次PCに転送することで長時間記録するモードです。欠点はサンプリングレートが遅くなってしまうことですね。
最大サンプリングレートはマニュアルに記載があります。今回の場合13chあるのですが、1MHzの信号なので見るので4~5MHzのサンプリングレートで十分です。
Streamモードでも20MHzまで対応しているのでマイコンを使用した趣味レベルでは十分なレートだと思います。
また記録できる時間ですが、Bufferモードについては私の購入したPro版の場合は基板にバッファがあるので256MByte/Ch数だけ記録できます。一方今回使用するStreamモードではCh数によらず16Gbyteまで記録できます。具体的には今回4MHzで記録したのですが、
16 x 10243 [Byte] / 4 x 106 [Hz] = 4295[s] = 1.19[h]だけ記録できます。しかしこの転送後のデータはPCのメモリに保存されるので、PCのメモリに十分空き容量がないとフルには記録できないです。管理人のPC(RAM 8GB)では20minぐらいがいいところだと思います。
左の画像は取得したデータの一部を拡大したものです。Ch0,1 がディスプレイ用の偽I2C、Ch3~8が温度センサ、Ch9~12がSDカードです。
また上半分にはデコードした内容が表示されるのですが、この時間分解能だと表示されていないです。もちろん拡大すれば信号を読むことができます。
ということできちんと20分間記録され、任意の時間のデータを拡大して見ることができることが分かりました。
上述の通りStreamモードを使用することで20分程度は記録できることはわかりました。しかし今回は半日ほどでいつの間にか止まっているというのが問題です。こういった場合はStreamモードよりAdvanced triggerを使用する方が適していると思います。
このAdvanced triggerですが、例えばデータラインが一定時間動かなければ記録する、特定のデータが来た時に記録するなど複雑なトリガ条件を設定することができます。
ここでは例としてI2CのSCLがLowの状態が0.5秒続いた時をトリガとする設定をしてみました。
詳しい設定は右の画像を見てみてください。この画像で左上を見てみると10MHz, 2秒間のデータを記録するように設定しています。
そして右側のペインを見てみるとTrigger positionが70%と設定されているため、2[s] x 0.7 = 1.4[s]のバッファが準備されるということになります。
またトリガ条件としてstage0のCh0(SCL)が0(Low Level)で、この状態が5,000,000カウント (10MHzなので0.5秒)続くとトリガになる、と設定しています。
この結果画像の様にシステムの電源断をトリガとして1.4-0.5=0.9秒間だけ正常な信号が記録され、電源断後0.5秒経過した1.4[s]のタイミングでトリガが発生して記録されています。
実際の開発ではたまに変なデータが来るとか、気づいたら止まっているなどがよく起き、泥沼にはまることがありますのでこういった機能をフル活用して効率的にデバッグを行いたいところです。