■CPU、メモリ、デバイスについての情報
さて、組込機器向けソフトウエア=ファームウエアを開発するとなると考えることはたくさんあります。まずはターゲットのハードウエア、具体的にはCPU・メモリ・搭載デバイスについての情報を入手しましょう。 (さすがにこの世界に入ったばかりのエンジニアに、それらも何を使うか考えろとは言われないと思います...) パソコン向けのCPUはそれほど種類はありませんが、マイコンは対応機能が限定されていたり、搭載されているメモリのサイズが異なるなど、目的に応じて様々な仕様のものが各社から販売されています。例)
ルネサスエレクトロニクス RX72M
STマイクロエレクトロニクス STM32F4
NXPセミコンダクターズ i.MX8
おそらくハードウエア開発担当者が開発対象の機器の要求仕様から適切なものを選択してくれて、ファームウエアエンジニアの皆さんには以下の情報が伝えられるはずです。
・使用するCPUと、CPUの設定内容(BSC、PFCなど)、エンディアン
・CPU内蔵のROM/RAMサイズ、外付けのROM/RAMサイズ
・USB、Ethernetなどデバイスと使用するコントローラ(CPU内蔵?外付け?)
これらの情報がファームウエアを開発するときに必要となります。
■ファームウエアの全体構成
前回「ファームウエアは、ソフトウエアモジュールを組み合わせて作る」のようなお話をしたかと思います。 WindowsやLinuxなど汎用OSには最初からいろいろなモジュールが入っていますが、リソース(CPUの処理能力やメモリサイズ)が限定されている組込機器ではその機器に必要なソフトウエアモジュールだけを、自分で書いたり外部から入手して、組み合わせて作ります。 一般的な組込機器ファームウエアで登場するソフトウエアモジュールとしてはこんな感じでしょうか。 (下がハードウエアに近い方、上がユーザに近い方)・ユーザアプリケーション
・ミドルウエア
・デバイスドライバ
・OS
・ブートストラップ
上記の各ソフトウエアモジュールをどうするか、ということの他に、
・開発環境
・デバッグ環境
をどうするか、ということも考える必要があります。
これから一つづつ説明します。まずブートストラップについてです。
■ブートストラップ
組込機器に電源を入れると最初に動くプログラムです。パソコンで言うとBIOSのようなもの、というとイメージできますでしょうか。。 ハードウエア固有のCPU設定、ピン設定、メモリ設定を行い、ファームウエアの先頭番地にジャンプするところまでを担当します。以下のいずれかの方法で用意することになります。・自分で書く
前述のハードウエア情報をCPUのレジスタにセットする、というプログラムを自分でアセンブラで書く方法です。さらに、起動するファームウエアを選択する、ネットワーク経由でファームウエアをダウンロードする、などより複雑な処理をブートストラップに持たせる場合は、全部アセンブラで書くのは現実的ではないので、最低限必要な部分のみアセンブラで書いて、本体のプログラムの先頭番地にジャンプさせる場合もあります。
・外部から入手する
先に「自分で書く」を書いて怖がらせましたが、ご安心ください、それは昔のお話で、今はほぼ100%外部から入手するものを使います。というのも、よっぽどマイナーなCPUを選択しない限り、世の中にはCPUベンダやサードパーティがマイコンの評価基板というものを出しており、その上で動くブートストラップがついているからです。
例)
ルネサスエレクトロニクス RX72Mネットワークソリューション
STマイクロエレクトロニクス STM32429I-EVAL
NXPセミコンダクターズ 8MNANOD4-EVK
今はこういったマイコン評価基板についてくるブートストラップ・サンプルプログラムをベースにファームウエア開発を進めて、実際の製品ハードウエアができてきた時点で評価基板との差分だけ書き換えて移植することになると思います。
■今日の閑話
申し遅れました、筆者はCente(セント、と読みます)の中の一人です。Centeは上記のファームウエア構成に出てくる「ミドルウエア」のブランドで、我々がこの事業を始めて今年でもう20年になります。この業界の老舗だからこそ持っている実績とノウハウで、この世界に初めて入った皆さんの良き相談役になりたいと考えています。ただ、「エンジニア視点で一緒に良い製品になるよう考えたい」気持ちが先行してしまい、商談の場で「その仕様ならCente使わない方が良いです」と言い放って同席した営業の人を慌てさせたのは私です。(笑)
次回はおそらく最も悩ましい「OSの選定」です。
Cente:
https://www.cente.jp/