Chapter 19
自作ツール — 足りない道具は作る
この章のゴール.
既製品で届かない所を、自分で作った小さなツールで埋める発想と型をつかむこと。 安いマイコンを「注入・観測エージェント」に仕立てる、ホスト側の解析スクリプトを書く、 既存ツールを糊で束ねる——費用対効果で「作る/買う」を選べるようになる。
この章で使う既出の用語(定義は各リンク先). USB(01 章 2 節)、アナログ(01 章 2 節)、差分(01 章 3 節)、記録(01 章 4 節)、SDR(02 章 4 節)、ハーネス(02 章 7 節)、判定(02 章 1 節)、刺激(02 章 1 節)、状態遷移(02 章 1 節)、オシロ(04 章 8 節)、サンプリング(04 章 2 節)、UART(05 章 1 節)、I²C(06 章 1 節)、SPI(06 章 1 節)、DAC(07 章 2 節)、PWM(07 章 3 節)、read(10 章 2 節)、ウォーターフォール(12 章 3 節)、ソフト(12 章 2 節)、ヒストグラム(14 章 3 節)、道具(16 章 2 節)
1. なぜ自作するのか
市販の計測器・アナライザは強力だが、高価だったり、独自プロトコルに未対応だったり、自動化に組み込みにくいことがある。組み込みテストでは、数百円〜数千円のマイコンと少しのコードで、驚くほど実用的な注入・観測ツールが作れる。「作る/買う」は費用対効果で決める。
2. 作る/買うの判断
| 状況 | 寄せ方 |
|---|---|
| 標準プロトコル・高精度・高速が要る | 買う(ロジアナ、PPK2、オシロ、SDR) |
| 独自プロトコル・特殊な注入・自動化に密結合 | 作る(マイコン+スクリプト) |
| 一度きり・探索段階 | まず既存の糊付け(3 節) |
| 繰り返す・チームで共有 | 作ってハーネス(18 章)に組み込む |
原則: 観測・解析はホストのソフトで、リアルタイムな注入・タイミングはマイコンで分担すると相性がよい。
3. 既存ツールを糊で束ねる — 最小の自作
いちばん安上がりな「自作」は、既存ツールを Python で繋ぐこと。
- CLI をラップ:
sigrok-cli(ロジアナ)、rtl_433(SDR)、nmapをsubprocessで呼び、出力を解析 - ファイルを解析: pcap(
pyshark/scapy)、VCD(波形)、CSV(電流)を読んで判定に使う - API を束ねる:
bleak+ppk2-api+pyvisaを一つのスクリプトで協調させ、刺激と観測を同時に
これだけで「BLE で書き込みながら電流を録画し、同時にコンソールも監視する」といった多点同時テストが組める。
4. マイコンを注入・観測エージェントにする
安価なマイコン(RP2040、ESP32、STM32、FPGA なら iCE40 等)を、PC の手足として使う。PC はミリ秒でしか動けないが、マイコンはマイクロ秒で正確に動ける——この役割分担が肝。
- 信号注入器: GPIO でエッジ・パルス列・タイミングを正確に生成(04 章)、DAC で偽アナログ(07 章)、PWM
- 偽センサ/偽バス: I²C/SPI スレーブを演じて任意の値を返す(06 章)。PIO(RP2040)や FPGA なら難しいタイミングも
- 観測器: 高速 GPIO サンプリング、割り込みでイベント時刻を記録、ADC で電圧監視
- PC との口: USB シリアルで簡単なコマンド(
SET DAC 1200,PULSE 3 10us,READ?)を受ける——ホストのハーネス(18 章)から叩ける
# ホスト側から自作エージェントを叩く(シリアルの簡単プロトコル)
agent.write(b"FAKE_TEMP 850\n") # 偽 I2C センサに 85.0℃ を返させる
agent.write(b"TRIG?\n"); t = agent.readline() # 警報 GPIO の立ち上がり時刻を回収5. ホスト側の解析ツール
観測データを「意味」に変えるソフトも自作価値が高い。
- 独自プロトコルのデコーダ: sigrok のプロトコルデコーダを自作(Python)して、独自バス/UART コマンドを PulseView で解読
- 波形・ログ解析: レイテンシのヒストグラム(14 章)、電流の状態分類(03 章)、差分ビット抽出(12 章)を numpy で
- 簡易 GUI/可視化: matplotlib やブラウザで、ウォーターフォール・状態遷移・傾向を描く
6. 設計の勘所
- 単純なテキストプロトコルでホスト⇔エージェントを繋ぐ(デバッグしやすい、行指向)
- 時刻を持たせる: エージェント側でイベント時刻を打つと、PC の揺れ(14 章)を避けられる
- 決定性: 乱数を使うファザはシード固定で再現可能に(02 章・16 章)
- 小さく始める: 1 機能ずつ。効いたらハーネス(18 章)へ昇格
- 文書化: コマンド表と配線図を残す(次の人=未来の自分のため)
7. 何を大事にするか
- 足りない道具を安価に埋め、自動化に組み込める
- 注入・観測が正確な時刻を持ち、再現可能
- 独自プロトコルを自分でデコードできる
- 作ったものがハーネスから叩ける共通の口を持つ
8. 手を動かす
自作ツールの型を選ぶ
この章のポイント
- 既製品で届かない所は、安いマイコン+スクリプトで自作する。「作る/買う」は費用対効果で
- 役割分担: 観測・解析はホスト、正確なタイミング注入はマイコン
- 最小の自作は既存ツールの糊付け(sigrok-cli/rtl_433/bleak/pyvisa を Python で束ねる)
- マイコンを注入・観測エージェントに(偽センサ・信号注入・イベント時刻記録)、簡単なシリアルコマンドで
- ホスト側は独自デコーダ・波形解析・可視化。時刻・決定性・単純プロトコルを大事に