組み込みシステムは、今日の技術主導の世界で至る所に存在します。インターネットに接続されたシェーバーであれ、複雑な自動車であれ、私たちが今日使用しているほとんどの電子デバイスの中心には組み込みデバイスがあります。1つまたは複数のマイクロプロセッサで構成される組み込みシステムは、複雑さをソフトウェアによって処理させることで、電子機器を簡素化することができます。組み込みデバイスが大きく複雑になるにつれて、プリント回路基板(PCB)も同様に大きく複雑になります。しばしばこれらのデバイスは複数の基板に成長し、当初意図されたよりも大きなアセンブリになることがあります。
この記事では、複数のPCBで構成される組み込みシステムのアーキテクチャのトレードオフと考慮事項について見ていきます。複数のPCBシステムに関連する利点、設計上の考慮事項、および課題について説明します。
デバイスを単一のPCBに保つことが理想的な選択肢です(単純さとコストの両方のために)、しかし、設計目標を達成するためには、設計を2つ以上のPCBに分割する必要があることもあります。製品を複数の基板に分割したい理由のいくつかは以下の通りです:
これらの理由(およびその他)から、複数のPCBで構成されるアセンブリを設計することを考慮しますが、組み込みファームウェア側の課題も複雑さを持っています。
複数のPCBを使用する場合(該当する場合)のケースを確立した今、組み込みシステムをアーキテクチャする際の設計上の考慮事項を理解することが重要です。ハードウェアとソフトウェアの両方の観点から、単一の基板にすべてを載せるときにはあまり慎重に考慮しないニュアンスがあります。
最初に頭に浮かぶべき考慮事項は、ボード間通信です。各ボードはどのようにして互いに通信するのでしょうか?どのような処理能力(もしあれば)が各ボードに存在するのでしょうか?もしかすると、1枚のボードが脳の役割を果たし、他のボードがセンサーの役割を果たしているのかもしれませんね。I2C、SPI、UART、Ethernetなど、慎重に伝送プロトコルを選び出す際には、伝送線、信号の整合性、そして最も重要な、ボード間コネクタを通じた信号の伝送も考慮しなければなりません。設計者にとって最悪なこと(そして信じてください、私もそこにいました)は、システム全体を設計し、製造業者からPCBを受け取った後で、クロック信号を1つや2つ見落としていたことに気づくことです。また、ボード間コネクタのスペアピンを確保することを忘れがちで、ピン数を最大限に活用しようと試みます。これは最終的に私たちを苦しめることになります。Altium Designerのマルチボードアセンブリ機能のように、多数の通信ラインをPCB間でルーティングする際には、マルチボードプロジェクトを念頭に置いて設計することが必須です。
また、特にマイクロプロセッサで電力バスを監視する場合、電力の分配方法についても考える必要があります。「脳」へのアクセスを容易にして、任意の壊滅的なイベントを監視できるようにしたいですが、スイッチング供給のノイズ、重負荷のための電力分配、そしてボード間コネクタのピンがその種の電力に耐えられるかどうかも考慮する必要があります。
最後に、組み込みシステムのソフトウェア自体とは直接関係ありませんが、機械設計も重要な役割を果たします。プッシュボタン、タッチスクリーン、およびその他のユーザーへの物理的インターフェースは、マイクロプロセッサに接続されており、考慮されなければなりません。配線はマイクロプロセッサが入力にアクセスできるようにルーティングできるでしょうか?ボード間を通過する際の高速デジタル出力の信号整合性を考慮しましたか?これらは、組み込みデバイスを設計する際に考えなければならないことです。
私が何度も目にしてきた最も過小評価されがちな課題の一つは、スタートアップのスケーリング(大企業でさえも)でのソフトウェアとハードウェア間のバージョニングスキームの疫病です。ソフトウェアリリースとPCBリビジョンの管理は、混乱、遅延、さらには製品の失敗につながる終わりのない戦いとなっています。
例えば、私が関わったあるスタートアップでは、PCBのわずかな変更がリスピンを必要とし、結果としてファームウェアの更新(最小限ではあるが)が必要となりました。バージョン管理が不十分だったため、エンジニアリングチームは新しいファームウェアを古いPCBバージョンにデプロイし、予期せぬブラウンアウトと時折発生する煙の雲を引き起こしました。幸いにも製品が出荷される前にそれを発見しましたが、それは終わりのない悪夢でした。
これらの落とし穴を避けるためには、確固たるバージョニングスキームを確立し、ハードウェアとソフトウェアチーム間の明確なコミュニケーションを保証することが重要です。ファームウェアのGitハッシュ(またはセマンティックバージョン)と、ハードウェアリビジョンの基本的なサポートルックアップテーブルを併用するなど、シンプルなバージョニングスキームでも始めるには十分です。時間が経つにつれて、ファームウェア内でのハードウェアリビジョン検出(つまり互換性のチェック)など、より洗練されたメカニズムが混乱を大幅に減らすのにも役立ちます。
ソフトウェアのバージョニングに加えて、コードのモジュール性についても考えることが重要です。スパゲッティコードでは、新しいチップやセンサーを搭載したセンサーボードを交換することが、リファクタリングの悪夢になる可能性があります。デバイスドライバーをモジュール化し、ハードウェア抽象化レイヤーを作成することで、今後数年間、簡単にコンポーネントを交換できるようになります。これは、組み込みシステムが時間とともに複雑さを増していくにつれて、はるかに人気が出てきたことです。
組み込みシステムのアーキテクチャについて考えるとき、常に小さなことを考える必要はありません。宇宙船や自動車は非常に複雑な組み込みシステムですが、スマートフォンもそうです。インターネットに接続されたスプーンを設計する場合でも、次の衛星を設計する場合でも、複数のPCBを設計する際に組み込みシステムのアーキテクチャのトレードオフを理解することは非常に重要です。この記事では多くの概念を探求しましたが、間違いなく、あなたの旅の途中でさらに多くのことを見つけるでしょう。