Para responder ao aspecto de sua pergunta sobre o "firmware" no ATUMega328p MCU usado na maioria das placas Arduino:
Não há firmware no ATmega além do gerenciador de inicialização. Os programas que você escreve estão sendo executados diretamente no hardware.
Existem certas configurações de "fusível" que são definidas com um programador de ISP . No entanto, existem apenas 24 deles (três bytes), e eles se relacionam amplamente à configuração de baixo nível, e não é o que eu acho que você está perguntando:
Há também o Bootloader , que é um pequeno programa que fica em um segmento separado da memória do programa do MCU e permite que ele se atualize na inicialização (que é como todos os arduinos são programados). No entanto, ele é executado apenas por um curto período de tempo na inicialização e é completamente removido da memória depois que o MCU passa para o programa principal.
Por fim, existem MCUs auxiliares (ATmega16U2 / 8U2) na maioria das placas arduino usadas como interfaces serial USB, que podem ser atualizadas para se comportarem de maneira diferente (por exemplo, emular um teclado / mouse), mas, novamente, isso não é realmente uma mudança para o processador principal, portanto, se ele conta como "instalar um firmware diferente" depende de como você define o arduino.
Realmente, eu recomendo fortemente a leitura da folha de dados do ATmega328P . Esta é a documentação para o MCU que basicamente forma o "Arduino". Deve abordar o que parece ser conceitos errôneos.