IAP(In-application programming)
ライタやデバッグプローブを接続せず、動作中のファームウェア自身が自分のフラッシュメモリを書き換えること。
ISPは基板に載せたまま外部ライタでチップを書き込む方式だが、IAPはそれすら不要にする。実行中のプログラムがUART、USB、無線などで新しいイメージを受け取り、セクタを消去して自分で書き込む。あらゆるブートローダとOTAアップデートは実際にはこの仕組みで動いている。NXPのLPCファミリは、ブートROMにIAPルーチンを最初から用意し、アプリケーションが関数ポインタを呼ぶだけで済むようにしていた。
問題は、フラッシュが消去中は一般に読み出せないことだ。同じバンクからコードを実行していると、CPUは割り込みも含めて数ミリ秒停止する。そのため重要なルーチンは先にRAMへコピーしておく。デュアルバンクフラッシュなら、片方のバンクを読みながらもう片方に書けるので、この問題を避けられる。消去の最中に電源が落ちれば、製品が文鎮になるのは昔から変わらない。