## 4.2 Programmer Definitions

The format of the programmer definition is as follows:

    programmer
        parent <id>                                 # <id> is a quoted string
        id       = <id1> [, <id2> [, <id3>] ...] ;  # <idN> are quoted strings
        desc     = <description> ;                  # quoted string
        type     = "par" | "stk500" | ... ;         # programmer type (see below for a list)
        baudrate = <num> ;                          # baudrate for serial ports
        vcc      = <num1> [, <num2> ... ] ;         # pin number(s)
        buff     = <num1> [, <num2> ... ] ;         # pin number(s)
        reset    = <num> ;                          # pin number
        sck      = <num> ;                          # pin number
        mosi     = <num> ;                          # pin number
        miso     = <num> ;                          # pin number
        errled   = <num> ;                          # pin number
        rdyled   = <num> ;                          # pin number
        pgmled   = <num> ;                          # pin number
        vfyled   = <num> ;                          # pin number
        usbvid   = <hexnum>;                        # USB VID (Vendor ID)
        usbpid   = <hexnum> [, <hexnum> ...];       # USB PID (Product ID)
        usbdev   = <interface>;                     # USB interface or other device info
        usbvendor = <vendorname>;                   # USB Vendor Name
        usbproduct = <productname>;                 # USB Product Name
        usbsn    = <serialno>;                      # USB Serial Number
      ;

If a parent is specified, all settings of it (except its ids) are used for the new programmer. These values can be changed by new setting them for the new programmer.

To invert a bit in the pin definitions, use `= ~ <num>`.

Not all programmer types can handle a list of USB PIDs.

Following programmer types are currently implemented:

`arduino` | Arduino programmer
`avr910` | Serial programmers using protocol described in application note AVR910
`avrftdi` | Interface to the MPSSE Engine of FTDI Chips using libftdi.
`buspirate` | Using the Bus Pirate’s SPI interface for programming
`buspirate_bb` | Using the Bus Pirate’s bitbang interface for programming
`butterfly` | Atmel Butterfly evaluation board; Atmel AppNotes AVR109, AVR911
`butterfly_mk` | Mikrokopter.de Butterfly
`dragon_dw` | Atmel AVR Dragon in debugWire mode
`dragon_hvsp` | Atmel AVR Dragon in HVSP mode
`dragon_isp` | Atmel AVR Dragon in ISP mode
`dragon_jtag` | Atmel AVR Dragon in JTAG mode
`dragon_pdi` | Atmel AVR Dragon in PDI mode
`dragon_pp` | Atmel AVR Dragon in PP mode
`flip1` | FLIP USB DFU protocol version 1 (doc7618)
`flip2` | FLIP USB DFU protocol version 2 (AVR4023)
`ftdi_syncbb` | FT245R/FT232R Synchronous BitBangMode Programmer
`jtagmki` | Atmel JTAG ICE mkI
`jtagmkii` | Atmel JTAG ICE mkII
`jtagmkii_avr32` | Atmel JTAG ICE mkII in AVR32 mode
`jtagmkii_dw` | Atmel JTAG ICE mkII in debugWire mode
`jtagmkii_isp` | Atmel JTAG ICE mkII in ISP mode
`jtagmkii_pdi` | Atmel JTAG ICE mkII in PDI mode
`jtagice3` | Atmel JTAGICE3
`jtagice3_pdi` | Atmel JTAGICE3 in PDI mode
`jtagice3_updi` | Atmel JTAGICE3 in UPDI mode
`jtagice3_dw` | Atmel JTAGICE3 in debugWire mode
`jtagice3_isp` | Atmel JTAGICE3 in ISP mode
`linuxgpio` | GPIO bitbanging using the Linux sysfs interface (not available)
`linuxspi` | SPI using Linux spidev driver (not available)
`par` | Parallel port bitbanging
`pickit2` | Microchip’s PICkit2 Programmer
`serbb` | Serial port bitbanging
`stk500` | Atmel STK500 Version 1.x firmware
`stk500generic` | Atmel STK500, autodetect firmware version
`stk500v2` | Atmel STK500 Version 2.x firmware
`stk500hvsp` | Atmel STK500 V2 in high-voltage serial programming mode
`stk500pp` | Atmel STK500 V2 in parallel programming mode
`stk600` | Atmel STK600
`stk600hvsp` | Atmel STK600 in high-voltage serial programming mode
`stk600pp` | Atmel STK600 in parallel programming mode
`usbasp` | USBasp programmer, see http://www.fischl.de/usbasp/
`usbtiny` | Driver for "usbtiny"-type programmers
`wiring` | http://wiring.org.co/, Basically STK500v2 protocol, with some glue to trigger the bootloader.
`xbee` | XBee Series 2 Over-The-Air (XBeeBoot)