C2Prog Highlights

  • Fast communication protocol that works reliably with USB-to-RS232 converters.
  • Support for point-to-point as well as multidrop networks.
  • Smart detection of which Flash sectors must be erased (or manual section selection if desired).
  • Automatic 32-bit CRC (Cyclic Redundancy Check) generation and programming (allowing the firmware to verify the flash integrity at MCU bootup).
  • Extended hex files that can be encrypted and contain all the settings for programming, including secondary bootloader.
  • Command-line and DLL interface, callable by other programs, for example for batch programming.
  • JSON-RPC server for controlling C2Prog remotely from e.g. Phython.
  • Flashing of multi-core Concerto and Delfino devices.
  • Command prompt utilities for advanced testing and debugging.
  • Support for custom bootloader solutions, enabling
    • touchless reflashing
    • CAN communication
    • firmware encryption for secure reflashing in the field

Extended Hex Files

“Extended Hex” (ehx) is the preferred format for distributing binary files for programming with C2Prog. An ehx file contains the data to be programmed (firmware image), combined with all MCU specific settings and auxiliary binaries required by C2Prog. Ehx files may contain an encrypted firmware image and can be password protected, making it the ideal format for distributing programming files, while also avoiding unauthorized use and protecting IP.

Ehx files can be generated from the C2Prog GUI as well as the command line, for example as a final step of the build process.

c2p-cli mkehx --target=28335_30MHz test.out

C2Prog DLL

The C2Prog core functionality is exported via a Dynamic-Link Library (DLL) for use by other applications, such as end-of-line (EOL) test-stands or field support tools. With the C2Prog-DLL, flash programing capability can easily be added to custom applications generated by virtually any toolchain, including NI LabView.



The C2Prog functionality can also be accessed over TCP/IP via JSON RPC, a lightweight remote procedure call protocol.

c2p-server --rpc-port=8080

This allows automation of the MCU programming, e.g. from a Python script.

import jsonrpc_requests

def main():
    url = ""
    server = jsonrpc_requests.Server(url)
    result = server.load(
        file = "C:/fw/demo.ehx", 
        port = "COM1", 
        passphrase = ""
    while(result["error"] == ""):
        if(result["info"] != ""):
        if(result["progress"] == 1.0):
        result = server.get_status()
    print("Final: {0}".format(result))

if __name__ == "__main__":

CRC Record Generation

If desired, C2Prog can compute a 32-bit checksum and append it to the firmware image as a CRC Record. This checksum can be used to verify the flash integrity, for example at MCU power-up or continuously in the background of the embedded code execution.


The CRC record is delimited by 0x0000 to allow locating the CRC value.

Custom Bootloaders

C2Prog serves as the reflashing client for CodeSkin’s custom bootloaders.

Custom bootloaders provide support for a variety of communication protocols and interfaces. They further allow firmware encryption and reflashing of MCUs that have the security module enabled.

Custom bootloaders enable touchless reflashing, where the application can activate the bootloader without the need for toggling any GPIO pins.