Introduction

IC programming refers to the process of loading or programming firmware, software, or configuration data for integrated circuits.

This article provides an in-depth overview of IC programming covering the need for programming, programmer types, device interfaces, programming methods, file formats, and key considerations for selecting programmers suited to production needs.

What is IC Programming?

 The user needs to load a compiled machine code program using a programmer tool to make it execute the desired tasks.

Key types of programmable ICs:

  • Microcontrollers – Used in most electronic devices and appliances. Programmed with embedded firmware code.
  • FPGAs – Field Programmable Gate Array. Configured with hardware behavior design files.
  • CPLDs – Complex Programmable Logic Devices. Programmed with logic equations.
  • Flash Memories – Store firmware code. Can be reprogrammed.
  • EEPROMs – Non-volatile memory programmed with data.

Without proper IC programming, such devices are non-functional. So programming is an essential step before deploying programmable ICs into products.

Why is IC Programming Needed?

Below are some key reasons why programming is an essential step in the IC and PCB assembly process:

  • Boot up – ICs need an initial program loaded in order to boot up and begin functioning.
  • Define functionality – The program code determines the IC behavior. For example, a microcontroller can be made to run a motor control algorithm or a wireless protocol stack based on the programmed firmware.
  • Configure settings – Programming is used to set parameters like IDs, baud rates, addresses, encryption keys etc.
  • Adaptability – Programs can be updated in the field to add new features or modify functionality.
  • IP protection – Keeping the program code separate from chip fabrication protects the intellectual property of designers.
  • Inventory – One generic IC can be programmed in many ways for different customer orders from stock.
  • End-of-line production – ICs are programmed as the last step before shipping finished boards.

Without programming, ICs are non-functional blanks. Programming brings the chips to life with the intended behaviors and capabilities.

IC Programmer Types

Various types of IC programmers are available to meet different usage scenarios:

Desktop Programmers

Small portable units used by engineers for prototyping needs in R&D environments. Support a wide range of ICs but lower production volumes.

Production Programmers

Bench-top systems focused on high volume programming needs in manufacturing environments. Optimized for speed, reliability, and simple changeovers between IC types.

Gang Programmers

Special production grade programmers with multiple sockets allowing concurrent programming of several identical ICs. Dramatically increases throughput.

Automated Handlers

Sophisticated robotic IC handling mechanisms for automated pick-and-place from component reels/trays, insertion into programmer, and programmed ICs back to output reels/trays.

Field Programmers

Portable, battery-powered units that allow programming or reprogramming deployed ICs in the field for maintenance needs.

In-System Programmers

Allow programming ICs without physical removal from system boards by connecting via test points or circuits on the PCBs.

Selecting the right category of programmer depends on the stage of use – development, production, or field maintenance.

IC Device Interfaces

Programmers need compatible physical interfaces to connect with ICs for loading code. Common interfaces include:

  • Joint Test Action Group (JTAG) – Serial interface using dedicated test pins on ICs. Used to program and debug microcontrollers, FPGAs. High signal integrity but requires test points routed in PCBs.
  • Serial Peripheral Interface (SPI) – Commonly available 4-wire serial interface on microcontrollers. No test pads needed. Can be restricted access. Lower signal integrity over distance.
  • Inter-Integrated Circuit (I2C) – 2-wire serial interface bus used to access peripherals and memory. Widely used for field programming EEPROMs in monitors, displays etc.
  • Universal Asynchronous Receiver/Transmitter (UART) – Asynchronous serial interface using TX and RX pins. Ubiquitous debug and bootloader interface on microcontrollers. Requires just two test pins.
  • Single Wire Debug (SWD) – Two pin serial debug interface on ARM Cortex MCUs routed to board test points. Supports real-time debugging/programming.
  • Serial Wire Debug (SWD) – Alternative to JTAG using just two wires for ARM debugging.
  • Background Debug Mode (BDM) – Proprietary two pin debug interface on Freescale/NXP MCUs.
  • Direct ISP – Many microcontrollers support direct in-system programming via bootloader code over UART or I2C without debugger hardware.
  • IEEE 1149.1 JTAG – Older deprecated JTAG standard still used on some legacy ICs.

Selecting programmers with interfaces matching deployed ICs enables proper programming access.

ic program fixture

IC Programming Methods

There are two main methods used for loading program code into devices:

In-Circuit Programming

The IC is programmed while still physically mounted on the PCB. This requires test points or pads connected to programming interface pins on the IC. Programmer connects to board interface to access the chip. Useful for development, field upgrades, repairs.

Offline Programming

ICs are programmed in bulk before being assembled onto boards using dedicated production programmers. ICs are inserted into sockets on the programmer which loads code into each chip sequentially. Enables high volume automated production programming.

Some programmers support both on-board and offline programming capabilities. The method chosen depends on the phase of use – design validation, manufacturing, or field maintenance.

Programmer File Formats

Programmers need the program code files in specific formats like:

  • Hex Files – Contain executable machine code in ASCII hex byte format for directly programming into memory.
  • JEDEC Files – Industry standard file for programming firmware into memory and flash ICs.
  • SVF/STAPL Files – Serial vector format files for describing JTAG sequences for microcontroller programming.
  • BIT Files – Encoder bitstream files for configuring FPGA and CPLD devices.
  • BIX Files – Bytecraft format used to program microcontrollers via JTAG interface.
  • IEEE 1532 Files – Files describing programming sequences for IEEE 1149.1 JTAG compliant devices.
  • PDB Files – Program database files containing debug data used by programmers and debuggers.

Various toolchains output firmware and code in these formats which are then imported into programmers before loading into ICs.

Key Programmer Specifications

Below are the key parameters and features to evaluate when selecting an IC programmer for usage needs:

Supported ICs

  • Microcontrollers – ARM Cortex, PIC, AVR, 8051 etc.
  • FPGAs – From vendors like Xilinx, Intel/Altera etc.
  • Flash/EEPROMs – SPI, I2C, and quad I/O devices.
  • Processor types – AMD, Intel, Qualcomm etc.

Interfaces

  • JTAG, ISP, SWD, I2C, SPI, UART – Review supported interfaces.
  • PCB connector – Adapters for board-level programming via internal or test board connectors.

Throughput

  • Programming time – Chips/hour rating. Parallel gang programmers are faster.
  • Support for multi-site programming.
  • Automated handler integration for turnkey solution.

File Formats

  • Code files – Intel Hex, Motorola S-record, TEK HEX, Binary, JEDEC etc.
  • Configuration files – SVF, STAPL, BIT, PDB etc.

Additional Functionality

  • In-circuit debugging capability.
  • Blank check, read, and verify functions.
  • Memory buffer editing and viewing.
  • Production environment durability and features.
  • Standalone offline operation.

Software Interface

  • Command line, menu-driven, or GUI interface.
  • Program generator wizards and production control software.
  • Library of manufacturer device specs and programming algorithms.

Warranty and Support

  • Length of warranty period.
  • Availability of remote technical assistance.
  • Device library and software updates over lifetime.

Carefully evaluating technical criteria ensures the programmer reliably meets both current and future programming requirements.

IC Programming Best Practices

Below are some guidelines to follow for smooth IC programming:

  • Use pulsed ZIF sockets or pogo pin contacts for reliable temporary connections to ICs during production programming.
  • Include test points on PCB designs upfront to enable field reprogramming of deployed systems if needed.
  • Validate programmer device libraries before use by demonstrating successful programming of sample ICs.
  • For prototype debugging, invest in desktop programmers that offer comprehensive interfaces and device support.
  • Budget for production grade gang programmers with handlers for high volume manufacturing needs.
  • Build in bootloader code on custom microcontroller designs to facilitate field firmware updates.
  • Characterize programming time budgets and optimize code sizes during development to meet production throughput targets.
  • Perform blank checks of new ICs before use to identify faulty or counterfeit devices.
  • Audit programmed device samples from production using checksums or test equipment to confirm data integrity.

Investing in the right programmer toolsets prevents issues and bottlenecks across the IC and PCB assembly workflow – from prototype validation to end product deployment.

Conclusion

IC programming is the vital step that brings programmable devices like microcontrollers, FPGAs, and memory ICs to life by loading firmware, configuration data, and software code. Using appropriate programmer hardware matched to the device interfaces and file formats streamlines initial product development along with production and field maintenance. However, programmers vary significantly in capabilities, interfaces, throughput, and software functionality. Carefully evaluating technical specifications and procuring the right category of programmer – whether desktop, production, gang, or in-system – ensures reliable and efficient IC programming across the product lifecycle.

FAQ

What are some common programmable ICs that need programming?

Common programmable ICs include microcontrollers, FPGAs, CPLDs, flash memory, EEPROMs, and various integrated circuits containing non-volatile memories or digital logic blocks.

What are the typical differences between a desktop vs production IC programmer?

Desktop programmers prioritize wide device support and interfaces for R&D while production programmers focus on speed, volume, and reliability for manufacturing. Production programmers support automated handlers.

How are microcontrollers typically programmed during PCB assembly?

Microcontrollers are normally programmed in bulk offline using gang programmers before being assembled onto boards as the programming step can be a time consuming process unsuitable for inline production.

What are the options for field programming deployed ICs?

For field firmware updates, designers can leverage in-system programming capability using JTAG or bootloader code over standard interfaces like UART, I2C, SPI. Dedicated test points provide access.

How do you ensure the programmer has full capability for an IC?

The simplest check is to acquire sample ICs and validate that the programmer can successfully read, blank check, program, and verify the device using the intended file formats. This verifies compatibility before procurement.