Theoretisch kann man jeden Mikrocontroller über ISP programmieren,
solange ein dementsprechender Bootloader auf dem Mikrocontroller
vorhanden ist. Dieser wird beim Start des Mikrocontrollers ausgeführt
und wartet nun ob ein Programmierwunsch auf dem angegebenen Interface
(SPI, UART, USB, Ethernet...im Endeffekt alles was man sich vorstellen
kann) ankommt. Wenn einer ankommt wird das Programm an die
dementsprechende stelle im flash geladen. Ansonsten wird das vorherige
Programm ausgeführt. Beliebtes beispiel hierfür ist jeder Router. Denn
kann man ja auch über das Internet eine Firmware aufspielen. Dabei
verfügt der Controller des Router auch nur über einen eigenen
bootloader.
Viele Controller besitzen auch einen in Hardware eingegossenen ISP
Controller (so bsw. AVR, PIC, MSP430 und die NXP LPC). Dabei wird im
Endeffekt nichts anderes gemacht als oben. Nach dem Reset startet der
Controller die ISP Unit und schaut ob ein programmierwunsch ankommt.
Wenn ja wird das Programm reingeladen, ansonsten wird das alte
ausgeführt.
Die Identifikation ob ein Programmierwunsch anliegt wird meist über eine
bestimmte Befehlsfolge gemacht.