A simple bidirectional analog switch (MAX4525) facilitates in-circuit programming by providing dual service for two lines (SDA and SCL) on the programmable device: for normal operation they connect to other circuitry, and for programming mode they connect to the programming header.
A similar version of this article appeared in the October 21, 2008 issue of Electronic Design magazine.
Many devices now available require programming through a serial bus such as I²C. This programming can be done during final test, after the circuit board has been assembled. In many cases the pins used for programming are used for something else during normal operation, and the bus itself can also be used for another function during normal operation.
A simple analog multiplexer circuit facilitates the in-circuit programming (Figure 1). The multiplexer shown is a bidirectional analog switch (MAX4525). During normal operation, its input is pulled to ground by R1, causing the serial lines to connect to the rest of the circuit. During programming mode, the programming header asserts a logic high on the pin connected to the multiplexer input, causing the mux to switch over to the pins on the programming header.
An I²C bus is present in the figure, so pullup resistors are provided for other circuitry on the board. The device programmer that connects to the programming header must have its own pullup resistors. The series resistance added by the multiplexer should be accounted for by other circuitry on the board. To avoid forward-biasing the ESD diodes, the serial data lines should not go below ground or above the VCC voltage of the MAX4525.