O gerenciador de inicialização é um pequeno programa no flash do AVR que nunca é sobrescrito e é executado na inicialização. O trabalho do carregador de inicialização é ler os dados do programa do UART e gravá-los no flash interno. Sem um carregador de inicialização, a única maneira de carregar o código é usando o ISP.
O AVR ATMega8 vem sem código no flash. O código pode ser carregado através dos pinos do ISP (na programação do sistema), usando um programador AVR ISP (ou mesmo outro Arduino).
Para o Arduino, o ISP é usado apenas uma vez (na fabricação) - para carregar um pequeno carregador de inicialização. Na energização, o carregador de inicialização é executado e se comunica com o UART serial (pinos TX + RX). Agora, o Arduino pode ser programado através dos pinos seriais usando o protocolo STK500.
Como os pinos seriais são (normalmente) conectados a um chip USB para serial FTDI, o Arduino também pode ser programado por USB.