Tips-n-Tricks – Arduino ICSP Header

Arduino ICSP Header

Most Arduino boards have a six pin header identified on the board as “ICSP”. This 6-pin header provides as SPI interface that is used by a number of plug on shields. Even the Arduino Nano has an ICSP interface. But its real intent is to be able to program the AVR chip directly using a cable and boot loader software.

I will provide a brief overview as I intend on using the header in my own projects but this rather extensive web page explains how to drive the header ->

arduino icsp header pinout

The pins on the header match the pins directly on the Atmega328 pin out diagram below:

arduino atmel atmega328 pinout

Pins 17, 18 and 19 are the ones you’re looking for, these translate to digital pins 11, 12 and 13 on the Arduino (plus one for Reset, one for power & finally one for ground).

Note that, if you want to support programming while “in circuit”, you probably don’t want to actually use digital pins 11, 12 and 13 for anything, which does limit the useability of the whole device, the data book does warn about “low impedance” loads on those pins as far as I can remember.

Driving these pins depend on the capabilities of your programmer (which may not be able to put out even the 40 mA per pin that the Arduino can). And the last thing you want is a programmer pulsing a pin that causes an output device connected to the pin to fire off. Using the pins as inputs would be a safe design decision.

On devices with multiple SPI interfaces, check which interface is being used. Usually the first SPI defaults to ICP usage.




Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s