メディア
コラム
» 2007年12月01日 00時00分 公開

Tales from the Cube:「分かっているつもり」の部分にこそ注意

「分かっているつもり」――。それはエンジニアのみならず、多くの人にとって危険な言葉でもある。今回は、この“魔の言葉”が原因であった不具合事例について紹介する。

[Kenneth Ciszewski(米Tech Electronics社),EDN]

 かつて、筆者はさまざまなアナログギターアンプの音をモデル化したデジタルギターアンプの設計を手伝ったことがある。それまではアナログのみだったギターアンプの世界で、この製品は初のデジタル製品と呼べるものであった。その開発において、筆者は2つの問題に遭遇した。

 筆者らが使用したDSPとオーディオコーデックは、4つの接続ラインを持つ同期シリアルポートを介して通信を行っていた。4つの接続ラインとは、DSPからコーデックへのデータ出力ライン、コーデックからDSPへのデータ入力ライン、フレーム同期用の信号ライン、シリアルデータ転送を制御する同期クロック(以下、シリアル同期クロック)ラインである。

 オーディオ源とモニターアンプを接続した評価ボードを用意したが、コーデックのアナログポートからは音声が出力されなかった。シリアルポートをオシロスコープで観測したみたところ、シリアルデータがDSPとコーデックとの間で双方向に伝送されていることが分かった。またフレーム同期用の信号ラインとシリアル同期クロックラインにも問題はなさそうだった。

 筆者は、シリアル同期クロックとの同期をとるために、12MHzのロジック用外部クロックをコーデックに接続する必要はないのだろうかという疑問を持った。そうしなければ、コーデックから出力される音声は、ユーザーの耳にも大きな白色雑音として聞こえるはずだと考えたのだ。しかし、コーデックのデータシートには、そのような要件は記載されていなかった。また、そのコーデックのフィールドアプリケーションエンジニアも、「クロックの同期は必須条件ではない」と説明した。

 DSPが内蔵するPLLは、12MHzのクロックを基に、より高い周波数のクロックを生成し、シリアル同期クロックはそれを分周して生成する。12MHzのクロックは、コーデックにクロックを供給する水晶発振器から直接得ていた。ロジック用クロックとシリアル同期クロックをチェックしてみた結果、それらは同期していないことが分かった。

 筆者は、カウンタIC(CMOS標準ロジックの「4040」)を用いて12MHzのロジック用クロックを分周し、それをDSPとコーデックの両方に入力するように変更してみた。それによりDSPが備えるPLLとは無関係となり、2つのクロックの同期が保証される。この状態で評価ボードに電源を入れてみると、コーデックから音声が出力された。

 2つ目の問題は、PROMライターを用いてデータを書き込んだフラッシュメモリーを評価ボードに挿入したときに起きた。いったん電源を切って再び電源を入れると、評価ボードが正常に動作しないのである。そこでフラッシュメモリーに格納されていたデータを読み出してみたところ、電源投入時のリセット用ベクトル、すべての割り込みベクトルなど、メモリーデータの多くの部分が誤っていた。

 あるエンジニアが、フラッシュメモリーの電源投入シーケンスに問題があるのではないかと指摘した。初期のEEPROMでは、電源投入時に内容が変更されるのを防止するためにアナログシーケンシング回路を用意する必要があったが、筆者が使用していたフラッシュメモリーには複雑な要件はなかった。その回路に、容量性の遅延を付加して問題の可能性を調べてみたりもしたが、何も分からなかった。最終的に、筆者は、PROMライターがプログラミングアルゴリズムの一部として、適切なセクター再ロックシーケンスを含んでいないことに気付いた。

 筆者がともに仕事をしていたアナログエンジニアは、「よく分かっているつもりの部分が問題となっていることが多い」と語っていた。筆者らは、シリアル同期の方法についてはよく知っているつもりだったし、PROMライターは正しく動作しているものと信じ込んでいた。その両方で自分たちが誤っていたことに驚かされたのだ。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.