Configuring your pi-top [4]'s use of GPIO pins

Here's how to free up all the SPI buses on the pi-top [4]

Sometimes, you may wish to work with peripherals (such as HATs) or content that is specifically designed to work with particular GPIO pins. The pi-top [4] uses I2C for communication with the hub, with a fixed I2C address of 0x11. Anything that requires this address is unfortunately incompatible.

I2C uses GPIO pins 2 and 3. GPIO 2 is the Data pin and GPIO 3 is the Clock pin


However, pi-top [4] also uses SPI1 by default for its onboard Mini OLED Screen. The good news is that the pi-top [4] is also capable of using SPI0 to do this instead. This is useful for when the GPIO pins that are used by SPI1 are desired for something else - for example, a HAT that uses SPI1 or any of its pins (regardless of its intended use).

SP1 uses GPIO pins 16, 17, 18, 19, 20, and 21

SPI0 uses GPIO pins 7, 8 9, 10, and 11

To set the SPI bus of the OLED, run the appropriate command:

pi-top oled spi 0          #Forces the OS to switch the SPI bus to Port 0
pi-top oled spi 1 #Forces the OS to switch the SPI bus to Port 1

It is also possible to disable both SPI buses for the OLED, freeing up all of the pins:

pi-top oled spi off        #The will disable the Mini Oled Screen Completely

Remember that the OLED will only work on pi-top OS or on Raspberry Pi OS with the pi-top packages installed. If you have neither of these then the OLED won't function

pinout.xyz is a great place to learn the additional functions of the GPIO pins on the Raspberry Pi. Have a look at their site for more information

The Mini OLED Screen is fed by a multiplexer controlled by the Hub. The multiplexer is connected to SPI1, SPI0 and to the hub. The hub then selects which bus is connected to the Mini OLED Screen at any time.