It amazes us how many people launch microcontroller based products without giving any thought to how they will update the product in the future. This may need to be done because there was a bug but more likely because of customers asking for new features or competitors producing better versions.
The first thing that must be done is to add a sensible ISP (In System Programming) interface. Even if the microcontroller is programmed using a socket programmer in production, adding ISP capability is wise as most modern microcontrollers are ISP capable.
Select an interface that is easy and fits the standard programmer connectors. These vary depending on the microcontroller family – PIC programmers tend to use 6 x 1 pin headers or RJ11 sockets while AVR uses 3 x 2 or 5 x 2 pin headers. Adding a box header to your board is cheap and gives a key way for orientation so that the user can’t connect the wrong way round.
The next consideration, often overlooked, is configuration data such as serial numbers or calibration information that needs to be preserved during the update. This can be a problem if you have also locked the device to protect your code. Never put this data in code memory as it will be erased. EEPROM is a good choice on AVR microcontrollers as they have a preserve EEPROM flag but can be a problem on older PIC devices, especially if the are running at lower voltages below 4.5V, as the only choice then is bulk erase. PIC devices do have a separate user ID bytes section that can be preserved. Do some research when you decide where to store data that must be saved.
When you want to do a firmware update, your products will be scattered through out your country or the world and recalling them to base is not a viable option. Therefore, other people like service engineers, distributors or end users will have to do the update for you and you want to make it easy for them.
We have already looked at the ISP interface to make sure it is simple to connect the programmer. Giving the user a standard programmer with complicated instructions will lead to errors and lots of support issues with failed upgrades, so we need an alternative.
The two options are to select a programmer that has a DLL or command line option so that you can write a simplified front end for it (in VB, C++, Labview, Delphi etc) or supply a portable programmer that is easy to use.
We have been supplying ISP programmers for almost 20 years and have developed solutions that solve these problems. Our ISP programmers have DLL versions and our Hand Held and keyfob programmers couldn’t be easier for the user – connect it and press the button.