ファームウェア

ファームウェア（）とは、電子機器に組み込まれたコンピュータシステム（ハードウェア）を制御するためのソフトウェアで、ソフトウェアをROM等の集積回路にあらかじめ書き込まれた状態で、機器に組み込んだもの。また、ソフトウェアではなく、プログラマブルロジックデバイスで利用する回路情報も広義のファームウェアと呼ぶことがある。

概要
ファームウェアとは、家電製品や、パソコン、周辺機器、携帯電話などのように、コンピュータシステムを組み込んだ電子機器本体（組み込みシステム）に所望の動作をさせるためのソフトウェアであり、ハードウェアに密接に結びついていて、むやみに書き換えることのない媒体に書き込まれた物を言う。一般的なソフトウェアよりハードウェア寄りのソフトウェアということで、ファーム（堅い、固定した）という呼び方をしている。

なおファームウェアには、機器に使用しているCPU自体の動作を決定するためのマイクロコードを含んでいる場合もある。

ファームウェアを作成するにあたっては、限られたハードウェア資源で必要とするパフォーマンスを得るため、当初はアセンブリ言語などの低級言語で開発することが多かった。しかし、組み込み用CPUの高速化と、記録媒体である半導体メモリ価格の大幅な下落と大容量化により、C言語などのより高級な言語が使用できるようになった。
さらに従来のように動作に関わるものすべてを一からコーディングするという手法だけでなく、複雑な処理を行うシステムではオペレーティングシステムも含む全てのソフトウェアを機器に組み込んで、開発の効率化と高機能化を図る例も増えている。

ファームウェアは、一般にROMタイプのメモリ素子に書き込む形で機器に組み込みを行う。低コストの機器では、マイクロコントローラに内蔵されたROMを使用し、より高機能のものでは独立したメモリ素子を用意してそれに書き込みを行う。

特に低コストで大量に製造される製品の場合は、マスクROMを内蔵したマイクロコントローラを使用するので、出荷後に書き換えることは不可能である。交換可能なUV-EPROMなどを装備した機器であっても、出荷後にアップデートするにはROM交換などの処置に莫大なコストがかかるため、通常のソフトウェア開発より非常に高い水準の完全性が求められる。

しかし、フラッシュメモリの登場により、筐体のふたを開けなくてもユーザの手元で電子的な操作のみで書き替えが行えるISP（イン・システム・プログラミング）ができるようになり、出荷後のアップデートが以前よりも比較的容易に行えるようになった。

関連項目
（）
ブートローダ
組み込みシステム
マイクロコード

（UEFI）
システムソフトウェア
カスタムファームウェア

ハードウェア
ソフトウェア