Officially announced in 2004, Cortex-M3 became popular in various devkits by 2011. It was soon followed by the much-cheaper, yet still highly efficient Cortex-M0. Much faster than devices like AVRs and PICs, they were programmable purely in C and required no assembly or weird tricks. They were supported by GCC, thus not requiring expensive proprietary compilers. There was only one weakness: each manufacturer came up with their own method for flashing and debugging. There was no standardization. This passed muster for devkits, but hobbyists making their own board quickly lost track of all the different devices they needed for one project.
Two products were created with the capability to debug multiple Cortex-M chips: JLINK and ULINK. Both cost upwards of $1,000 USD and were marketed towards large companies developing hardware with Cortex-M chips. While cheaper version were eventually offered, they were still $200 USD or more. It was time for a more accessible solution.
Why is there no simple sub-$25 device to program all these cheap micros?Apr 2014
The CortexProg started with this challenge – how to build a generic Cortex-M debugger only out of components that any hobbyist would already have, on a perforated board. The actual protocol used to talk to the ARM Cortex-M core is documented by ARM. The task at hand was to implement it in a correct and performant manner.
The very first CortexProg prototype was implemented on an AVR ATTiny85 using the ModulaR bootloader. This provided for a HID-based communications protocol to the PC and easy firmware updates to support further development. It could only debug 3.3V targets, and rather slowly at that. With a blazing upload speed of 800 bytes per second, on a good day, the CortexProg prototype served a very important function. It proved that an inexpensive device was possible. In fact, to commemorate this first attempt, the design and all the PC-side tools are still supported, so that any enthusiast could build one themselves.
While the prototype served as proof of concept, it was not yet a practical solution to the problem. It needed higher speed, more features and a real PCB. Each successive version of the CortexProg was programmed and debugged with its predecessor. Here is the first ARM-based CortexProg: the v0. Today a few v0 devices are around. They are supported by all the tools and firmware updates are still provided.
Each iteration on the design added essential features. CortexProg v1 increased the speed three-fold. CortexProg v2 allowed for the debugging of targets with variable voltages and gave the option to supply 3.3 V to the target. Additionally, v2 included a built-in CDC serial functionality for easier data input/output to the target device.
CortexProg v3 included the ability to supply variable voltages to the target up to 2.4 V, at currents up to 350mA.
CortexProg v4 perfected the design by opening up the range of the supplied voltages to 0.7V - 3.3V, making the device usable for every potential target. As a bonus it now supports the debugging of multi-core chips and SWD clock speed control.