view · edit · print · history

The IXP420 CPU has 16 General Purpose Input/Output (GPIO) pins which are used to interface to external hardware. In the case of the NSLU2, the GPIO pins are used to monitor the buttons, control the LEDs, connect to the RTC and USB 2.0 controller.

GPIOIXP BallFunctionConnected to:Configured as:
GPIO[0]Y22Red Status LED (1 = On)Status LEDOutput
GPIO[1]W21Green Ready LED (1 = On)Ready LEDOutput
GPIO[2]AC26Disk 2 LED (0 = On)Disk 2 LEDOutput
GPIO[3]AA24Disk 1 LED (0 = On)Disk 1 LEDOutput
GPIO[5]Y25Power Button (Pulse when state change)Power Button via flipflopInput
GPIO[6]V21I²C SCLX1205 RTC - SCL - Pin 6Output
GPIO[7]AA26I²C SDAX1205 RTC - SDA - Pin 5Tristate
GPIO[8]W23Power Off (1 = Turn Off)R10Output
GPIO[9]V22PCI INTCuPD720101 USB (EHCI) - INTC0 - Pin 43Input
GPIO[10]Y26PCI INTBuPD720101 USB (OHCI #2) - INTB0 - Pin 88Input
GPIO[11]W25PCI INTAuPD720101 USB (OHCI #1) - INTA0 - Pin 125Input
GPIO[12]W26Reset Button (0 = Pressed)Reset ButtonInput
GPIO[13]V24PCI ResetuPD720101 USB - VBBRST0 - Pin 87Output
GPIO[14]U22PCI Clock (33MHz)uPD720101 USB - PCLK - Pin 42Output
GPIO[15]U25Expansion Bus Clock (33MHz)IXP420 - EX_CLK - Ball M32Output

GPIO(8) should actually be assigned as INTD on the PCI bus but it's been set as an output instead of tristate. It is connected to the power circuitry and is used to power down the NSLU2.

GPIO(15) is GPIO_CLK1 and is running at 33MHz. It is required to access the Flash memory on the expansion bus. After power-up the IXP420 is configured to provide a clock on this GPIO pin. If the clock output on this pin is disabled, access to the Flash is impossible.

The USB 2.0 controller can be configured to only use INTA which would free up GPIO(9) and GPIO(10). If the USB 2.0 controller tristates the INTB0 and INTC0 pins when they are disabled then we may reuse the GPIOs without cutting traces. If the USB 2.0 controller however actively pulls the pin high or low even when disabled then we must cut traces to allow reuse of the GPIOs.

A much safer and easier option to add extra IO pins is to use a I²C IO extender. Please see PinoutOfI2CPort for more details on the I²C connection.


view · edit · print · history · Last edited by rwhitby.
Based on work by Petr Jakes, ep1220, tman, quantin, and ka6sox.
Originally by tman.
Page last modified on January 01, 2008, at 05:30 PM