TT Lab
はじめる
学ぶ 学習パス コース

センサーは正常なのに、ボードが聞き取れない

ファイルの中にビットはない

TT Labで続きを見る

一言でいうと

キャプチャファイルは、電圧のリストにすぎません。ビットはそこにはなく、しきい値と時間軸を決めた瞬間に生まれます。

なぜ必要なのか

現場で最もよく出る一言があります。「センサーは正常なのに、ボードが聞き取れません」。この言葉が出たということは、すでに両側を別々に試したということです。センサーを別のボードにつなぐと読めて、ボードに別のセンサーをつなぐと読めます。ところが、この2つをつなぐと読めません。残るのは両者の間の線で、線で起きることは計算では出てきません。測る必要があります。

測り終えたあとに手元に残るのは、絵ではなく数値の表です。ロジックアナライザーでもオシロスコープでも、保存ボタンを押すと出てくるのは、「何番目のサンプルで、この線は何ボルトだったか」の並びです。このコースが扱うのが、その表です。表をビットに、ビットをバイトに、バイトを「何が間違っている」という文に変える作業です。

ここで初心者が最も多くする勘違いは、波形表示ツールが見せる1010...がファイルの中に入っていると信じることです。入っていません。ツールがしきい値を1つ選び、時間軸を1つ選び、その2つの選択で作り出したものです。選択が間違っていれば、同じファイルから別の答えが出ます。そしてツールは、自分が何を選んだのかを、わざわざ教えてくれません。

どう動くのか

サンプル1つは、時刻と電圧の組です。時刻はたいていファイルに書かれておらず、ヘッダーのサンプルレートとサンプル番号から計算します。500kHzで取ったファイルのサンプル番号312は、312 ÷ 500,000 = 624µsの地点です。サンプルレートが読めなければ時間軸がなく、時間軸がなければボーレートもクロックの周期も測れません。

# labhub-capture v1
# sample_rate_hz=500000
# channels=rx
n,rx_v
310,3.30
311,3.29
312,2.36      <- 여기서 내려가기 시작한다
313,1.48      <- 1.65 V 로 보면 여기가 모서리
314,0.94

電圧をビットに変えるのがしきい値です。1.65V(供給電圧の半分)を使うとサンプル番号313が立ち下がりエッジで、2.90Vを使うとサンプル番号312が立ち下がりエッジです。エッジが無限に急峻なら両者は同じですが、実際の線には容量があるので、電圧は指数関数的に動きます。そのため、しきい値が高いほど、立ち下がりは早く、立ち上がりは遅く捉えられます。このコースの正常なUARTキャプチャでは、2つのしきい値の立ち上がりエッジは、4サンプル、8µsだけずれます。

ここで重要な事実が1つあります。受信側のチップは、半分の電圧では判定しません。データシートには、VIH(確実に1と読む最小の電圧)とVIL(確実に0と読む最大の電圧)が別々に書かれていて、その間は保証されない区間です。そのため、皆さんのデコーダーが「データは正常です」と言っても、実際のチップは読めないことがあります。しきい値を1つしか使わないデコーダーは、この差を構造上、見ることができません。

時間軸側の相棒は、サンプルレートです。ビット1つの中にサンプルがいくつ入るかが、判読の余裕です。サンプルがビットあたり1つしかなければ、スタートエッジの位置はサンプル1つ分の単位でしかわからず、その誤差はフレームの終わりまで蓄積されます。サンプルを間引きながら同じファイルを読み直すと、どの地点で判読が静かに間違い始めるのかを、目で見られます。静かに、という言葉が重要です。サンプルが足りないデコーダーは、エラーを出さずに、もっともらしい別の文字を出します。

3つ目の選択もあります。どの列がどの線か、ということです。ヘッダーにchannels=scl,sdaと書かれていても、それは測ってきた人がプローブを挿した順序にすぎません。2つの列を入れ替えて読むと、クロックがデータに、データがクロックになります。そのため、名前を信じる前に、1つの列が規則的に上下しているかを、先に見ます。クロックは規則的で、データはそうではありません。

現場での姿

キャプチャファイルを受け取っておきながら、「ツールが何も読めない」と言って、測り直しに行く場合が多くあります。たいていは測り直す必要がありません。ツールのしきい値がその信号の振幅と合っていないか(3.3Vの信号に5Vの基準を使っている場合)、ツールが取ったサンプルレートが、通信速度に比べて低すぎるのです。ファイルを直接開いて、最初の100行の最小・最大の電圧を見るだけで、半分は切り分けられます。

反対の事故もあります。ツールがきれいな1010を見せてくれるので、「信号は正常」と報告したのに、実際のボードは読めないままの場合です。ツールは半分の電圧で判定し、チップはVIHで判定したからです。このとき必要なのは、新しい計測器ではなく、判定の基準を変えて、同じファイルをもう一度読んでみることです。基準を変えたときに答えが変わるなら、それ自体が結論です。信号に余裕がないという意味だからです。

3番目によくあるのは、ファイルを目だけで見て判断することです。サンプルが数千行あると、人が見られるのは前後の数十行だけで、故障はたいてい真ん中にあります。このコースが最初からプログラムを書かせる理由が、これです。全体を一度に走査し、同じ判定を何度でも同じように繰り返せる必要があります。手で数えた数字は、次の人が確認できません。

次のクイズで確認すること

サンプル番号から時刻を求める方法、しきい値を上げると立ち上がりと立ち下がりのエッジがそれぞれどちらへ動くか、ビットあたりのサンプル数が減るとどのように失敗するかを問います。そのあと、UARTのモジュールで、この表を実際にバイトに変えます。