77 lines
2.4 KiB
Markdown
77 lines
2.4 KiB
Markdown
Helios64 automatic power-on circuitry when main power applied to the system so user does not need to press power button.
|
|
This is useful in case of loss of main power longer than UPS back up time. The system will automatically power on when main power returns.
|
|
|
|
![!Auto power-on State](/helios64/img/auto-poweron/flowchart.png)
|
|
|
|
U-Boot will enable Auto Power-On and a [systemd-shutdown](https://www.freedesktop.org/software/systemd/man/systemd-shutdown.html) hook script to disable the Auto Power-On during graceful shutdown.
|
|
|
|
|
|
By default the system needs the user to press power button to power up. This behavior can be changed by manipulating a set of GPIOs.
|
|
The circuitry uses [D Flip Flop](https://en.wikipedia.org/wiki/Flip-flop_(electronics)#D_flip-flop) and relies on RTC battery or UPS battery to keep the state.
|
|
|
|
![!Auto Power-On Schematic](/helios64/img/auto-poweron/schematic_flip_flop.png)
|
|
|
|
| State | D | Clock |
|
|
|---------|-------|-------------|
|
|
| Enable | 1 | Rising edge |
|
|
| Disable | 0 | Rising edge |
|
|
|
|
|
|
## Auto Power-On Control
|
|
|
|
*AUTO_ON_EN_D* pin and *AUTO_ON_EN_CLK* pin is assigned to gpio **153** and gpio **154** respectively.
|
|
After exporting and configure the GPIOs as output (refer to [GPIO Control](/helios64/gpio/#gpio-control)), we will do bit-banging to configure the D Flip Flop.
|
|
|
|
To enable the Auto Power-On
|
|
|
|
```
|
|
echo 1 > /sys/class/gpio/gpio153/value
|
|
echo 0 > /sys/class/gpio/gpio154/value
|
|
sleep 0.1
|
|
echo 1 > /sys/class/gpio/gpio154/value
|
|
sleep 0.1
|
|
echo 0 > /sys/class/gpio/gpio154/value
|
|
```
|
|
|
|
To disable the Auto Power-On
|
|
|
|
```
|
|
echo 0 > /sys/class/gpio/gpio153/value
|
|
echo 0 > /sys/class/gpio/gpio154/value
|
|
sleep 0.1
|
|
echo 1 > /sys/class/gpio/gpio154/value
|
|
sleep 0.1
|
|
echo 0 > /sys/class/gpio/gpio154/value
|
|
```
|
|
|
|
## Systemd-shutdown Script
|
|
|
|
We put a script to disable Auto Power-On during shutdown, located on :
|
|
|
|
`/lib/systemd/system-shutdown/disable_auto_poweron`
|
|
|
|
The script content:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
|
|
# Export GPIO
|
|
# AUTO_ON_D
|
|
echo 153 > /sys/class/gpio/export
|
|
# AUTO_EN_CLK
|
|
echo 154 > /sys/class/gpio/export
|
|
|
|
echo out > /sys/class/gpio/gpio153/direction
|
|
echo out > /sys/class/gpio/gpio154/direction
|
|
|
|
# Toggling the D Flip-Flop
|
|
echo 0 > /sys/class/gpio/gpio153/value
|
|
echo 0 > /sys/class/gpio/gpio154/value
|
|
sleep 0.1
|
|
echo 1 > /sys/class/gpio/gpio154/value
|
|
sleep 0.1
|
|
echo 0 > /sys/class/gpio/gpio154/value
|
|
```
|
|
|
|
!!! Info
|
|
Current implementation does not check whether there is loss of power event.
|