「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
弊社では、マイコンを対象とした組込みソフト開発を多く手掛けており、デバッグやテストを行うにあたり、ハードウェアを含めて原因の追及を行う必要が出てくることが多くあります。そこで本号では、実際の案件を通して、ハードウェアを含めた開発、デバッグ、テストの難しさと、私が感じたことを以下3つの例で紹介したいと思います。
多くのモジュールを搭載しているマイコンでは、端子がマルチプレクスされている場合があります。
それを考慮せずにハード設計やデバッグを進めると、問題となる場合があります。
基板立ち上げ時の対応を例に紹介します。
開発対象となる基板には、多くの場合はターゲットとなるマイコン以外にもSRAM、SDRAMなどのデバイスが搭載されています。
CPUの細かい仕様に気付かないままソフト作成を進めてしまうと、対象となるデバイスに正常にアクセスできずに、問題となる場合があります。
デバッグ時の対応を例に紹介します。
元々の機能だけであれば動作していたのに、新たな機能や基板の改造を行った為に動作しなくなるということがあります。この場合、例えば必要なメモリサイズが不足していたり、考慮不足からソフトウェアが問題となる場合があります。
私が担当したのは、ルネサステクノロジ製H8マイコンにおいて、コンパクトフラッシュ(CF)への書き込み機能(ドライバ、アプリ)を作成するというものです。マイコンのスタートアップや他の制御部分に関しては既存ソフトとしてお客様のほうで作成されており、一部分だけを弊社で担当することとなっていました。
作業としては、要求仕様の策定→お見積り→受注まで進んだ段階で前任者から引き継ぎ、それ以降の、設計、コーディング、テスト部分を私が担当することになりました。
私は、今までマイコン開発には関わってきていましたが、RTOS(※1)や、CFを使用した開発というのは初めてでした。予め引き継ぎ担当者からはあまり難しくない内容との話を聞いていましたが、不安はありました。但し、勉強になる内容も多いと思ったので、意欲をもって開発に臨むことができました。
タスクの構成図と担当範囲は以下に示す図のような内容になります。既にOS(NORTi Version4(※2))を含めて実装されており、タスクをひとつ追加する方向(実際にはNORTi File Systemが生成する)でCF用のドライバ/アプリを作成することになりました。
図1. タスク構成図と担当範囲(網掛け部分が担当範囲)
以降に、本開発での具体的な問題の例を紹介します。
特に多くのモジュールを搭載しているマイコンでは、1端子に複数機能が割り当てられている(マルチプレクスされている)場合があります。
この場合、使用したい機能によってソフトウェアでレジスタの設定(端子機能の選択や入出力の選択等)を行う必要があります。マイコンの動作モードで切り替わる場合もあります。
端子がマルチプレクスされていれば、(限度はありますが)ピン配置に関わらず、基板の大きさや機能、他デバイスの配置など、柔軟に基板設計対応することが可能になります。また、例えばシリアル通信を複数チャネル使用したい場合や、逆に汎用ポートの数を増やしたい場合など、汎用的に使用することができます。
ただし、オンチップデバッガ(※3)を使用するには、シリアル通信などの端子を犠牲にしなければならないなど、ある程度使用に制限が出てきます。
そういった制限等を考慮せずにハード設計を行い、割り当てや接続に失敗すると、想定どおりに動作しないということになります。
また、配線のチェックや接続確認なども重要な要素です。
開発対象となる基板構成は、以下のようになっています。ある製品の検査装置であり、ログを出力させる為、今回CFを追加したいとのことでした。
図2. 回路構成
開発環境は既に準備されていましたので、まずは立ち上げ段階として、CFのレジスタに直接設定値を書き込むコードを作成し、CFへのアクセスができることの確認を行いました。
ICE(※4)で、CFのアトリビュート領域(※5)へアクセスしましたが、全くリードできませんでした。
CPUマニュアル、CFのマニュアルをひととおり見直しつつ、テスター等で端子をあたり、原因を探っていったところ、基板の設計ミスであることが分かりました。
具体的な問題は、以下のとおりです。
CE1(チップセレクト)、REG(領域の切替)等の端子はマイコンの仕様として他機能の端子とマルチプレクスされており、指定された動作モードでは本来使用したい機能に設定できなかった。
弊社として対策まで検討し、以下のように提案しました。(動作モードの切り替えで対応するにはシングルチップモード(※6)にするしかなく、外部アクセスできなくなりますので代替案とはなりませんでした)
CE1を単純に汎用ポートで制御するようにした場合には、CF制御中の割り込み、タスクディスパッチ時には必ずチップセレクトをインアクティブにする必要があります。
この場合、他デバイスへアクセスする際にCFへアクセスしてしまう可能性がありますので、CF領域に対応する上位アドレスとなった場合のみCE1をLoにするなどの対応が必要になります。
A案とB案のメリット/デメリットをまとめると以下のようになります。
A案 | B案 | ||
---|---|---|---|
メリット | デメリット | メリット | デメリット |
基板上のテストピンにジャンパ線を飛ばすだけで可能。(弊社で基板の改修が可能) | CFにアクセスする度にソフトウェアの処理による汎用ポートのLo/Hi出力が必要な為、オーバーヘッドは大きい。 | 反転回路を入れるのでソフトウェアの処理はいらず、オーバーヘッドは小さい。 | 反転回路を入れるので、弊社で基板の改修はできない。(郵送での基板のやりとりが必要) |
表1. メリットとデメリット
最終的には、お客様にご判断いただき、
という理由により、上記「A.テストピンとして用意されている端子にCF用の端子を割り当てる」対応を行うことになりました。
修正内容を以下の図にまとめます。
図3. 基板改修
基板の改修作業としては、端子同士をジャンパ線で接続するもので、それ程難しい内容ではありませんでしたので、弊社で行うことになりました。
細かい作業でしたが、基板の改修自体は問題なく行え、その後レジスタ設定までを一通り見なおして、ICE接続状態で、アトリビュート領域を確認したところ、製造番号(アスキーコードで「S.a.n.D.i.s.k...」と表示されるなど)がデバッガのメモリウィンドウに表示されることが確認できました。
図4. メモリウィンドウへの表示
長くなりますので、本号ではここまでとし、「デバイスの仕様/特性の把握」と「機能追加による弊害」の2点は、開発のまとめとともに、次号に回したいと思います。
(Y.S.)
関連ページへのリンク
関連するソフテックだより