Rob
There are four ways to do this on the K20:
1. Have a boot loader mode that includes the communication capability and transfer the (new) application using it and save it to a different area of the Flash. The boot loader jumps to the application when ready and generally on each new start. The application will probably need to duplicate much of the communication operation but the boot loader is 'standalone' and doesn't need an application to start with the first time.
2. The same as 1 but allow the application to share the generic operation (comminication stack) as a library. More difficult to configure but allows much smallr applications.
3. Use a small loader that is just responsible for copying valid software from a defined area in internal Flash (where new code is received to) to the application area. This requires the first code to be [boot + application] since the boot part can not operate alone; the application size is however limited to about half the available Flash since both the origial application (which copies the new one) has to exist together with teh new code until the application swap has completed.
4. The same as 3 but using an external memory device to save the new application to (eg. SPI Flash). The advantage is that the application size is not restricted to half the internal Fash size.
The uTasker "Bare-Minimum" loader is suitable for 3/4: http://www.utasker.com/docs/uTasker/uTasker_BM_Loader.pdf
Regards
Mark