I have an Atmega 328 chip and want to load the Arduino boot loader to the chip. I have planned to use a SPI protocol to do this, but I have read other posts saying that they have done similar using an UART with using an FTDI chip. I have planned to use the FTDI to support USB.

I did rad some information that said that loading the boot loader through UART is very slow.

Which is best? I would like to save space, if I do not need a SPI header then I would like to remove this. Is what I have read correct?


2 Answers 2


I have read other posts saying that they have done similar using an UART with using an FTDI chip.

You have probably misread something. A brand-new, blank ATmega328 can only be programmed over SPI, or via parallel programming (more pins). There is no "native" UART bootloader.

It's possible to use certain FTDI chips to bit-bang the SPI programming interface. This is probably what the posts you're reading are referring to. As the post suggests, though, this is slower than using a programmer which directly supports the SPI interface, and is only really suitable if you don't have a better programmer available.

If space is a concern, one option to consider may be to provide the ISP port as a set of test points and use pogo pins to access it during manufacturing. You can lay out the test points however you want, possibly at a finer pitch than the 100 mil header you're probably used to.

Depending on your manufacturing process, another approach may be to program the chip before mounting it to the board.


Loading via UART is not so bad if you configure the bootloader to use a reasonable baud rate (say, 115200 instead of the default 9600). However, you do have to get the bootloader onto the chip in the first place, and that has to be done with SPI.

  • But if you do have SPI then you don't need the bootloader, not even for Arduino code. Commented Nov 3, 2016 at 18:00
  • True, but the bootloader could theoretically be loaded before soldering the chip or via pogo pins on test points, alleviating the need for a bulky ISP header while enabling simple firmware updates via UART. Commented Nov 3, 2016 at 18:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.