ソフトウェア受託開発ブログ「組込みソフト開発でハードウェアの知識が役立つ場面」

組込みソフトウェアの開発者には、ハードウェアの知識も必要だということは、よく言われています。では実際にどういう場面で必要、または役立つのでしょうか。
今回の記事では、組込みソフトウェアの受託開発を行っている当社が、ハードウェアの知識がお客様の開発プロジェクトに役立った経験をいくつかお伝えしたいと思います。
(ここでいうハードウェア開発とは、CPUや組込み機器用の基板(評価ボードを含む)の回路開発を指します。)

ソフトウェアとハードウェアの協調設計イメージ図

1.仕様検討

1-1回路図から組込みソフトに必要な情報を読み解く

ハードウェア担当者とのディスカッションは、基本的に、回路図や、各種チップのデータシートがベースになります。一方でソフトウェア開発者の考え方には、回路図やデータシートはハードウェアの範疇であり、自分たちは関わらない、という傾向もあります。しかし、ソフトウェア開発者が回路図やデータシートをある程度読み込めると、自身のソフトウェア開発の期間短縮に役立ちます。当社では、例えば、回路図から抵抗値(Ω)やVCC、信号増幅回路(Gain)の仕様を読み取り、AD変換の物理値係数を割り出したり、ICとの通信プロトコルをデータシートから読み取って、適切な通信スタックを作ったり、ICの起動に必要なReset制御や初期コンフィグレーションを実装します。さらに、必要な例外処理などもこれらの資料から引き出すこともあります。また、これらの資料から得た動作仕様から回路図または実装上の不備を指摘し、開発初期段階に後のトラブルにつながりそうな要因を回避します。

1-2 CPUへの割付けに関する助言

MCU/SoCのポートアサインは非常に重要です。基本的にはハードウェア設計者がMCU/SoCのハードウェアマニュアルを見て割付けを行うのですが、接続するデバイスに関していくつかの要注意ポイントがあり、設定段階で見逃すと、試作後に設計変更を余儀なくされ、工数が膨れ上がるリスクがあります。例えば、複数ある端子のどこを使えばよいのか、CH毎の組み合わせで使えない組合わせがないか、PullUpなどの端子処理が必要か、などです。ここで、接続するデバイスを理解し、適切な周辺デバイスを割り当てる作業をソフトウェア開発者が協力するのはスムーズな開発を行う上でとても有効です。

2.システム検証

2-1「うまく動かない」 原因がハードとソフトのどちらにあるのかの切り分け

お客様が開発を外部に委託する際の懸念の一つに、システムの結合テストで、うまく動作しない、期待していたパフォーマンスが出ない、という結果になった場合、ハードとソフトどちらに問題があるのかの切り分けがスムーズにできるか、というものがあります。ハードウェアとソフトウェアを別々の専門ベンダーに委託することも多いので、それぞれの開発者が互いの業務内容にあまり詳しくない場合、2社間の調整だけでも時間がかかり、疲弊してしまいます。

このような事態を避けるためにできることが、いくつかあります。

特に開発初期段階、ハードウェアが正しく動作しない場合の原因検証と解決策の検討にとって、ソフトウェアからの観点で調査したり、ソフトウェアを使って調査したりすることが解決の早道になりえます。たとえば、接続したデバイスのデータシートを参考にして、動作に必要な端子の結線が足りているか、または信号は正しく伝わっているかなど、ソフトウェアからの視点が原因をクリアにできることがあります。

また、接続先のデバイスの初期設定でコマンド通信等が必要になるケースがあり、適切に初期化しないと接続しても動作しないこともあります。これらも含めた検討は、ソフトウェアエンジニア側が担うことで効率がよくなる場合があります。

2-2 テストプログラムの提供

ソフトウェアを効率良く設計するために、ハードウェアの早期立ち上げは重要です。しかし、ここで、ハードウェア開発者とソフトウェア開発の認識のズレが生じることがあります。よくあるケースが、ハード開発担当者からワーキングサンプルとしていただくボードです。ハードウェア開発側では、回路基板、結線等をチェックして信号伝達性のみを確認したボードという認識であるのに対し、ソフトウェア開発側が期待するのは、ハードウェアの制御まで確認できているボードです。例えば、フラッシュROMへの書き込みなどは、制御信号とアドレス、書き込みデータで確認をしないと実際にフラッシュROMへ書き込めたことを確認できません。Pullupが必要な信号で、Pullup回路がない場合、意図した制御信号を送信することができません。外部のFlashROMやLCD回路は結線されていても結線の組合わせ次第で違った動作をするため、意図通りにICチップを制御できない場合もあります。当社では、テストプログラムを作成してハードウェアが正しく制御できることを確認し、ハードウェア開発とソフトウェア開発のギャップを埋めるお手伝いをすることがあります。このテストプログラムは、最終的に、量産用製品のハードウェアチェックプログラムとして使うこともできます。

2-3 割り込み処理と周期プログラム

ハードウェアの事象を確認するためには、割り込み処理と周期プログラムを開発して、事象を検出します。ただ、CPUの割り込みにはリソース制限のがあるため、周期プログラムで間に合う事象は割り込み処理を使いません。当社では、リアルタイム性の観点など考慮し、機能によって適切な方法を選択します。協調してハードウェアの事象検出に割り込み処理と周期プログラムのどちらを使うか決めていきます。


ハードウェアとソフトウェアの協調設計、とまではいかなくても、ソフトウェア開発者がハードウェアの知識を持ち、ハードウェア側に必要な情報を適切に提供することで、設計の品質が格段に向上し、手戻り工数などの削減にも寄与します。当社では、今回の記事で紹介した様々な工夫を実施することで、お客様のシステム開発を多方面からサポートしています。

ハードウェアも考慮した組込みソフト受託開発のお問い合わせはこちらから