# Programmer (hardware)

In the context of installing firmware onto a device, a programmer, device programmer, chip programmer, device burner,$^{:364}$ or PROM writer is a device that writes, a.k.a. burns, firmware to a target device's non-volatile memory.$^{:3}$
Typically, the target device memory is one of the following types: PROM, EPROM, EEPROM, Flash memory, eMMC, MRAM, FeRAM, NVRAM, PLD, PLA, PAL, GAL, CPLD, FPGA.

## Connection

Generally, a programmer connects to a device in one of two ways.

### Insertion

In some cases, the target device is inserted into a socket (usually ZIF) on the programmer.$^{:642,pdf15}$ If the device is not a standard DIP packaging, a plug-in adapter board, which converts the footprint with another socket, is used.$^{:58}$

### Cable & port

In some cases, a programmer connects to a device via a cable to a connection port on the device. This is sometimes called on-board programming, in-circuit programming, or in-system programming.

## Transfer

Data is transferred from the programmer to the device as signals via connecting pins.
Some devices have a serial interface$^{:232,pdf3}$ for receiving data (including JTAG interface).$^{:642,pdf15}$ Other devices communicate on parallel pins, followed by a programming pulse with a higher voltage for programming the data into the device.$^{:125}$
Usually, a programmer is controlled via a connected personal computer through a parallel port,$^{:364}$ USB port, or LAN interface. A program on the controlling computer interacts with the programmer to perform operations such as configure install parameters and program the device,$^{:364}$ $^{:430}$

## Types

There are four general types of programmers:
* Automated programmers often have multiple programming sites/sockets for mass production. Sometimes used with robotic pick and place handlers with on-board sites to support high volume and complex output such as laser marking, 3D inspection, tape input/output, etc.
* Development programmers usually have a single programming site; used for first article development and small-series production.
* Pocket programmers for development and field service.
* Specialized programmers for certain circuit types only, such as FPGA, microcontroller,$^{:642,pdf15}$ and EEPROM programmers.

## History

Regarding old PROM programmers, as the many programmable devices have different voltage requirements, every pin driver must be able to apply different voltages in a range of 0–25 Volts.$^{:651}$$^{:40}$ But according to the progress of memory device technology, recent flash memory programmers do not need high voltages.
In the early days of computing, booting mechanism was a mechanical devices usually consisted of switches and LEDs. It means the programmer was not an equipment but a human, who entered machine codes one by one, by setting the switches in a series of "on" and "off" positions. These positions of switches corresponded to the machine codes, similar to today's assembly language.$^{:261–262}$ Nowadays, EEPROMs are used for bootstrapping mechanism as BIOS, and no need to operate mechanical switches for programming.$^{:45}$

## Manufacturers

For each vendor's web site, refer to "External links" section.
* Batronix GmbH & Co. KG
* BPM Microsystems
* Conitec Datasystems
* Data I/O Corporation
* DediProg Technology Co., Ltd
* Elnec s.r.o
* Elprosys Sp. z o.o.
* halec
* Hi-Lo System Research
* MCUmall Electronics Inc.
* Minato Holdings [ja]
* Phyton, Inc.
* Xeltek Inc.