27

I've seen some pins like microcontroller's GPIO pins on the desktop computer motherboards for a couple of times, I wanted to know, first, are they really GPIOs? if yes, is it possible to read from or write to them?

13
  • 2
    They are whatever the datasheet for the motherboard says they are. Other than that, this question is just asking for speculation.
    – Olin Lathrop
    Commented Oct 29, 2015 at 16:49
  • 2
    @OlinLathrop okay if they are, how can I communicate with them? do operating systems have a built-in API for this purpose something? or are there any API for programming languages?
    – Mohsen
    Commented Oct 29, 2015 at 16:52
  • 3
    "pins like microcontroller's GPIO pins" How are they "like"? All pins look the same..
    – Eugene Sh.
    Commented Oct 29, 2015 at 16:52
  • 2
    x86 CPU's will in general not have GPIO pins, with every pin being directed to a specific on-die peripheral without PIO multiplexing that is common on MCU's. HOWEVER, GPIO like functionality is often part of the architecture and handled by (typically memory mapped) peripheral on the motherboard, the chipset will often have some low-level buses (SPI and I2C for sensors) as well as GPIO's available, the exact nature depends on the motherboard and chipset/architecture used.
    – crasic
    Commented Oct 29, 2015 at 16:57
  • 1
    The linux package "lm-sensors" lets you read the devices on the I2C bus; this will usually be a set of temperature sensors, fan controllers, and identification EPROMS on you DRAM.
    – pjc50
    Commented Oct 29, 2015 at 17:08

4 Answers 4

17

Normal PCs don't have GPIO as such in the sense of "pins intended to be general purpose". The connectors on a PC motherboard (whether internal headers or external ports) were all designed for specific functions. However, some of them can be repurposed for your own ends.

The closest thing to GPIO that PCs have is probably the parallel printer port which has a number of data lines and handshake lines. These lines are somewhat like GPIO pins, though you have less flexibility in terms of their directions. http://retired.beyondlogic.org/spp/parallel.htm

The handshake lines on serial ports can also be used as general IO, though they have weird voltage levels.

Parallel and serial ports are less common than they used to be, but it's still pretty easy to find motherboards that have them if you shop around.

You may also be able to repurpose inputs and outputs intended for case LEDs, buttons etc, but I would imagine the details will be very specific to a particular system.

PCs use an I2C based bus called SMBUS for various management functions. I'm sure I've seen reports of people putting their own I2C devices on this bus through soldering wires to it before, but I can't find links right now.

There's another I2C bus on the video ports used for monitor identification. Whether you can get software access to it depends on what OS and video hardware you are using http://www.instructables.com/id/Worlds-Cheapest-I2C-I-Squared-C-Adapter/step5/Software-and-Projects/

And of course, there is USB. There are now cheap microcontrollers with USB interfaces which you can use to connect to this.

1
  • 1
    RAM chips have I2C on them as well - google for it - there's a great video of someone soldering stuff to that bus.
    – cnd
    Commented May 29, 2020 at 16:05
6

I know this is an older topic, but anyway...

Having programmed BIOS code, I can say that every motherboard has GPIO's and they are completely available in the user address space and the port address is usually very close to the parallel port. I've made custom drivers for custom motherboards using standard parallel port drivers, all I had to do was modify the address number, but I knew that number in advance.

Can you use them? Well that depends on the person that programmed the BIOS. The state of all GPIO's has to be set pre-compile, all unused GPIO's could be easily set to be disabled.

If a GPIO is unused and unset, what is its default state? Quite likely just floating (most are tri-state so good luck)..

Does a GPIO have a pullup/pulldown? Who knows if the EE added one..

Are there traces for any of the unused GPIO's? I doubt it, but hey anything is possible..

In short, you have to get lucky that an unused GPIO has been set in a manner that you can use it; much like arduino (but without real defaults), think "INPUT/OUTPUT/TRI". It has to have a usable trace on the motherboard that hopefully has a pin or pad to solder to. Then if you know the address location of the GPIO you can use a standard user space driver easily.

2

I think the question if motherboards have GPIO is very specific to the model and make. Some may, some don't.

E.g. on my Asus desktop board it contains a Nuvoton NCT6775 for fan control and temperature read out. This is accessible from the (vendors custom) BIOS and Windows desktop utilities. I need to run Asus' software in order for the fan control to work, which means the PWM fan control is done by software. On a Linux installation I need to set up it manually via this kernel module and pwmconfig.

If you look at the Nuvoton NCT677xF datasheet you will find generic hardware for controlling PWM, reading temperature & voltages and also GPIO via SMBus. Equipped with both gives you a decent start to make it work. In theory you could use this chipset for GPIO functions.

However I wouldn't touch it. You don't know what hardware is connected to it, unless you want to dive into a very specific model of motherboard and reverse engineer it (e.g. layout, pin allocations etc.). It is not broken out to a connector neither.

Most importantly, if your application needs to last for several years, the motherboard model should as well. If not, tying to very specific motherboard hardware is not a good idea.

0

PCs generally have i2c interfaces, and you can find IO expander chips for i2c like the TI TCA9535DBR.

So indirectly you could do this depending on your speed requirements. If you're on a PC then exact timing requirements are tricky anyway.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .