Для микроконтроллеров есть документация, в которой может быть описан протокол программирования. Обычно это некоторый набор простых команд (стереть / считать / записать), направляемый небольшому загрузчику внутри чипа, который уже руководит записью прошивки через аппаратные регистры микроконтроллера, точно так же, как вы можете взаимодействовать с флеш-памятью из своего кода для этого же МК, поэтому никакого таинства тут нет
в вашей ситуации стоит обратить внимание на готовые проекты на github, реализующие протокол программирования, например, вот
https://github.com/coder-KO/Programming-ATmega328P...
из кода можно разобраться, что происходит и как это повторить.
если же кода нет, всегда можно подключить логический анализатор к контактам для программирования, пока программатор шевелит лапками и досконально записать происходящее, а потом разбираться с командами и задержками