Imagine a device with a bog standard AVR microcontroller. The chip has a fairly mundane job and resides on a PCB with a JTAG port for in system programming. Often, that would be it. However, shipping devices out without the option of fixing bugs irks me. I have been pondering how to allow laymen users to upgrade their firmware in the field:
- USB. Even though it seems attractive at first, I do not consider this ideal. To do it is not terribly complex, but to do it reliably and without fuss (missing drivers, for instance) is a lot harder. You will also have to create a desktop application that allows the user to upload the firmware to his device, which in turn probably means having to support several platforms. The whole thing starts ballooning out of control fairly quickly.
- Programmer: another options is to provide another programming device with the main device. The programmer could be preloaded with software, it might be a thumb drive that allows files to be transferred onto it or it could have a SD Card slot. Even though it is somewhat easier to develop than the USB option, it is still a hassle for the non technical user.
- SD Card: this is the best option I could come up with. The device has an SD Card slot that accepts cards with an image. The user just puts the preloaded card in the slot and boots the device, or loads the files on an SD Card himself.
The last option has a few consequences. The most obvious one would be that a second microcontroller would be needed to program the first. In some projects the BOM increase is small and irrelevant, but it might be a hurdle for others. The second microcontroller would use some extra power, but appropriate power gating should limit that to almost nothing. However, a big concern would be the increased complexity. It is no use adding an extra feature if it compromises the main attraction. The operation would need to be dead reliable and easy, but proper development and care should take care of that.
Am I missing significant disadvantages of the suggested approach? Are there other options that might be more suitable?