I'm designing a custom dual-uC board, where I want there to be two Arduinos both running different programs - kind of dual core arduino. In order to load new programs onto the uCs, yes, I could have two USB ports each connected to one of the uCs (say a ATmega32u4). But I'm trying to work out strategies with just one USB port (and no usb-hub).
Also, I don't need the USB functionality for general use, only for program updates.
Option 1:
Switch access to each USB capable Arduino (e.g. ATmega32U). Program one uC, toggle switch, program other uC
EDIT: this is fine, however I ideally want to use zero additional end-user buttons - I want the end-user to do as little as possible.
Option 2:
The arduino UNO has two devices, ATmega16U2 and a ATmega328. During normal operation the 16U operates as a usb-to-serial. However, I'm aware that there are custom firmwares that allow different functionality (such as USB-Joystick etc) - it is possible to switch firmawares between a custom-firmware and default firmware, to allow the ATmega328 to be programmed normally but also to run the custom program. But it seems that Arduino.h doesn't support the ATmega16U2, so I would have to program this device using the AVR or another framework.
Alternatively, the ATmega32U4 is supported by Arduino.h but there doesn't seem to be Arduino usb-serial 'firmware' for the 32U (only the 8U & 16U)
Option 3:
Can I use a ATmega32u4 with Arduino-ISP programming an ATmega328p?
EDIT: above seems valid: https://petervanhoyweghen.wordpress.com/2012/09/16/arduinoisp-on-the-leonardo/
Other simple recommended approaches?
EDIT: the firmware update should be physically as hands off as possible, as to be used by end-user, and preference for solutions that require zero additional buttons/etc
UPDATE:
I tried the Arduino as ISP method (option 3), and it works