「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
ソフテックでは、多くの組み込みソフト開発を手掛けてきました。
組み込みソフトを開発する際に、DIAG(ダイアグ)機能の開発も一緒に依頼を受けることがあります。
少ないケースですが、DIAG機能だけの開発依頼を受けることもあります。
今回のソフテックだよりでは、主機能にはならないが、製品の信頼性を高めるために必要とされるDIAG機能について紹介します。
DIAG(ダイアグ)の正式名称は、Diagnostic(診断)です。
「自己診断機能」や「基板検査機能」と呼ばれることもあります。
DIAG機能は、製作した基板を検査する時や、LCDの明暗調整、音量調整、タッチパネルの座標調整(キャリブレーション)など初期出荷の調整をする場合に利用されます。
検査方法も様々あり、人の手によって入力を入れて、出力されることを目視で検査する方法や、検査対象基板にDIAG用基板(以降は冶具と呼びます)を接続して、DIAG機能が冶具を制御することによって自動的に検査をする方法があります。
また、大量に出荷される基板は、1秒でも検査時間を短縮することを求められることがあります。
お客様によって、DIAG機能の要望は違いますが、以降では機能の例を説明します。
ROMチェックとは、FlashROMなどに格納されているプログラムやデータを正しく読み込めることを確認する機能です。
CPUに内蔵されているFlashROMとは別に、基板上にFlashROM(以降、外部FlashROMと呼びます)を実装して利用する場合、CPUと外部FlashROM間はデータバスやアドレスバスを基板上で接続します。
基板を製作した時に、ハンダ不良により、未接続になったり隣の信号線とハンダが繋がったり(ブリッジ)していることが考えられます。
よって、データバスやアドレスバスが正しく接続されていることをROMチェック機能では確認します。
図1. 基板に正常にハンダ付けされたLSI
方法としては、外部FlashROMの先頭アドレスから特定のアドレスまでに格納されているデータのSUM値(加算値)やCRCを計算して、その値が事前に計算済みのチェックコードと一致していることを確認します。
図2. ROMチェックの例
データバスに異常があると、そもそもDIAG機能のプログラムが起動できないことがありますが、プログラムが起動した場合でも外部FlashROMから意図したデータが読み込めていることを検証するために実施します。
目的はROMチェックと同じく、CPUとRAM間のデータバスやアドレスバスが正しく接続していることを確認します。
ROMチェックの場合は、読み込み確認だけですが、RAMチェックの場合は書き込み確認も必要になります。
単純に考えると、テスト対象アドレスにテストデータを書き込み、それを読み出せればOKですが、RAMチェックは単純には実現できません。
CPUがプログラムを実行すると、スタックや変数の初期値を設定するため、RAMチェックプログラムが実行される前に、RAMには有効なデータが書き込まれています。
このため、有効なデータを壊さずにテストをする工夫が必要となります。
また、RAMチェックの場合は、データバスとアドレスバスの両方を意識したチェックが必要となります。
例えば、55(Hex)を書き込みして、55(Hex)が読み出せれば、データバスとして確認ができます。
しかし、このテストでは、アドレスバスA0が断線していたとしても、55(Hex)の読み書きは成功します。よって、このようなテスト方法では、アドレスバスのテストが考慮されていないことになりRAMチェックとしては不十分です。
対策方法としては、00(Hex)〜FF(Hex)番地まで、連番を書き込み、その連番を読み込めることを確認します。
例えば、00(Hex)番地に1を書き込み、01(Hex)番地に2を書き込みます。
この場合、アドレスバスA0が断線していると00(Hex)番地に2が書き込まれます。
よって、00(Hex)を読み込むと2が読めて、01(Hex)を読んでも2が読まれ連番ではないためアドレスバスの異常を検出することができます。
ROMチェックやRAMチェックはDIAG機能に限らず、通常(製品)ソフトの起動時にも実施することが一般的です。
図3. アドレスA0が断線している場合のRAMチェック動作
基板上にスイッチやLEDがあれば、基板上のスイッチを入力して、対応するLEDを点灯させることで、基板の不良を検出します。
入力や出力が端子のため、目視確認や入力操作が出来ない場合は、冶具を作成し確認する仕組みを作る必要があります。
I/Oについては、DIAG機能を利用せずに製品用のプログラムを利用して確認することも可能です。
しかし、特定のI/Oの動作を確認するためには製品仕様を把握している必要があります。
例えば製品仕様におけるLEDの点灯条件が複雑な場合は、その条件を成立させる手間がかかりますが、DIAGでは、特定のスイッチに連動してLEDを点灯させる仕様にしておけば、確認が容易になり検査時間の短縮や検査ミスを減らすことが可能になります。
マイコンを利用した組み込みソフト開発でも、イーサネットを利用することが多くなりました。ソフテックの場合は、イーサネットの確認はパソコンと接続して実施しています。
時には、専用のパソコンツールを開発して、パソコン側からLED点灯制御や、スイッチ状態をパソコンに表示させることにより、イーサネット通信の確認とI/Oチェックを実施することもあります。
LCDを利用している基板の場合は、色パターンや文字を表示し、初期出荷用に画面の明るさなどを調整します。
調整は、プログラムで調整をして設定値をEEPROMなどに保存しておくケースや、ボリューム抵抗などを回して調整するケースがあります。
CPUで実行されたプログラムからLSIのレジスタ設定をして利用するLSIをインテリジェントLSIと呼ぶことにします。
インテリジェントLSIを利用するためには、CPUとLSIが正しく接続されている必要があります。
この接続確認の機能を、DIAG機能の1つとして準備しておく必要があります。
ソフテックのお客様によっても、DIAG機能の考え方や位置づけが違います。
ハードウェアを設計した会社が、ハードウェアの目線でDIAGの仕様書を作成するケースもありますし、ソフトウェア開発をするソフテックが回路図を見てチェック対象の信号線を塗りつぶしながら仕様を考えるケースもあります。
また、DIAG機能を基板検査用ソフトに留まらせず、DIAGの結果から基板検査成績書を自動的に作る仕組みまで開発協力をしたことがあります。
DIAG機能は、製品としての主機能になることはありません。
しかし、「ハードウェアが、このような故障をしたケースを考えたときに、どのような検出方法が有効なのか?」とか、「出荷前に、ここのボリューム抵抗の値を効率的に調整する方法は?」などを考えてDIAGの仕様検討をすると、考慮することが多く難しい機能だと思います。
DIAG機能は、ソフトウェアを作る人の中でも、ハードウェアの制御をするような人が担当している部分のため馴染みは薄いかもしれませんが、このソフテックだよりを機に、製品とは別に、このような開発があることも知ってい頂く機会になればと思います。
(T.O.)
関連ページへのリンク
関連するソフテックだより