At our university, we bought a PC that was intended for testing during development of low-level components in operating systems (drivers, kernels, etc.). In such tests it is common that the machine gets stuck because of various bugs and it is necessary to perform hard reset to recover from such situations. To our surprise the machine we ordered had neither a reset button on the case nor any connector on the motherboard where the button could be connected. It was a Dell machine.

Moreover, we want to share this PC between multiple people and be able to run some tests automatically. Therefore we wanted to use a remotely controllable relay and serial port to reset the box remotely. I thought that we were lost without the reset button until a colleague of mine brought my attention to PWR_OK signal of ATX motherboards. Using this signal, it is possible to initiate the reset of the motherboard, but things were not so simple as they initially seemed to be.

Power supply uses PWR_OK signal to inform the motherboard that the voltage it generates is stable. When the signal goes low, the motherboard should go to the reset state and remain there until PWR_OK goes up again. So the plan was simple. Use the relay to control the PWR_OK signal and it allows us to reset the motherboard. The problem with this approach was that the motherboard was reset but it also caused the power supply to switch off for about one second and we wanted to avoid frequent switching off and on. The reason for this switching off was that upon detecting low level on PWR_OK, the motherboard responds with deasserting PS_ON signal which causes the power supply to switch off. Therefore, to reset only the motherboard, we had to keep the PS_ON asserted, while playing with PWR_ON. Finally, we ended up with this schematics:

schema.png

You can see that the PS_ON signal is always tied to ground. This makes the power supply always switched on. We can afford this because we use RELAY1 to switch on/off the computer. The second relay controls PWR_OK signal. In the default position, PWR_OK signal connects the power qsupply with the motherboard as it normally do. When the relay switches, PWR_OK on motherboard side is tied to GND and motherboard gets reset.

The final solution now looks like this:

iprelay.jpg

After doing all of this, I’ve found that you can buy a simple adapter, which allows you to do the same without cutting the wires of the power supply.