I have been investigating the procedure for bootloading a chip with Arduino, and have gotten confused over something. I'm wondering why some Arduino boards put the bootloader on an auxiliary microcontroller (Atmel AVR® AT32UC3B1256 for the MEGA-1284P Xplained Board http://www.atmel.com/Images/doc8377.pdf) and the (ATMEGA16U2-MU for the Mega 2560 Board http://arduino.cc/en/uploads/Main/arduino-mega2560_R3-sch.pdf).
In the following example on the Arduino website (http://www.arduino.cc/en/Main/Standalone), the main chip is bootloaded. I don't see any auxiliary chip here. A couple questions come to mind:
1) Why is a secondary microcontroller needed? Can't you just bootload the main chip and use a dedicated USB-to-Serial chip (FTDI?) for communication?
2) How do you know which secondary microcontrollers are compatible for bootloading and how do you connect them to the main chip?
3) How do you know what code to put onto the secondary chip?
Thank you
Historically:
The earliest Arduinos used a RS232 serial connection for communications and programming -- and this is still a good method, but slower, and one needs a RS232 port on one's computer, and these are getting harder to find.
The development of the FTDI (usb-to-serial) chips allowed the next generation of Arduinos to use USB. Using USB is faster and convenient, and optionally can supply power to the Arduino.
As is stated in other posts, the next 'step' was to use a usb-capable microprocessor to replace the FTDI chips, as this was both cheaper and allowed additional capability.
It is possible to use USB directly with microprocessors, and there are several projects that do just that. This is both cheap and convenient. However, the disadvantages are that you are limited to the slow version of USB (which may not be a big deal), and the usb-driver code takes u a lot of space in the microprocessor, leaving not much left for user-code.
Lots of options. For ultimate cheapness, you can use a separate USB-serial adapter to talk to a minimal system, see: http://arduino.cc/en/Main/ArduinoBoardMini and http://arduino.cc/en/Main/USBSerial
David