Bộ tải khởi động là một chương trình nhỏ trong flash của AVR, nó không bao giờ bị ghi đè và chạy bằng powerup. Công việc của bộ nạp khởi động là đọc dữ liệu chương trình từ UART và ghi nó vào flash bên trong. Không có bộ tải khởi động, cách duy nhất để tải mã là sử dụng ISP.
AVR ATMega8 không có mã trong flash. Mã có thể được tải lên thông qua các chân ISP (lập trình trong hệ thống), sử dụng một lập trình viên ISP ISP (hoặc thậm chí là một Arduino khác).
Đối với Arduino, ISP chỉ được sử dụng một lần (lúc sản xuất) - để tải lên bộ tải khởi động nhỏ. Khi bật nguồn, bộ tải khởi động chạy và giao tiếp với UART nối tiếp (chân TX + RX). Bây giờ, Arduino có thể được lập trình thông qua các chân nối tiếp bằng giao thức STK500.
Vì các chân nối tiếp (thường) được kết nối với USB FTDI sang chip nối tiếp, Arduino cũng có thể được lập trình qua USB.