目次
共通編(8)
1) GND共有忘れ
症状:距離がある機器間でたまに化ける/起動直後だけ失敗。
原因:基準電位が一致せず、入力閾値が実質シフト。リターンパスが長くノイズを誘導。
診断:オシロで双方GND間の差電位(Vdiff)を測定。数百 mV 以上なら要対策。長距離はツイストペアでSignal-GNDを近接。
対策:
- 単一点(スター)でGND接続。シールド・メッシュは片側接地を基本としループ回避。
- 長距離/産業用途は差動(RS-485/422等)を検討。
設計チェック:GNDリターンは信号の真下/隣接。インピーダンスの連続性を確保。
2) レベル互換性の思い込み(5V↔3.3V)
症状:低温/高温やロットでときどき読めない。
原因:VIH/VILの閾値を満たさない。CMOS/TTL閾値の違いも落とし穴。
診断:データシートのVIH(min)/VIL(max)、入力保護ダイオード、許容電圧を確認。
対策:
- 一方向:分圧、抵抗+シュミット入力、レベルシフタ。
- 双方向/I2C:FET式の双方向レベルシフタ。
- 5Vトレラント有無を確認(“5V tolerant”はHighレベルは読めても上げてはダメなケースに注意)。
設計チェック:Worst条件(温度/電圧/ばらつき)でのVIH/VILマージン≥0.3Vを目標。
3) 電源立上り順序/リセット未配慮
症状:初回アクセスだけ固まる/再電源で直る。
原因:周辺ICのPORが完了前にアクセス、内部状態が未定。
診断:電源・RESET・CS/SCLの時系列をオシロで重ね撮り。
対策:
- 電源シーケンサ/監視ICを使用。Power-Good→RESET解除→初回トランザクションの順。
- 最初のアクセスに起動待ちディレイを必ず入れる(例:10–100 ms)。
設計チェック:最小リセット幅、立上り時間、初回アクセス遅延を仕様化。
4) クロック/ボーレート誤差の見落とし
症状:高速化で突然不安定。
原因:水晶精度、内部RC、分周近似誤差の合算が許容を超過。
診断:誤差バジェット = 発振器誤差(ppm) + 温度ドリフト + 分周近似誤差。
対策:
- 余裕を持ったクロック/ボーレートを選定。UARTは合成誤差±2%以内を目標。
- 可能なら外部水晶/TCXOや分数N/オーバーサンプリングを利用。
設計チェック:ボーレート表を自動生成し、誤差が最小の設定をFWで選択。
5) 配線長・容量・反射の軽視
症状:エッジが鈍る、オーバーシュート/リンギングで誤動作。
原因:配線容量C・インダクタンスL・不連続点(コネクタ/分岐)。
診断:立上り/立下り時間、オーバ/アンダーシュート、反射波の遅延を測定。
対策:
- トポロジは点対点、短く近接。信号の隣にGND(ツイスト/差動)。
- シリーズ抵抗(例:22–100Ω)でエッジ緩和。高速は終端も検討。
設計チェック:配線容量見積(基板/ケーブル/コネクタ)→許容tr内に収まるか。
6) ノイズ・ESDの戻り道を作らない
症状:モータやSMPS動作時に稀にビット化け。ESDでラッチアップ。
原因:共通インピーダンス結合、ESD電流のリターンパス不備。
診断:ノイズ源オン/オフで発生相関を確認。ESDガン/静電でも評価。
対策:
- グランドプレーン連続性、デカップリング(0.1µF+1µF)を近接配置。
- 信号にシリーズ抵抗/フェライトビーズ、ラインにTVS。電力線と信号線を離す。
設計チェック:ESD/イミュニティ試験条件と同等の冗長度を設計に反映。
7) ピン多重機能(AF)設定ミス
症状:通信開始しても実際はGPIOのまま/内部プルが干渉。
原因:初期化順序やデフォルト状態の見落とし。
診断:初期化コードの順序とレジスタダンプ確認。
対策(順序のひな形):
- 周辺クロック有効化
- ピンを該当AFへ切替(内蔵プル状態を明示)
- 周辺の設定 → 有効化
- 初回ダミーアクセス/クリア
設計チェック:評価ボード/量産基板でプル抵抗の二重を禁止。
8) 外付け抵抗・ジャンパの二重
症状:波形が歪む/消費電流過大。
原因:評価ボードのプルアップ+ターゲット側プルアップの並列。
診断:実装表と回路図を突合し、実効値を計算。
対策:DNP(未実装)方針、抵抗ネットワークの実効Rを管理。
設計チェック:I2Cプル/CSプル/リセットプルの総合RをBOMで一元管理。
I2C編(10)
9) プルアップ抵抗値が不適切
症状:立上りが遅い/誤読、逆に電流過大で発熱。
原因:Rが大きすぎるとRCでtr超過、Rが小さすぎるとLow電流過大。
設計式:
- 立上りからの目安:
R ≈ tr / (0.8473 · Cbus)
(30–70%のRC近似)
例:Cbus=200 pF、tr目標=300 ns ⇒ R≈1.77 kΩ - Lowレベルからの下限:
R ≥ (VPU − VOL(max)) / IOL(max)
- I2C推奨立上り時間の例:Standard=1000ns, Fast=300ns, Fast-mode Plus=120ns
診断:ロジアナでtr測定、CbusはLCRまたは推定(配線/コネクタ/IC入力容量の合算)。
対策:Rを再設計、必要ならセグメント分割やバッファで容量削減。
10) プルアップ電圧不一致
症状:3.3Vデバイスを5Vプルアップへ接続して不具合/破損。
原因:入力保護ダイオードが導通し、ラッチアップ/逆流。
診断:スレーブVCC-OFFでSDA/SCLに高電圧が出ていないか計測。
対策:バス電圧を最も低い耐圧側に合わせる/双方向レベルシフタを入れる。
設計チェック:電源OFF時のバックパワー禁止(シリーズ抵抗/シフタで遮断)。
11) 7bit/8bitアドレス混同
症状:アドレス正しいはずがNACK。
原因:0x50(7bit)
を0xA0(8bit, R/W含む)
と混同。
診断:実送信バイトをロジアナで確認。
対策:
- ドライバAPIが7bitを取るか8bitを取るかを明記。
- ログに「送信アドレス(7bit/8bit表記両方)」を出力。
例(7bit→送信値):addr7=0x50
⇒ Write: 0xA0
, Read: 0xA1
。
12) アドレス競合
症状:同型デバイス複数でNACK/データ化け。
原因:ADDRピン設定が同一。
診断:基板オプション/抵抗の実装状態を確認。
対策:
- アドレス割当表をBOMと一緒に管理。
- 変更不能ならI2Cスイッチ/MUXで物理的に切り替え。
設計チェック:量産バリアントごとにアドレス衝突ゼロを保証。
13) クロックストレッチ未対応
症状:一部スレーブでハング/タイムアウト。
原因:スレーブがSCLをLow保持して処理時間を稼ぐ仕様。
診断:ロジアナでSCLが不自然にLow延長していないか確認。
対策:
- マスタ側でストレッチ許可&タイムアウトを実装。
- 遅いスレーブはアクセス間隔に余裕を持たせる。
14) リピーテッドスタート要求の見落とし
症状:レジスタ読出しで値が化ける。
原因:データシートがRepeated STARTを前提としているのにSTOPを入れてしまう。
診断:トランザクション図を仕様と突合。
対策:
- 「
START → Addr(W) → Reg → ReSTART → Addr(R) → Data... → STOP
」を忠実に。 - APIで“連結”送受信関数を用意。
15) NACK処理を無視
症状:見失い後に復帰せず固まる。
原因:無限リトライ/例外未処理。
診断:NACK発生回数とアドレスをログ。
対策:
- 最大リトライ回数とバックオフ。
- 失敗時にバスリカバリやデバイス再初期化、障害フラグを立て上位に通知。
16) オープンドレインで強制ドライブ
症状:バス衝突/過電流。
原因:プッシュプルでHighを駆動。
診断:GPIO設定を確認、外付けプルと競合していないか。
対策:SDA/SCLはオープンドレイン、Highは外部プルアップに任せる。
17) バスリカバリ未実装
症状:SDAがLow固着で全デバイスが通信不能。
原因:途中でデバイスがSDAを掴んだまま停止。
対策:SCLを手動で9パルス出し、STOP
を生成して開放。
擬似コード:
void i2c_bus_recover(void){
configure_SCL_SDA_as_GPIO_OD();
for(int i=0;i<9;i++){ SCL=1; delay_us(5); SCL=0; delay_us(5); }
// STOP
SDA=0; delay_us(5); SCL=1; delay_us(5); SDA=1; delay_us(5);
restore_I2C_peripheral();
}
18) マルチマスタ仲裁を無視
症状:まれにデータ破壊。
原因:同バス上の複数マスタが同時開始。
診断:仲裁ロスフラグ/ロジアナで確認。
対策:
- 仲裁ロス時は再試行。
- 可能なら単一マスタ構成へ簡素化。
SPI編(7)
19) CPOL/CPHA取り違え
症状:全ビットが1/2周期ずれる。
原因:サンプル/シフトの位相が一致していない。
モード表:
モード | CPOL | CPHA | アイドルSCLK | サンプルエッジ |
---|---|---|---|---|
0 | 0 | 0 | Low | 立上り |
1 | 0 | 1 | Low | 立下り |
2 | 1 | 0 | High | 立下り |
3 | 1 | 1 | High | 立上り |
診断:既知パターン(0xA5等)を送ってロジアナで位相確認。
対策:データシートのタイミング図と一致させる。
20) チップセレクト(CS)の扱いが雑
症状:時々コマンド/レジスタ化け。
原因:CSのセットアップ/ホールド不足、CSが転送途中で浮く。
診断:CS前後のtCSS/tCSHを実測。
対策:
- CSアサート→待ち→転送→待ち→ディアサート。
- 高速時はハード制御CSやDMAを使用。
21) ビット順(MSB/LSB)不一致
症状:値が常に2の乗数ズレ。
原因:送受のビットエンディアン不一致。
診断:パターン送受で比較。
対策:周辺設定を一致、無理ならソフトでビットスワップ。
22) ワード/フレーム長の齟齬
症状:16bit想定デバイスに8bit×2で送ってしまいCSが途中で上がる。
原因:MCUがバイト境界でCSを解放。
対策:
- SPIのフレーム長を合わせる。
- DMA連続転送でCS保持、あるいは手動CS。
23) 3線/4線・デイジーチェーン混同
症状:受信値が隣のデバイスのデータ。
原因:MISO/MOSI共有やデイジーチェーンのビット長理解不足。
対策:
- トポロジを図に固定化。
- 各デバイスのシフト長と順序を表で管理。
24) SCLKスキューとリンギング
症状:特定長でのみ誤動作。
原因:配線スキュー/反射。
対策:
- 点対点、枝を作らない。SCLKとGNDをペア配線。
- ドライバ直後にシリーズ抵抗(例:22–47Ω)。
- 必要に応じ終端やクロックバッファ。
25) 連続転送でのCSギャップ
症状:複数レジスタ連続アクセスで途中が無効化。
原因:DMA/FIFOの切れ目でCSが一瞬High。
対策:
- コントローラの**“CSキープ”**機能を使う。
- 1回の大きなバーストにまとめる。
UART編(5)
26) ボーレート誤差の積み上げ
症状:高ボーレートでごく稀に文字化け。
原因:双方の誤差が合算してスタート/サンプリング点が外れる。
診断:
- 誤差[%] = 分周近似誤差 + 発振器誤差 + 温度/電圧ドリフト。
- 目安:合成誤差±2%以内(保守的には±1.5%)。 対策:
- 分数N・オーバーサンプリング(×8/×16)、外部水晶/TCXO。
- 問題が続く場合はボーレートを落とすかフロー制御導入。
27) フレーミング条件の不一致
症状:受信可能だが定期的にフレーミングエラー。
原因:8N1
と7E1
などの不一致。
診断:相手機器の設定/ログを確認、自装置は受信レジスタのエラーフラグを監視。
対策:設定を揃える。未知相手にはautobaud(文字’0x55’等)を活用。
28) フロー制御を無視
症状:連続転送で受信FIFO溢れ。
原因:受信側の処理遅延。
対策:
- RTS/CTS(ハード)またはXON/XOFF(ソフト)を有効化。
- 送信側は空きに応じてスロットリング。リングバッファを十分に。
29) ブレーク/ノイズで受信崩壊
症状:サージ後に文字化けが続く。
原因:長Low(BREAK)やノイズでステートマシンが乱れる。
対策:
- エラーカウンタで閾値超え時に受信フラッシュ&再同期。
- アイドル検出でフレーミング復帰。ラインにTVS/フィルタ。
30) レベル規格(RS-232/TTL)取り違え
症状:直結で損傷/通信不能。
原因:RS-232は±電圧、TTLは0–VCC。
対策:
- RS-232には必ずラインドライバ/レシーバ(例:±電圧生成IC)。
- コネクタ形状に惑わされず規格と電圧を確認。
デバッグ手順(おまけ)
- まず波形:ロジアナのI2C/SPI/UARTデコーダを常時ON。
- 再現条件の記録:時刻・温度・電源・負荷・エラーカウンタ。
- 分離統治:1デバイスずつ有効化し、通信確認→次へ。
- 物理→論理:配線/電源/ESD→タイミング→プロトコル→アプリの順で切り分け。
最終チェックリスト
- [ ] GND共有・電圧レベル・レベルシフタの有無
- [ ] 電源/RESETシーケンス・初回ディレイ
- [ ] AF/プル設定・外付け抵抗の競合なし
- [ ] I2C:プルアップR計算、アドレス表、ReSTART/Stretch対応、バスリカバリ
- [ ] SPI:CPOL/CPHA/ビット順、CSタイミング、フレーム長、スキュー対策
- [ ] UART:ボーレート誤差見積、8N1等の一致、フロー制御、RS-232/TTL確認
- [ ] ログ&ロジアナで“見える化”済み
付録:計算メモ
- RC立上りの30–70%換算:
tr(30–70%) ≈ 0.8473·R·C
- I2Cプルアップ設計:
R ≈ tr/(0.8473·Cbus)
とR ≥ (VPU − VOL(max))/IOL(max)
の両立 - UART合成誤差の目安:
|誤差TX| + |誤差RX| + |近似| ≤ 2%
(保守)
本資料は一般的な設計指針です。最終判断は対象デバイスのデータシート/規格書に従ってください。