組み込み実践編(実践の導入編):どのレイヤーがおかしいかの見極め方
はじめに
組み込み機器の不具合調査で一番時間を溶かすのは、実は「原因の特定」そのものより「どのレイヤーを疑うべきか」の判断だったりします。
電源が原因なのに延々とファームのログを追いかけたり、逆にソフトのバグなのにオシロを引っ張り出したり…という遠回りは、現場あるあるだと思います。
このシリーズ「組み込み実践編」では、18年ほど組み込み/FPGA/ファームウェア開発に携わってきた中で自然と身についた「デバッグの道具箱」を、実際に手元にある機材ベースで紹介していきます。
初回となる本記事は総論として、個別ツールの前に「どのレイヤーがおかしいかをどう見極めるか」という考え方の土台を整理します。
本シリーズ全5回の目次
| # | タイトル |
|---|---|
| A-1 | 組み込み実践編(実践の導入編):どのレイヤーがおかしいかの見極め方(← 本記事) |
| A-2 | 組み込み実践編 ②:シリアルコンソール編 |
| A-3 | 組み込み実践編 ③:JTAG・デバッガ編 |
| A-4 | 組み込み実践編 ④:オシロ・ロジアナ編 |
| A-5 | 組み込み実践編 ⑤:自作ツールでレジスタを叩く編 |
このシリーズの全体構成
-
A. デバッグの道具箱(本シリーズ)
- A-1 総論:どのレイヤーがおかしいかの見極め方(本記事)
- A-2 シリアルコンソール編
- A-3 JTAG・デバッガ編
- A-4 オシロ・ロジアナ編
- A-5 自作ツールでレジスタを叩く編
- C. 組み込みLinuxの仕組み(全3回・後日)
- B. 組み込み機器にWi-Fiを載せる(全3回・後日)
レイヤーを5段階に分けて考える
不具合の「見た目の症状」は同じでも、原因は全く違うレイヤーにあることが多いです。ここでは大きく5段階に分けて考えます。
- 電源・クロックレイヤー:そもそも電圧が足りているか、クロックが発振しているか
- 信号・通信レイヤー:UART/SPI/I2Cなどの物理配線・信号品質(JTAG/SWDの配線もここに含まれますが、デバッガとしての活用そのものは次の「ブート・ファームウェアレイヤー」の道具としてA-3でまとめて扱います)
- ブート・ファームウェアレイヤー:起動シーケンス、ブートローダ、ファームウェアの初期化処理
- OS・ミドルウェアレイヤー:Linuxカーネル、ドライバ、ミドルウェアの挙動
- アプリケーションレイヤー:アプリのロジックそのもの
「基板が起動しない」という同じ症状でも、1(電源が入っていない)のこともあれば、3(ブートローダが化けている)のこともあります。順番に切り分けずにいきなり4や5を疑うと、確認すべき箇所を見落として遠回りになります。
症状からレイヤーを絞り込む考え方
実務でよくやる思考の流れはだいたい以下の通りです。
- LEDも点かない・発熱もない → まず電源・クロックレイヤーを疑う(テスターで電圧確認)
- 電源は入っているがシリアルに何も出ない → 信号・通信レイヤー(配線・ボーレート・レベル変換)を疑う
- シリアルには何か出るが起動が途中で止まる → ブート・ファームウェアレイヤー(ブートログを読む)
- OSは起動するが特定の機能だけ動かない → OS・ミドルウェアレイヤー(ドライバ・カーネルログ)
- OSも機能も動くが挙動がおかしい → アプリケーションレイヤー
このように、「まず生存確認(電源)→ 次に声を聞く(シリアル)→ 起動の過程を追う(ブートログ)→ OSの視点で見る → アプリの視点で見る」という順序で切り分けると、無駄な深追いを避けられます。


電源レイヤーの生存確認では、こういった可変電源や複数電圧に対応したACアダプタセットがあると、電圧を変えながら「本当に電源起因か」を切り分けやすくなります。
レイヤー×道具マップ(本シリーズの地図)
このシリーズの各記事は、上記のレイヤーに対応する道具を1つずつ深掘りしていく構成にしています。
| レイヤー/観点 | 主な道具 | 対応記事 |
|---|---|---|
| 電源・クロック | テスター、電源ライン観測 | 本記事で概要を扱う |
| 信号・通信 | シリアルコンソール(TeraTerm) | A-2 |
| ブート・ファームウェア | JTAG/デバッガ(ST-LINK, J-Link, DAPLink) | A-3 |
| 信号波形の実測(信号・通信レイヤーの深掘り) | オシロスコープ、ロジックアナライザ | A-4 |
| レジスタレベルの対話(ブート・ファームウェアレイヤーの深掘り) | 自作GUIツール(C#デスクトップアプリ) | A-5 |
記事単位では表を見れば十分追えるようにしているので、まずはこの対応表をシリーズ全体の地図として使ってください。
なお、4(OS・ミドルウェア)・5(アプリケーション)レイヤーの深掘りは本シリーズの範囲外とし、別シリーズ「組み込みLinuxの仕組み」で扱う予定です。
まとめ
- 不具合調査は「原因の特定」より前に「どのレイヤーを疑うか」の判断が肝心
- 電源→通信→ブート→OS→アプリ、の順に切り分けると遠回りしにくい
- 次回以降、このレイヤーに対応する具体的な道具(シリアルコンソール、JTAG、オシロ、自作ツール)を1つずつ深掘りする
次回は、最も手軽で最初に手が伸びる道具「シリアルコンソール」について、TeraTermでのログ取得の作法を中心に解説します。