2-2-1 問題の発生経緯
一度テストまで完了した後、ブラシアップ期間(お客様に動作確認していただきながら仕様や使い勝手などの向上を行う)をもともと設けていたため、納期より前に暫定版リリースを行いました。
お客様より、(今まで使用していた)ICE(※1)が接続可能なデバッグ基板での動作としては問題ないという回答を頂き、コンパクトフラッシュ(CF)への保存データの変更など細かい対応を進めていたのですが、後日、デバッグ基板では動くが、CPU実装基板だと動かないという連絡を頂きました。
もともと、CPU実装基板での確認は対応範囲としては含まれていませんでしたが、動作しないことは問題ですので、お客様にCPU実装基板を送って頂き、調査を開始しました。
2-2-2 解決へのアプローチ
行ったことを以下にまとめます。(お客様より、基板上の違いは、実チップが載っているかICE接続用のソケットが載っているかどうかだけだったとお聞きしましたので、ソフトの調査から進めました) ハードウェア絡みではソケット以外に違いがないとはいえ、基板改修を行っている為、端子の接続なども考慮して確認を行っていきました。
・ ソフトウェアの観点ソフトウェアの観点
ICEを使用した場合としていない場合での違いで考えると、メモリの初期化等が正常に行われていない可能性がありますので、確認しましたが、問題ありませんでした。
・ エラー発生箇所と、エラー条件の確認
ソフトウェアから追っていきましたが、ドライバのイニシャル時点でCFにアクセス出来ていないことが分かりました。
・ ロジックアナライザを使用したデジタル波形の確認
マイコンの各端子からの出力、CFからの出力それぞれをロジックアナライザで取得し、確認しました。デバッグ基板とCPU実装基板で同じ波形が出力されており、ここに問題はなさそうでした。
・ 基板のハンダ、接続等の見直し
設計上はICEが接続されるかそうでないかの違いだけといっても、基板の改修を行っていることもあり、テスターでCFと接続されている端子の、導通チェックを行いました。ここも正常に接続されていることが確認できました。
・ ICEの設定見直し
ICEの設定が間違っているのでは、という点で見直し、クロック設定が間違っていることが分かりました。修正し、再度動作確認を行いましたが、状況は変わりませんでした。
・ ウェイトの調整
BSC(※2)の調整を行い、再度CFのマニュアルの見直しを行いながら、余裕を持たせた波形などに切り替えてみましたが、状況は変わりませんでした。
・ オシロスコープを使用したアナログ波形の確認
データバスの出力がCPLD(※3)と競合していることが判明しました。
上記のように、時間をかけていろいろ進めていましたが、糸口はなかなかつかめませんでした。
2-2-3 原因は同じCS空間を使用していること
ハードウェア側からの確認も万策尽きたかというところで、オシロスコープでアナログ波形の確認を行いました。そうしたところ、実装基板で、CFへアクセスする際にCPLDへ接続されているCS7信号がアクティブ(ローレベル)になっていることが分かりました。
オシロスコープで確認したところ、やはりCS7空間にアクセスしている為、データバス出力が競合しており、正常にアクセスできませんでした。結果として、リード/ライト両方が不可になっており、イニシャル処理すら通らない状況になっていました。
最初ロジックアナライザで波形を確認していましたが、スレッショルドの設定が出力されているレベル以下になっていた為、その時点では発見できませんでした。今思い返してみると、何故最初からアナログ波形で確認しなかったのかと思いますが、この時はすぐに使用できる状況でなかったこともあり、そこまで対応しませんでした。
なお、なぜこの間違いになかなか気づくことができなかったというと、ICEを接続して使用するデバッグ基板では、このCFへアクセスするときのCS7信号は出力されなかった為です。(この仕様がなぜそうなっているかについては、不明です)
以下に、マイコンのメモリマップを示します。
|

|
|
図1. CS空間
|
2-2-4 対策
この現象の対策としては、以下を提案しました。
・ CFアクセス時はCS7信号を出力させないようにする。
開発対象のH8マイコンには、バスアクセス時にCS7信号を出力するかどうかを決められるレジスタがある為、CFアクセス時にそのレジスタを操作することで対策できます。
CFアクセスする際には毎回ポート制御とレジスタ設定の変更を行う必要がありますので、制御としては遅くなってしまいますが、仕方のないところでした。上記対策を打った結果、最終的には、実装基板でもCFへのアクセスが可能になり、正常に(デバッグ基板と同じように)動作するようになりました。
結果として、原因は「CFアクセス時にCS7が出力されることを考慮できていなかった」ということになります。
(※1) ICE(In-Circuit Emulator) … CPUの機能をエミュレートする装置。デバッグ機能を持つ。
(※2) BSC(Bus State Controller) … バスステートコントローラ。CPUの外部バス制御を行うコントローラ。使用するバス幅やウェイト、デバイス種類の選択
等を行う。
(※3) CPLD(Complex programmable logic device) … ユーザーの手で内部論理回路を変更できる集積回路(PLD)を複数内部で接続した構成となる。