電子機器または組み込みシステムは、ファームウェア(ROMなどの不揮発性メモリに格納されている)を、デバイスを分解したり製造元に返送したりすることなく「現場で」変更できる場合、フィールドプログラマブルまたはインプレースプログラマブルであると言われます。 [ 1 ]
これは、バグのあるファームウェアや旧式のファームウェアの交換にかかるコストと所要時間を削減できるため、非常に望ましい機能です。例えば、デジタルカメラメーカーは、新しい画像ファイル形式をサポートするファームウェアを、 USBケーブル経由でカメラに新しいファームウェアイメージをダウンロードするよう消費者に指示することで配布できます。
デバイスのファームウェアがマスクROMまたはワンタイムプログラマブルPROMに保存されている場合、集積回路を物理的に交換しない限り変更できないため、そのようなデバイスは現代的な意味でのフィールドプログラマブルとは言えません。 消去可能なPROMベースのファームウェアは消去および再プログラムが可能ですが、そのためには高強度の紫外線光源に長時間照射する必要があります。
そのため、フィールドプログラマブルデバイスは、1980年代にEEPROMとフラッシュメモリが発明されるまで実用的ではありませんでした。初期のEEPROMは、高電圧(一般的なロジックレベル3~ 5Vに対し、 10~ 20V )を必要とし、標準的なプログラミングプロトコルもなかったため、高価な専用プログラマハードウェアでしか再プログラムできませんでした。結果として、フィールドプログラミングは主に専門の技術者やサービスエンジニアによって行われていました。しかし、2000年代初頭から、多くのデバイスが一般消費者によるフィールドプログラミングを前提として設計されるようになりました。これを可能にしたのは、いくつかの技術開発です。
不揮発性メモリデバイスのプログラミングに関する標準プロトコルが確立されている。例えば、JTAGは多くの民生用電子機器に搭載されているEEPROMやフラッシュメモリの読み出しとプログラミングに使用できる。完成品では外部コネクタは露出していないものの、こうしたデバイスの多くは工場出荷時のプログラミングや品質管理のために内部にJTAGヘッダーを備えている。
1980年代には、 PAL、PLA、CPLDなどのプログラマブルロジックデバイス(PLD)が登場しました。これらは、不揮発性メモリに格納されたファームウェアのような情報に基づいて、ほぼ任意のデジタル論理関数を実装できる集積回路です。
したがって、PLDを含むデバイスはフィールドプログラマブルハードウェアとみなすことができ、EEPROMとフラッシュメモリはフィールドプログラマブルソフトウェアのストレージとして機能する。
フィールドプログラマブルゲートアレイ(FPGA)は1984年に発明され、現在入手可能なプログラマブルロジックの中で最も先進的なものです。これらの大容量デバイスは、マイクロプロセッサやデジタル信号プロセッサなど、非常に複雑なロジックを実装できます。今日では、デジタル電子機器の開発と迅速な展開に大きく貢献しています。FPGAは、ハードウェア設計のプロトタイピングやハードウェアアクセラレーションによく使用されます。
MP3プレーヤー、ブロードバンドルーター、携帯電話、デジタルカメラなど、多くの民生用電子機器には、汎用マイクロプロセッサとマイクロコントローラをベースとした組み込みシステムが搭載されています。これらの機器のほとんどには、知識豊富なハードウェアハッカーが特定してアクセスできるフィールドプログラミング可能なコンポーネントが含まれています。フィールドプログラミングにより、愛好家は機器のファームウェアを新しいコードに置き換えて、その機能を変更または拡張することができます。
こうした改造に特に適していると判明したデバイスを中心に、数多くのオンラインコミュニティが誕生している。例えば、iPodLinuxプロジェクトとOpenWrtプロジェクトは、それぞれMP3プレーヤーと無線ルーター上で、フル機能のLinuxディストリビューションを実行できるようにしている。
趣味でフィールドプログラミングを行うことは、理論的には今日ではほぼすべての組み込みシステムで可能であるが、実際には、消費者向け機器を改造しようとする試みは、ハードウェアに関するドキュメントの不足によってしばしば妨げられる。