{{Short description|Device that installs firmware on a device}}

thumb|''Engineering Universal Programmer'' with two sockets [[Image:Programmer conitec galep5.jpg|thumb|''Pocket Programmer'' Galep-5 with a ''ZIF'' socket]] thumb|Universal Gang Programmer with 16 sockets [[File:BPM 3928 Automated Programming System.jpg|alt=BPM 3928 Automated Programming System|thumb|The [https://bpmmicro.com/3928-7-site-aps/ '''3928'''], with up to seven sites, is made for programming large data devices, such as MCUs, eMMC HS400, NAND, NOR and Serial Flash devices. High-speed signals support devices up to 200 MHz and the latest eMMC HS400 modes with data transfer rates of 2.5 nanoseconds per byte. ]]

In the context of installing firmware onto a device, a '''programmer''', '''device programmer''', '''chip programmer''', '''device burner''',<ref name="Muller 2003"/>{{rp|364}} or '''PROM writer'''<ref name="Cressler 2017"> {{cite book|last1=Cressler|first1=John D.|title=Silicon Earth: Introduction to Microelectronics and Nanotechnology, Second Edition|date=2017|publisher=CRC Press|isbn=9781351830201|url=https://books.google.com/books?id=i-5HDwAAQBAJ&q=PROM+writer&pg=SA6-PA17-IA1|language=en}} </ref> is a device that writes, a.k.a. burns, firmware to a target device's non-volatile memory.<ref name="Czerwinski 2013"> {{cite book|last1=Czerwinski|first1=Robert|last2=Kania|first2=Dariusz|title=Finite State Machine Logic Synthesis for Complex Programmable Logic Devices|date=2013|publisher=Springer Science & Business Media|isbn=9783642361661|url=https://books.google.com/books?id=SVBEAAAAQBAJ&q=programmable+devices&pg=PA3|language=en}} </ref>{{rp|3}}

Typically, the target programmable chip is one of the following types: PROM, EPROM, EEPROM, Flash memory, eMMC, MRAM, FeRAM, NVRAM, PLD, PLA, PAL, GAL, CPLD, FPGA, microcontroller.

==Connection==

[[File:Adafruit TinyISP AVR Programmer.jpg|thumb|''JTAG Connector''-based<br>''On-Board Programmer''<br>for AVR microcontroller<br>with ''USB Port interface'']]

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.<ref name="Mazidi 2017"/>{{rp|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.<ref name="Edward 2006"> {{cite book|last1=Edwards|first1=Lewin|title=So You Wanna Be an Embedded Engineer: The Guide to Embedded Engineering, From Consultancy to the Corporate Ladder|date=2006|publisher=Elsevier|isbn=9780080498157|url=https://archive.org/details/pdfy-MKFMCCNbqENoR3Ft|page=[https://archive.org/details/pdfy-MKFMCCNbqENoR3Ft/page/n66 58]|quote=plug-in adapters DIP packaging.|language=en}} </ref>{{rp|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''.<ref name="IEEE-2532"> {{cite web|title=IEEE 1532-2002 - IEEE Standard for In-System Configuration of Programmable Devices|url=https://standards.ieee.org/ieee/1532/3366/|website=IEEE}} </ref><ref name="IEEE 1532 by agilent"> {{cite web|title=What is the IEEE 1532 Standard?|url=https://www.keysight.com/main/editorial.jspx?&ckey=2052199|publisher=Keysight Technologies}} </ref><ref name="Jacobson 2012"> {{cite book|last1=Jacobson|first1=Neil G.|title=The In-System Configuration Handbook:: A Designer's Guide to ISC|date=2012|publisher=Springer Science & Business Media|isbn=9781461504894|url=https://books.google.com/books?id=H53aBwAAQBAJ&q=programmer&pg=PA135|language=en}} </ref>

==Transfer==

Data is transferred from the programmer to the device as signals via connecting pins.

Some devices have a serial interface<ref name="Ong 2001"> {{cite book|last1=Ong|first1=Royan H. L.|last2=Pont|first2=Michael J.|title=Proceedings of the ninth international symposium on Hardware/Software codesign - CODES '01 |chapter=Empirical comparison of software-based error detection and correction techniques for embedded systems |date=25 April 2001|pages=230–235|doi=10.1145/371636.371739|chapter-url=https://www.researchgate.net/publication/221656717|publisher=ACM|isbn=978-1581133646|citeseerx=10.1.1.543.9943|s2cid=15929440}}</ref>{{rp|232, pdf3}} for receiving data (including JTAG interface).<ref name="Mazidi 2017"/>{{rp|642, pdf15}} Other devices communicate on parallel pins, followed by a programming pulse with a higher voltage for programming the data into the device.<ref name="Ravichandran 2001"> {{cite book|last1=Ravichandran|first1=D.|title=Introduction To Computers And Communication|date=2001|publisher=Tata McGraw-Hill Education|isbn=9780070435650|url=https://books.google.com/books?id=EHNOHAjXdQcC&q=PROM+programmer&pg=PA125|language=en}} </ref>{{rp|125}}

Usually, a programmer is controlled via a connected personal computer through a parallel port,<ref name="Muller 2003"> {{cite book|last1=Mueller|first1=Scott|title=Upgrading and Repairing PCs|date=2003|publisher=Que Publishing|isbn=9780789727459|url=https://archive.org/details/upgradingrepairi00mue_qq3|url-access=registration|page=[https://archive.org/details/upgradingrepairi00mue_qq3/page/364 364]|quote=PROM programmer PC transfer.|language=en}} </ref>{{rp|364}} USB port,<ref name="Review TL866CS"> {{cite web|title=Review: XG autoelectric TL866CS MiniPro Universal USB Programmer|url=http://goughlui.com/2016/04/22/review-xg-autoelectric-tl866cs-minipro-universal-usb-programmer/|website=Gough's Tech Zone|date=22 April 2016}} </ref> or LAN interface.{{cn|date=September 2024}} A program on the controlling computer interacts with the programmer to perform operations such as configure install parameters and program the device,<ref name="Muller 2003"/>{{rp|364}} <ref name="IVF 1995"> {{cite book|author1=International Validation Forum|title=Validation Compliance Annual: 1995|date=1995|publisher=CRC Press|isbn=9780824794590|url=https://books.google.com/books?id=a55oaroHFI8C&q=PROM+programmer+transferring&pg=PA430|language=en}} </ref>{{rp|430}} <ref name="YouTube-HowTo"> {{cite web|title=How to Read, Erase, & Write EProm EEProm Chips Electronic Fuel injection DIY Tuning GQ-4X Programmer| website=YouTube |url=https://www.youtube.com/watch?v=vUDP1XTmF9A|date=2 May 2014}} </ref><ref name="Minimum need to know">{{cite web|title=EPROMS: The minimum you need to know to burn your own|url=https://www.classic-computers.org.nz/blog/2012-10-21-eproms.htm|website=www.classic-computers.org.nz}}</ref>

==Types==

thumb|A ''Gang Programmer'' with ''a Set of 4 Sockets''. There are four general types of programmers:

# '''Automated programmers''' often have multiple programming sites/sockets<ref name="gang by Oxford Dict">{{cite web|title=gang {{!}} Definition of gang in English by Oxford Dictionaries|url=https://en.oxforddictionaries.com/definition/gang|archive-url=https://web.archive.org/web/20180317102217/https://en.oxforddictionaries.com/definition/gang|url-status=dead|archive-date=March 17, 2018|website=Oxford Dictionaries {{!}} English}} </ref> for mass production.<ref name="Mazidi 2017">{{cite book|last1=Mazidi|first1=Muhammad Ali|last2=Naimi|first2=Sarmad|last3=Naimi|first3=Sepehr|title=The AVR microcontroller and embedded systems : using Assembly and C|date=2011|publisher=Prentice Hall|location=Upper Saddle River, N.J.|isbn=9780138003319|url=http://www.microdigitaled.com/AVR/Articles/AVR_v1_online.pdf|access-date=2018-03-16|archive-date=2020-02-15|archive-url=https://web.archive.org/web/20200215060436/http://www.microdigitaled.com/AVR/Articles/AVR_v1_online.pdf|url-status=dead}}</ref> 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.<ref name="MiniPro TL866 Universal Programmer Review"> {{cite web|title=EEVblog #411 - MiniPro TL866 Universal Programmer Review - Page 1|url=https://www.eevblog.com/forum/blog/eevblog-411-minipro-tl866-universal-programmer-review/|website=www.eevblog.com}} </ref> # '''Pocket programmers''' for development and field service.<ref name="MiniPro TL866 Universal Programmer Review" /><ref name="Google Search Field-service"> {{cite web|title=EPROM programmer for field service - Google Search|url=https://www.google.com/search?q=EPROM+programmer+for+field+service|website=www.google.com|language=en}} </ref> # '''Specialized programmers''' for certain circuit types only, such as FPGA,<ref name="FPGA Programmer">{{cite book|last1=Pang|first1=Aiken|last2=Membrey|first2=Peter|title=Beginning FPGA: Programming Metal: Your brain on hardware|date=2016|publisher=Apress|isbn=9781430262480|url=https://books.google.com/books?id=X4fJDQAAQBAJ&q=programmer&pg=PA305|language=en}} </ref> microcontroller,<ref name="Mazidi 2017" />{{rp|642, pdf15}} and EEPROM programmers.<ref name="YouTube-HowTo" />

==History== thumb|Historical Programmer;<br>A shoebox size [[File:78K0R Cool-It.jpg|thumb|''Pocket-sized'' & ''USB Port interfaced'' "ICE for MCU" &<br>''Flash memory Programmer'']] 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{{endash}}25 Volts.<ref name="Godse 2008">{{cite book|last1=Godse|first1=Atul P.|last2=Godse|first2=Deepali A.|title=Digital Techniques|date=2008|publisher=Technical Publications|isbn=9788184314014|url=https://books.google.com/books?id=F6Vor58f9FYC&q=PROM+programmer+25V&pg=PA651|language=en}} </ref>{{rp|651}}<ref name="Ball 2002"> {{cite book|last1=Ball|first1=Stuart|title=Embedded Microprocessor Systems: Real World Design|date=2002|publisher=Elsevier|isbn=9780080477572|url=https://books.google.com/books?id=6738mXhY4igC&q=PROM+programmer+12V&pg=PA40|language=en}} </ref>{{rp|40}} But according to the progress of memory device technology, recent flash memory programmers do not need high voltages.<ref name="Choi 2009"> {{cite journal|last1=Choi|first1=S. J.|last2=Han|first2=J. W.|last3=Jang|first3=M. G.|last4=Kim|first4=J. S.|last5=Kim|first5=K. H.|last6=Lee|first6=G. S.|last7=Oh|first7=J. S.|last8=Song|first8=M. H.|last9=Park|first9=Y. C.|last10=Kim|first10=J. W.|last11=Choi|first11=Y. K.|title=High Injection Efficiency and Low-Voltage Programming in a Dopant-Segregated Schottky Barrier (DSSB) FinFET SONOS for nor-type Flash Memory|journal=IEEE Electron Device Letters|date=2009|volume=30|issue=3|pages=265–268|doi=10.1109/LED.2008.2010720|bibcode=2009IEDL...30..265C |issn=0741-3106}} </ref><ref name="EETIMES 2002"> {{cite web|title=Remembering the PROM knights of Intel {{!}} EE Times|url=https://www.eetimes.com/document.asp?doc_id=1144961|website=EETimes|date=2002-07-03}} </ref>

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.<ref name="DuCastel 2008"> {{cite book|last1=DuCastel|first1=Bertrand|last2=Jurgensen|first2=Timothy|title=Computer Theology: Intelligent Design of the World Wide Web|date=2008|publisher=Midori Press LLC|isbn=9780980182118|url=https://books.google.com/books?id=zLh5CIwvTyMC&q=bootstrap+mechanical+switch&pg=PA262|language=en}} </ref>{{rp|261{{endash}}262}}<ref name="PDP8"> {{cite web|title=Getting Started with Blinking Lights on Old Iron|url=https://hackaday.com/2017/08/10/getting-started-with-blinking-lights-on-old-iron/|website=Hackaday|date=10 August 2017}} </ref><ref name="Nova3"> {{cite web|last1=Gooijen|first1=Henk|title=NOVA 3 console description|url=http://www.pdp-11.nl/dg/nova3/nova3.html#system%20console|website=www.pdp-11.nl}} </ref> Nowadays, EEPROMs are used for bootstrapping mechanism as BIOS, without the need to operate mechanical switches for programming.<ref name="Goel 2010"> {{cite book|last1=Goel|first1=Anita|title=Computer Fundamentals|date=2010|publisher=Pearson Education India|isbn=9788131733097|url=https://books.google.com/books?id=zyOYs2EqZDgC&q=BIOS+bootstrap+EEPROM&pg=PA45|language=en}} </ref>{{rp|45}}

==Manufacturers== For each vendor's web site, refer to "External links" section. * Batronix GmbH &amp; 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. * {{ill|Minato Holdings|ja|ミナトホールディングス}} * Phyton, Inc. * Xeltek Inc.

==See also== *Off-line programming *In-system programming *Debug port *JTAG interface *Common Flash Memory Interface *Open NAND Flash Interface Working Group *Atmel AVR#Programming interfaces *PIC microcontroller#Device programmers *Intel HEX – ASCII file format *SREC – ASCII file format *ELF – Binary file format *COFF – Binary file format *Hardware description language

==References== {{reflist}}

==External links== *Technical information **[https://www.jedec.org/category/technology-focus-area/memory-configurations-jesd21-c JEDEC - Memory Configurations: JESD21-C] **[https://www.jedec.org/standards-documents/docs/jesd-6801/ JEDEC - Common Flash Interface (CFI) Specification, JESD68.01, September 2003.] **[http://www.delorie.com/agenda/specs/29220404.pdf Intel - Common Flash Interface (CFI) and Command Sets] **[https://standards.ieee.org/ieee/1532/3366/ IEEE Std 1532-2002 (Revision of IEEE Std 1532-2001) - IEEE Standard for In-System Configuration of Programmable Devices] **[https://www.keysight.com/main/editorial.jspx?&ckey=2052199 What is the IEEE 1532 Standard? {{!}} Keysight Technologies] **[https://www.jedec.org/document_search/field_keywords/logic-device-programmer-2848 JEDEC - STANDARD DATA TRANSFER FORMAT BETWEEN DATA PREPARATION SYSTEM AND PROGRAMMABLE LOGIC DEVICE PROGRAMMER: JESD3-C, Jun 1994] **[https://www.jedec.org/committees/jc-42 JEDEC - JC-42 Solid State Memories]

*Manufacturers **[https://www.batronix.com/menu/programming_technologies.html Batronix GmbH & Co. KG] **[https://bpmmicro.com/programmers/ BPM Microsystems] **[http://www.conitec.com/ Conitec Datasystems Inc.] **[http://www.dataio.com/ Data I/O Corporation] **[https://www.elnec.com/en/ Elnec s.r.o.] **[https://www.diagprog4.com/ Elprosys Sp. z o.o.] **[https://www.dediprog.com/ Dediprog] **[https://www.halec.de/en/products/roloflash/ halec] **[http://www.hilosystems.com/ Hi-Lo System Research Co. Ltd.] **[https://www.mcumall.com/ MCUmall Electronics Inc.] **[https://www.minato.co.jp/en/ Minato Holdings Inc.] **[https://phyton.com/ Phyton, Inc.] **[https://www.xeltek.com/ Xeltek Inc.]

{{Commons category|Device programmers}}

{{DEFAULTSORT:Programmer (Hardware)}} Category:Computer engineering Category:Integrated circuits Category:Non-volatile memory Category:Gate arrays