I have a custom board that interfaces with a PI and also has a XBEE interface on it. I would like to be able to offer remote upgrades for the Arduino using the PI but also be able to program the Arduino from the XBEE wirelessly as well. I might be asking too much. If it can not listen on multiple UARTS is it possible to change the bootloader to listen to a different UART from UART0 to say UART1,2 or 3?
There are so many postings, blogs etc about bootloaders. Is there a bootloader that is prefered on custom designed boards vs the Arduino standard boards such as the UNO, Mega etc?
A bootloader that could be customized and is optimized (code base smallest possible) would be a real nice thing to know.
With all the bootloader stuff out there it is hard to know what to look for that is current and proven.
I think you can probably use the Arduino stock bootloader for the Mega2560 which listens on UART0. You can burn it onto your custom Mega2560 from the IDE. Since there are many people using Mega2560 Arduino boards, that would probably be the most proven.
Have you gotten to the point of being able to upload from the PI using the bootloader through the default UART0? And have you also been able to upload through the XBEE using the bootloader through the default UART0? If you have both scenarios proven, I would try connecting the PI pins to the RX and TX of your custom Arduino through 1K resistors. And also connect the XBEE TX and RX pins to the same RX and TX of your custom Arduino through 1K resistors. As long as both devices are not trying to upload at the same time, either should be able to send remote upgrades.
That is the approach I would consider first, see if it works out for you.
How does Xbee control Reset to kick off the bootloader?