Merge branch 'update'
79
docs/helios64/auto_poweron.md
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
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 return.
|
||||||
|
|
||||||
|
![!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 need the user to press power button to power up. This behaviour 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 rely 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 under Linux
|
||||||
|
|
||||||
|
*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.
|
||||||
|
|
||||||
|
|
|
@ -28,3 +28,83 @@ Helios64 provides 16 GPIOs via a 20-Pin header (P5). Those GPIOs are provided vi
|
||||||
| 18 | EXP_P1_6 | |
|
| 18 | EXP_P1_6 | |
|
||||||
| 19 | EXP_P1_7 | |
|
| 19 | EXP_P1_7 | |
|
||||||
| 20 | - | GND |
|
| 20 | - | GND |
|
||||||
|
|
||||||
|
## Accessing GPIOs under Linux
|
||||||
|
|
||||||
|
If the kernel supports debugfs (*CONFIG_DEBUG_FS=y*), list of GPIOs can be retrieved with the following command
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo cat /sys/kernel/debug/gpio
|
||||||
|
```
|
||||||
|
|
||||||
|
Look for the **gpiochip5: GPIOs XXX-YYY** section, whereas **XXX** is first GPIO number and **YYY** is last GPIO number of IO expander.
|
||||||
|
|
||||||
|
```
|
||||||
|
gpiochip5: GPIOs 496-511, parent: i2c/2-0020, 2-0020, can sleep:
|
||||||
|
```
|
||||||
|
|
||||||
|
Another way to get first GPIO number of the IO expander
|
||||||
|
|
||||||
|
```
|
||||||
|
cat /sys/bus/i2c/devices/2-0020/gpio/gpiochip*/base
|
||||||
|
```
|
||||||
|
|
||||||
|
Therefore the mapping between header P5 Pins and Sysfs GPIO numbers will be as described in the following table
|
||||||
|
|
||||||
|
### GPIO Table
|
||||||
|
|
||||||
|
| PIN | Sysfs GPIO number | Remarks |
|
||||||
|
|-----|------|-------------|
|
||||||
|
| 1 | - | 3.3V Supply |
|
||||||
|
| 2 | - | 5V Supply |
|
||||||
|
| 3 | - | GND |
|
||||||
|
| 4 | 496 | |
|
||||||
|
| 5 | 497 | |
|
||||||
|
| 6 | 498 | |
|
||||||
|
| 7 | 499 | |
|
||||||
|
| 8 | 500 | |
|
||||||
|
| 9 | 501 | |
|
||||||
|
| 10 | 502 | |
|
||||||
|
| 11 | 503 | |
|
||||||
|
| 12 | 504 | |
|
||||||
|
| 13 | 505 | |
|
||||||
|
| 14 | 506 | |
|
||||||
|
| 15 | 507 | |
|
||||||
|
| 16 | 508 | |
|
||||||
|
| 17 | 509 | |
|
||||||
|
| 18 | 510 | |
|
||||||
|
| 19 | 511 | |
|
||||||
|
| 20 | - | GND |
|
||||||
|
|
||||||
|
### GPIO Control
|
||||||
|
|
||||||
|
**1.** Export the GPIO number you want to use
|
||||||
|
|
||||||
|
```
|
||||||
|
echo N | sudo tee -a /sys/class/gpio/export
|
||||||
|
```
|
||||||
|
|
||||||
|
**2.** Set the direction, "out" for Output or "in" for Input
|
||||||
|
|
||||||
|
```
|
||||||
|
echo DIRECTION | sudo tee -a /sys/class/gpio/gpioN/direction
|
||||||
|
```
|
||||||
|
|
||||||
|
**3.** Now you can read or change the GPIO value
|
||||||
|
|
||||||
|
To read GPIO value
|
||||||
|
|
||||||
|
```
|
||||||
|
cat /sys/class/gpio/gpioN/value
|
||||||
|
```
|
||||||
|
|
||||||
|
To change GPIO value (only if GPIO set as Output)
|
||||||
|
|
||||||
|
```
|
||||||
|
echo VALUE | sudo tee -a /sys/class/gpio/gpioN/value
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! notes
|
||||||
|
Pay attention to the path, /sys/class/gpio/gpio**N**/ where **N** is the GPIO number.
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
docs/helios64/img/auto-poweron/flowchart.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
docs/helios64/img/auto-poweron/schematic_flip_flop.png
Normal file
After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 85 KiB |
BIN
docs/helios64/img/pwm/fan_duty_cycle_formula.png
Executable file
After Width: | Height: | Size: 1.3 KiB |
BIN
docs/helios64/img/pwm/fan_speed_graph_stock_fan.png
Executable file
After Width: | Height: | Size: 13 KiB |
BIN
docs/helios64/img/pwm/fan_speed_graph_stock_fan_linux.png
Executable file
After Width: | Height: | Size: 12 KiB |
BIN
docs/helios64/img/pwm/fan_stock_photo.jpg
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
docs/helios64/img/ups/battery_level_schematic.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_lsusb_tree.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_lsusb_tree_raid.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_thunar_5_drive.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_thunar_raid.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_usbview.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_usbview_raid.png
Normal file
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 132 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_windows_device_manager_raid.png
Executable file
After Width: | Height: | Size: 117 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_windows_diskmgmt.png
Executable file
After Width: | Height: | Size: 129 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_windows_diskmgmt_raid.png
Executable file
After Width: | Height: | Size: 150 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_windows_usbtreeview.png
Executable file
After Width: | Height: | Size: 304 KiB |
BIN
docs/helios64/img/usb/linux_gadget_das_windows_usbtreeview_raid.png
Executable file
After Width: | Height: | Size: 319 KiB |
|
@ -35,7 +35,7 @@ The term *duty cycle* describes the proportion of 'on' time to the regular inter
|
||||||
|
|
||||||
## PWM Fan Connector
|
## PWM Fan Connector
|
||||||
|
|
||||||
![Fan Connector](/helios4/img/pwm/fan_connector.png)
|
![Fan Connector](/helios64/img/pwm/fan_connector.png)
|
||||||
|
|
||||||
Connector Pinout
|
Connector Pinout
|
||||||
|
|
||||||
|
@ -45,3 +45,162 @@ Connector Pinout
|
||||||
| 2 | 12V | Red |
|
| 2 | 12V | Red |
|
||||||
| 3 | Sense | Yellow |
|
| 3 | Sense | Yellow |
|
||||||
| 4 | Control | Blue |
|
| 4 | Control | Blue |
|
||||||
|
|
||||||
|
|
||||||
|
## Stock Fan
|
||||||
|
|
||||||
|
![!Type-C Fan](/helios64/img/pwm/fan_stock_photo.jpg)
|
||||||
|
|
||||||
|
Fan Specification
|
||||||
|
|
||||||
|
| Parameter | Value | Unit | Remarks |
|
||||||
|
|---------------|----------|------|---------|
|
||||||
|
| Maximum Speed | 3600 | RPM | @ duty cycle 98% |
|
||||||
|
| Minimum Speed | 350 | RPM | @ duty cycle 10% |
|
||||||
|
| Shut off | Yes | | duty cycle < 6.5% and restart @ duty cycle > 9.5% |
|
||||||
|
| Implementation Type | C | | |
|
||||||
|
|
||||||
|
![!Type-C Speed Graph](/helios64/img/pwm/fan_speed_graph_stock_fan.png)
|
||||||
|
|
||||||
|
!!! info
|
||||||
|
Duty cycle data is converted from Linux PWM
|
||||||
|
|
||||||
|
## Helios64 Temperature Sensors
|
||||||
|
|
||||||
|
### SoC Temperature Sensor
|
||||||
|
|
||||||
|
RK3399 has internal temperature sensor (TS-ADC) for monitoring die temperature. The system has two Temperature Sensors, channel 0 is for CPU, channel 1 is for GPU.
|
||||||
|
|
||||||
|
The sensor has -40~125°C temperature range and 5°C temperature resolution.
|
||||||
|
|
||||||
|
### Board Temp Sensor
|
||||||
|
|
||||||
|
Helios64 has a **Digital Temperature Sensor with 2‐wire Interface** ([NCT75 Datasheet](https://www.onsemi.com/pub/Collateral/NCT75-D.PDF)), located on top side of the board near RTC battery. It is used to read ambient temperature.
|
||||||
|
|
||||||
|
## PWM Fan Control under Linux
|
||||||
|
|
||||||
|
Linux use 8-bit integer to represent duty cycle. PWM value 0 represent 0% duty cycle and PWM value 255 represent 100% duty cycle.
|
||||||
|
|
||||||
|
![Duty Cycle Formula](/helios64/img/pwm/fan_duty_cycle_formula.png)
|
||||||
|
|
||||||
|
Below graphs are stock fan speed vs pwm value instead of duty cycle.
|
||||||
|
|
||||||
|
![!Stock Fan Speed Graph](/helios64/img/pwm/fan_speed_graph_stock_fan_linux.png)
|
||||||
|
|
||||||
|
### Using SYSFS interface
|
||||||
|
|
||||||
|
Linux export the fan control mechanism to SYSFS under hwmon class.
|
||||||
|
List of devices can be checked under /sys/class/hwmon
|
||||||
|
|
||||||
|
```
|
||||||
|
ls -l /sys/class/hwmon/
|
||||||
|
total 0
|
||||||
|
lrwxrwxrwx 1 root root 0 Oct 16 08:38 hwmon0 -> ../../devices/virtual/thermal/thermal_zone0/hwmon0
|
||||||
|
lrwxrwxrwx 1 root root 0 Oct 16 08:38 hwmon1 -> ../../devices/virtual/thermal/thermal_zone1/hwmon1
|
||||||
|
lrwxrwxrwx 1 root root 0 Oct 16 08:38 hwmon2 -> ../../devices/platform/ff120000.i2c/i2c-2/2-004c/hwmon/hwmon2
|
||||||
|
lrwxrwxrwx 1 root root 0 Oct 16 09:29 hwmon3 -> ../../devices/platform/gpio-charger/power_supply/gpio-charger/hwmon3
|
||||||
|
lrwxrwxrwx 1 root root 0 Oct 16 09:29 hwmon4 -> ../../devices/platform/p7-fan/hwmon/hwmon4
|
||||||
|
lrwxrwxrwx 1 root root 0 Oct 16 09:29 hwmon5 -> ../../devices/platform/p6-fan/hwmon/hwmon5
|
||||||
|
lrwxrwxrwx 1 root root 0 Oct 16 09:29 hwmon6 -> ../../devices/platform/ff3d0000.i2c/i2c-4/4-0022/power_supply/tcpm-source-psy-4-0022/hwmon6
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! info
|
||||||
|
The numbering may different from above example output. It depends on whether the driver built as kernel module or built-in, device initialization order. Take this as consideration when using [fancontrol](#fancontrol-automated-software-based-fan-speed-control)
|
||||||
|
|
||||||
|
To identify which hwmon belong to fan, look for *p6-fan* and *p7-fan*. On above example
|
||||||
|
|
||||||
|
```
|
||||||
|
hwmon4 -> ../../devices/platform/p7-fan/hwmon/hwmon4
|
||||||
|
hwmon5 -> ../../devices/platform/p6-fan/hwmon/hwmon5
|
||||||
|
```
|
||||||
|
|
||||||
|
To read current PWM
|
||||||
|
```
|
||||||
|
cat /sys/class/hwmon4/pwm1
|
||||||
|
cat /sys/class/hwmon5/pwm1
|
||||||
|
```
|
||||||
|
|
||||||
|
To set PWM
|
||||||
|
```
|
||||||
|
echo NEW_PWM_VALUE > /sys/class/hwmon4/pwm1
|
||||||
|
echo NEW_PWM_VALUE > /sys/class/hwmon5/pwm1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fancontrol - automated software based fan speed control
|
||||||
|
|
||||||
|
fancontrol is a shell script for use with lm_sensors. It reads its configuration from a file, then calculates fan speeds from temperatures and sets the corresponding PWM outputs to the computed values.
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install fancontrol
|
||||||
|
```
|
||||||
|
|
||||||
|
fancontrol includes *pwmconfig* script to create automatically a configuration file but it can not be used for Helios64.
|
||||||
|
|
||||||
|
#### UDEV rules
|
||||||
|
|
||||||
|
Since hwmon order can be changed between kernel version or even between reboot, on Armbian we use udev rules as workaround. The rules can be found from [here](https://raw.githubusercontent.com/armbian/build/master/packages/bsp/helios64/90-helios64-hwmon.rules) (mainline) or [here](https://raw.githubusercontent.com/armbian/build/master/packages/bsp/helios64/90-helios64-hwmon-legacy.rules) (legacy kernel 4.4) and to be copied to **/etc/udev/rules.d/**
|
||||||
|
|
||||||
|
*/dev/fan-p6, /dev/fan-p7, /dev/thermal-cpu* and */dev/thermal-board* are symlinks generated by the udev rules.
|
||||||
|
|
||||||
|
#### Configuration File
|
||||||
|
|
||||||
|
fancontrol uses **/etc/fancontrol** as configuration file. Below is an example configuration to control fan speed on Helios64.
|
||||||
|
|
||||||
|
```
|
||||||
|
# Helios64 PWM Fan Control Configuration
|
||||||
|
# Temp source : /dev/thermal-cpu
|
||||||
|
INTERVAL=10
|
||||||
|
FCTEMPS=/dev/fan-p6/pwm1=/dev/thermal-cpu/temp1_input /dev/fan-p7/pwm1=/dev/thermal-cpu/temp1_input
|
||||||
|
MINTEMP=/dev/fan-p6/pwm1=40 /dev/fan-p7/pwm1=40
|
||||||
|
MAXTEMP=/dev/fan-p6/pwm1=80 /dev/fan-p7/pwm1=80
|
||||||
|
MINSTART=/dev/fan-p6/pwm1=20 /dev/fan-p7/pwm1=20
|
||||||
|
MINSTOP=/dev/fan-p6/pwm1=29 /dev/fan-p7/pwm1=29
|
||||||
|
MINPWM=20
|
||||||
|
```
|
||||||
|
|
||||||
|
INTERVAL
|
||||||
|
|
||||||
|
This variable defines at which interval in seconds the main loop of fancontrol will be executed.
|
||||||
|
|
||||||
|
FCTEMPS
|
||||||
|
|
||||||
|
Maps PWM outputs to temperature sensors so fancontrol knows which temperature sensors should be used for calculation of new values for the corresponding PWM outputs.
|
||||||
|
|
||||||
|
Fans (**fan-p6** & **fan-p7**) are controlled based on CPU thermal sensor (**thermal-cpu**) reading.
|
||||||
|
|
||||||
|
MINSTART
|
||||||
|
|
||||||
|
Sets the minimum speed at which the fan begins spinning. You should use a safe value to be sure it works, even when the fan gets old.
|
||||||
|
|
||||||
|
Stock fan restart at 15, added 5 for safety (in case of aging fan) give us **20**.
|
||||||
|
|
||||||
|
MINSTOP
|
||||||
|
|
||||||
|
The minimum speed at which the fan still spins. Use a safe value here, too.
|
||||||
|
|
||||||
|
Stock fan stopped at 24, added 5 for safety (in case of aging fan) give us **29**.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
*Following settings can be adjusted by user to tweak further.*
|
||||||
|
|
||||||
|
MINTEMP
|
||||||
|
|
||||||
|
The temperature below which the fan gets switched to minimum speed.
|
||||||
|
|
||||||
|
Fans (fan-p6 & fan-p7) runs in minimum speed if the CPU temperature below **40** degree C.
|
||||||
|
|
||||||
|
MAXTEMP
|
||||||
|
|
||||||
|
The temperature over which the fan gets switched to maximum speed.
|
||||||
|
|
||||||
|
Fans (fan-p6 & fan-p7) runs in maximum speed if the CPU temperature above **80** degree C.
|
||||||
|
|
||||||
|
MINPWM
|
||||||
|
|
||||||
|
The PWM value to use when the temperature is below MINTEMP. Typically, this will be either 0 if it is OK for the fan to plain stop, or the same value as MINSTOP if you don't want the fan to ever stop. If this value isn't defined, it defaults to 0 (stopped fan).
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
The Helios64 fancontrol configuration file can be found [here](https://github.com/armbian/build/blob/master/packages/bsp/helios64/fancontrol.conf).
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,3 +14,72 @@ To save time information and allow the RTC to keep running while system is power
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
The polarity of the battery holder is indicated on the PCB with **'+'** signs.
|
The polarity of the battery holder is indicated on the PCB with **'+'** signs.
|
||||||
|
|
||||||
|
|
||||||
|
## Scheduled Power On using RTC
|
||||||
|
|
||||||
|
User can set up a scheduled power on using RTC alarm.
|
||||||
|
|
||||||
|
### Use SYSFS
|
||||||
|
|
||||||
|
Run following command to check whether there is any alarm set,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /sys/class/rtc/rtc0/wakealarm
|
||||||
|
```
|
||||||
|
If nothing return, it means no alarm set.
|
||||||
|
To reset/disable the alarm, run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo 0 | sudo tee /sys/class/rtc/rtc0/wakealarm
|
||||||
|
```
|
||||||
|
|
||||||
|
The alarm only accept Unix epoch time. We can use *[date](https://linux.die.net/man/1/date)* utility as helper to get epoch time of our calendar.
|
||||||
|
|
||||||
|
To set alarm from absolute calendar time, run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo `date '+%s' -d '20 December 2020 02:14:10 PM'` | sudo tee /sys/class/rtc/rtc0/wakealarm
|
||||||
|
```
|
||||||
|
You can also set alarm from relative time using this command,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo `date '+%s' -d '+ 1 hour 2 minutes 10 seconds'` | sudo tee /sys/class/rtc/rtc0/wakealarm
|
||||||
|
```
|
||||||
|
|
||||||
|
After alarm set, you can power off the system and keep the power plugged in. Helios64 should automatically power on at the scheduled time.
|
||||||
|
|
||||||
|
### Use rtcwake
|
||||||
|
|
||||||
|
Run following command to check whether there is any alarm set,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo rtcwake -m show
|
||||||
|
```
|
||||||
|
|
||||||
|
To reset/disable the alarm, run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo rtcwake -m disable
|
||||||
|
```
|
||||||
|
|
||||||
|
To set alarm from absolute calendar time, run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo rtcwake -m off --date '2020-12-20 14:14:10'
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also set alarm from relative time using this command,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo rtcwake -m off --date '+ 1 hour 2 minutes 10 seconds'
|
||||||
|
```
|
||||||
|
|
||||||
|
After the command successfully executed, system will shutdown. Keep the power plugged in and Helios64 should autommatically power on at the scheduled time.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
[date- Linux manual page](https://linux.die.net/man/1/date)
|
||||||
|
|
||||||
|
[rtcwake - Linux manual page](https://linux.die.net/man/8/rtcwake)
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,8 @@ The power delivery of the HDDs is devided into two group:
|
||||||
|
|
||||||
Helios64 implements a power staggering approach where *HDD Rail A* will be powered up first, then few seconds later *HDD Rail B* will be powered up. This power control scenario is performed to reduce the inrush current during disk spin-up.
|
Helios64 implements a power staggering approach where *HDD Rail A* will be powered up first, then few seconds later *HDD Rail B* will be powered up. This power control scenario is performed to reduce the inrush current during disk spin-up.
|
||||||
|
|
||||||
|
The power staggering mechanism is not user configurable. It is done by bootloader.
|
||||||
|
|
||||||
### J8 Pinout
|
### J8 Pinout
|
||||||
|
|
||||||
![J8 Location](/helios64/img/sata/j8_pinout.jpg)
|
![J8 Location](/helios64/img/sata/j8_pinout.jpg)
|
||||||
|
|
|
@ -36,7 +36,7 @@ The battery pack is rated 7.2V 3180mAh (22.9Wh) with max continuous discharge of
|
||||||
|
|
||||||
## Charge Management
|
## Charge Management
|
||||||
|
|
||||||
Battery charge is fully managed by hardware, no software required. Charging function still operates when system is powered off. Helios64 board provides a visual charging indicator on LED9.
|
Battery charge is fully managed by hardware ([Texas Instrument BQ24133](https://www.ti.com/product/BQ24133)), no software required. Charging function still operates when system is powered off. Helios64 board provides a visual charging indicator on LED9.
|
||||||
|
|
||||||
|LED State | Description |
|
|LED State | Description |
|
||||||
|-----------|-------------|
|
|-----------|-------------|
|
||||||
|
@ -45,3 +45,66 @@ Battery charge is fully managed by hardware, no software required. Charging func
|
||||||
| Blinking | Fault / Battery Absent |
|
| Blinking | Fault / Battery Absent |
|
||||||
|
|
||||||
**Note:** The estimated time to fully charge the empty battery is around 4 hours.
|
**Note:** The estimated time to fully charge the empty battery is around 4 hours.
|
||||||
|
|
||||||
|
## UPS Status Under Linux
|
||||||
|
|
||||||
|
In Linux, the UPS declared as gpio-charger located at
|
||||||
|
`/sys/class/power_supply/gpio-charger`
|
||||||
|
|
||||||
|
|
||||||
|
### Main Power Status
|
||||||
|
|
||||||
|
Main Power status can be read using
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /sys/class/power_supply/gpio-charger/online
|
||||||
|
```
|
||||||
|
|
||||||
|
**1** means power adapter supplying the power.
|
||||||
|
|
||||||
|
**0** means loss of power, power adapter no longer supplying power.
|
||||||
|
|
||||||
|
### Charging Status
|
||||||
|
|
||||||
|
!!! Note
|
||||||
|
This status is unavailable on Linux Kernel 4.4
|
||||||
|
|
||||||
|
Battery charging status can be read using
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /sys/class/power_supply/gpio-charger/status
|
||||||
|
```
|
||||||
|
|
||||||
|
It will return **Charging** or **Not Charging**
|
||||||
|
|
||||||
|
!!! Info
|
||||||
|
The status is only **valid** when main power is available.
|
||||||
|
|
||||||
|
*Fault / Battery Absent* status is unavailable but it can be concluded if the status keep changing.
|
||||||
|
|
||||||
|
### Battery Level
|
||||||
|
|
||||||
|
Battery voltage can be measured on internal ADC channel 2. The internal ADC is located at
|
||||||
|
`/sys/bus/iio/devices/iio:device0`
|
||||||
|
|
||||||
|
![!Battery level](/helios64/img/ups/battery_level_schematic.png)
|
||||||
|
|
||||||
|
|
||||||
|
Following table show scalling between ADC reading and actual battery voltage
|
||||||
|
|
||||||
|
| Battery Voltage (V) | ADC reading (mV) | Remarks |
|
||||||
|
|---------------------|------------------|---------|
|
||||||
|
| 0 | 114 | No batteries |
|
||||||
|
| 7.0 | 916 | Recommended threshold to force shutdown system |
|
||||||
|
| 8.4 | 1099 | Fully Charge |
|
||||||
|
|
||||||
|
[IIO subsystem](https://www.kernel.org/doc/html/latest/driver-api/iio/index.html) provide hardware raw value. To convert the raw value to standard units, use following formula
|
||||||
|
|
||||||
|
`adc = in_voltage2_raw * in_voltage_scale`
|
||||||
|
|
||||||
|
To get the actual ADC reading in shell run following command
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "`cat /sys/bus/iio/devices/iio:device0/in_voltage2_raw` * `cat /sys/bus/iio/devices/iio:device0/in_voltage_scale`" | bc
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -109,3 +109,337 @@ Using Type-C to Type A male cable such as,
|
||||||
![Type-C to Type-A male](/helios64/img/usb/typec_typea_male.jpg)
|
![Type-C to Type-A male](/helios64/img/usb/typec_typea_male.jpg)
|
||||||
|
|
||||||
Helios64 can be used as Direct Attached Storage (DAS) with the required software configuration. It can also be used as "USB eMMC reader/writer" during system recovery mode.
|
Helios64 can be used as Direct Attached Storage (DAS) with the required software configuration. It can also be used as "USB eMMC reader/writer" during system recovery mode.
|
||||||
|
|
||||||
|
|
||||||
|
## USB under U-Boot
|
||||||
|
|
||||||
|
### USB Host Port
|
||||||
|
|
||||||
|
USB Host support in U-Boot is quite minimal, it only support USB storage.
|
||||||
|
|
||||||
|
### USB OTG Port (USB Type-C)
|
||||||
|
|
||||||
|
USB Type C port is configured as USB device mode as USB Mass Storage connected to eMMC.
|
||||||
|
This function can be activated by pressing [Recovery Button](/helios64/button/#recovery-button).
|
||||||
|
This is to serve as a way to (re)install OS to eMMC.
|
||||||
|
|
||||||
|
## USB under Linux
|
||||||
|
|
||||||
|
!!! Info
|
||||||
|
Currently only applicable under Linux Kernel 4.4.
|
||||||
|
Mainline kernel support is still under development.
|
||||||
|
|
||||||
|
### Helios64 as Direct Attached Storage (DAS) device
|
||||||
|
|
||||||
|
Helios64 can be used as Direct Attached Storage (DAS) device with help of Linux USB Gadget kernel module.
|
||||||
|
|
||||||
|
The kernel moodule only export the underlying block device NOT the filesystem layer. Therefore if the block device is formatted with filesystem unique to Linux,
|
||||||
|
the exported disk may not readable by computer that has Helios64 connected to.
|
||||||
|
|
||||||
|
For example, the block device is formatted with EXT4 filesystem and Helios64 connected to Windows PC as DAS,
|
||||||
|
the Windows PC will not be able to read the disk content unless 3rd party software/driver installed.
|
||||||
|
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
Do NOT access Helios64 simultanouesly as DAS and NAS, as the filesystem is not managed by system and can lead to data corruption.
|
||||||
|
|
||||||
|
#### Individual Disk Exported as Separate Disk
|
||||||
|
|
||||||
|
To export all SATA disks that has been identified as /dev/sda ... /dev/sde, run the following command on Helios64.
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo modprobe g_mass_storage file=/dev/sda,/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde iSerialNumber=1234567890 iManufacturer="Kobol Innovations" iProduct=Helios64
|
||||||
|
```
|
||||||
|
|
||||||
|
The following screenshot, Helios64 connected with 5x 120GB SATA drive.
|
||||||
|
|
||||||
|
***Helios64 connected to PC running Windows***
|
||||||
|
|
||||||
|
USB device visualization using USB Device Tree Viewer
|
||||||
|
![!usbtreeview Screenshot](/helios64/img/usb/linux_gadget_das_windows_usbtreeview.png)
|
||||||
|
|
||||||
|
Helios64 in Device Manager
|
||||||
|
![!device manager Screenshot](/helios64/img/usb/linux_gadget_das_windows_device_manager.png)
|
||||||
|
|
||||||
|
Disks detected under Disk Management
|
||||||
|
![!disk mgmt Screenshot](/helios64/img/usb/linux_gadget_das_windows_diskmgmt.png)
|
||||||
|
|
||||||
|
***Helios64 connected to PC running Linux***
|
||||||
|
|
||||||
|
USB device visualization using USBview
|
||||||
|
![!usbview Screenshot](/helios64/img/usb/linux_gadget_das_usbview.png)
|
||||||
|
|
||||||
|
USB tree using lsusb
|
||||||
|
![!lsusb tree Screenshot](/helios64/img/usb/linux_gadget_das_lsusb_tree.png)
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo lsusb -s 2:6 -v
|
||||||
|
|
||||||
|
Bus 002 Device 006: ID 0525:a4a5 Netchip Technology, Inc. Pocketbook Pro 903
|
||||||
|
Device Descriptor:
|
||||||
|
bLength 18
|
||||||
|
bDescriptorType 1
|
||||||
|
bcdUSB 3.00
|
||||||
|
bDeviceClass 0 (Defined at Interface level)
|
||||||
|
bDeviceSubClass 0
|
||||||
|
bDeviceProtocol 0
|
||||||
|
bMaxPacketSize0 9
|
||||||
|
idVendor 0x0525 Netchip Technology, Inc.
|
||||||
|
idProduct 0xa4a5 Pocketbook Pro 903
|
||||||
|
bcdDevice 4.04
|
||||||
|
iManufacturer 3 Kobol Innovations
|
||||||
|
iProduct 4 Helios64
|
||||||
|
iSerial 5 1234567890
|
||||||
|
bNumConfigurations 1
|
||||||
|
OTG Descriptor:
|
||||||
|
bLength 3
|
||||||
|
bDescriptorType 9
|
||||||
|
bmAttributes 0x03
|
||||||
|
SRP (Session Request Protocol)
|
||||||
|
HNP (Host Negotiation Protocol)
|
||||||
|
Configuration Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 2
|
||||||
|
wTotalLength 47
|
||||||
|
bNumInterfaces 1
|
||||||
|
bConfigurationValue 1
|
||||||
|
iConfiguration 0
|
||||||
|
bmAttributes 0xe0
|
||||||
|
Self Powered
|
||||||
|
Remote Wakeup
|
||||||
|
MaxPower 126mA
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 0
|
||||||
|
bAlternateSetting 0
|
||||||
|
bNumEndpoints 2
|
||||||
|
bInterfaceClass 8 Mass Storage
|
||||||
|
bInterfaceSubClass 6 SCSI
|
||||||
|
bInterfaceProtocol 80 Bulk-Only
|
||||||
|
iInterface 1 Mass Storage
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x81 EP 1 IN
|
||||||
|
bmAttributes 2
|
||||||
|
Transfer Type Bulk
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0400 1x 1024 bytes
|
||||||
|
bInterval 0
|
||||||
|
bMaxBurst 15
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x01 EP 1 OUT
|
||||||
|
bmAttributes 2
|
||||||
|
Transfer Type Bulk
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0400 1x 1024 bytes
|
||||||
|
bInterval 0
|
||||||
|
bMaxBurst 15
|
||||||
|
Binary Object Store Descriptor:
|
||||||
|
bLength 5
|
||||||
|
bDescriptorType 15
|
||||||
|
wTotalLength 22
|
||||||
|
bNumDeviceCaps 2
|
||||||
|
USB 2.0 Extension Device Capability:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 16
|
||||||
|
bDevCapabilityType 2
|
||||||
|
bmAttributes 0x00000006
|
||||||
|
Link Power Management (LPM) Supported
|
||||||
|
SuperSpeed USB Device Capability:
|
||||||
|
bLength 10
|
||||||
|
bDescriptorType 16
|
||||||
|
bDevCapabilityType 3
|
||||||
|
bmAttributes 0x00
|
||||||
|
wSpeedsSupported 0x000f
|
||||||
|
Device can operate at Low Speed (1Mbps)
|
||||||
|
Device can operate at Full Speed (12Mbps)
|
||||||
|
Device can operate at High Speed (480Mbps)
|
||||||
|
Device can operate at SuperSpeed (5Gbps)
|
||||||
|
bFunctionalitySupport 1
|
||||||
|
Lowest fully-functional device speed is Full Speed (12Mbps)
|
||||||
|
bU1DevExitLat 1 micro seconds
|
||||||
|
bU2DevExitLat 500 micro seconds
|
||||||
|
Device Status: 0x0000
|
||||||
|
(Bus Powered)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
xfce file manager (thunar)
|
||||||
|
![!Thunar Screenshot](/helios64/img/usb/linux_gadget_das_thunar_5_drive.png)
|
||||||
|
|
||||||
|
lsblk output:
|
||||||
|
```
|
||||||
|
$ lsblk
|
||||||
|
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
||||||
|
sdc 8:32 0 111,8G 0 disk
|
||||||
|
└─sdc1 8:33 0 111,8G 0 part
|
||||||
|
sdd 8:48 0 111,8G 0 disk
|
||||||
|
└─sdd1 8:49 0 111,8G 0 part
|
||||||
|
sde 8:64 0 111,8G 0 disk
|
||||||
|
└─sde1 8:65 0 111,8G 0 part
|
||||||
|
sdf 8:80 0 111,8G 0 disk
|
||||||
|
└─sdf1 8:81 0 111,8G 0 part
|
||||||
|
sdg 8:96 0 111,8G 0 disk
|
||||||
|
└─sdg1 8:97 0 111,8G 0 part
|
||||||
|
|
||||||
|
$ lsblk -S
|
||||||
|
NAME HCTL TYPE VENDOR MODEL REV TRAN
|
||||||
|
sda 0:0:0:0 disk ATA WDC WDS240G2G0B 0000 sata
|
||||||
|
sdb 1:0:0:0 disk ATA TOSHIBA MQ04 0J sata
|
||||||
|
sdc 2:0:0:0 disk Linux File-Stor Gadget 0404 usb
|
||||||
|
sdd 2:0:0:1 disk Linux File-Stor Gadget 0404 usb
|
||||||
|
sde 2:0:0:2 disk Linux File-Stor Gadget 0404 usb
|
||||||
|
sdf 2:0:0:3 disk Linux File-Stor Gadget 0404 usb
|
||||||
|
sdg 2:0:0:4 disk Linux File-Stor Gadget 0404 usb
|
||||||
|
```
|
||||||
|
|
||||||
|
#### RAID device exported as One Disk
|
||||||
|
|
||||||
|
Assuming the RAID already created and identified as /dev/md/md-raid6, run the following command on Helios64 to export the RAID block device as USB Mass Storage
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo modprobe g_mass_storage file=/dev/md/md-raid6 iManufacturer="Kobol Innovations" iProduct="Helios64" iSerialNumber="1234567890"
|
||||||
|
```
|
||||||
|
|
||||||
|
The following screenshot, Helios64 connected with 5x 120GB SATA drive and configured as RAID 6 so total space of the block device is ~360GB (3x 120GB). The block device then formatted with NTFS.
|
||||||
|
|
||||||
|
***Helios64 connected to PC running Windows***
|
||||||
|
|
||||||
|
USB device visualization using USB Device Tree Viewer
|
||||||
|
![!usbtreeview Screenshot](/helios64/img/usb/linux_gadget_das_windows_usbtreeview_raid.png)
|
||||||
|
|
||||||
|
Helios64 in Device Manager
|
||||||
|
![!device manager Screenshot](/helios64/img/usb/linux_gadget_das_windows_device_manager_raid.png)
|
||||||
|
|
||||||
|
Disks detected under Disk Management
|
||||||
|
![!disk mgmt Screenshot](/helios64/img/usb/linux_gadget_das_windows_diskmgmt_raid.png)
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
Since the block device is formatted with NTFS, Windows can recognize it and assign drive letter E:
|
||||||
|
|
||||||
|
***Helios64 connected to PC running Linux***
|
||||||
|
|
||||||
|
USB device visualization using USBview
|
||||||
|
![!usbview Screenshot](/helios64/img/usb/linux_gadget_das_usbview_raid.png)
|
||||||
|
|
||||||
|
USB tree using lsusb
|
||||||
|
![!lsusb tree Screenshot](/helios64/img/usb/linux_gadget_das_lsusb_tree_raid.png)
|
||||||
|
|
||||||
|
```
|
||||||
|
Bus 002 Device 006: ID 0525:a4a5 Netchip Technology, Inc. Pocketbook Pro 903
|
||||||
|
Device Descriptor:
|
||||||
|
bLength 18
|
||||||
|
bDescriptorType 1
|
||||||
|
bcdUSB 3.00
|
||||||
|
bDeviceClass 0 (Defined at Interface level)
|
||||||
|
bDeviceSubClass 0
|
||||||
|
bDeviceProtocol 0
|
||||||
|
bMaxPacketSize0 9
|
||||||
|
idVendor 0x0525 Netchip Technology, Inc.
|
||||||
|
idProduct 0xa4a5 Pocketbook Pro 903
|
||||||
|
bcdDevice 4.04
|
||||||
|
iManufacturer 3 Kobol Innovations
|
||||||
|
iProduct 4 Helios64
|
||||||
|
iSerial 5 1234567890
|
||||||
|
bNumConfigurations 1
|
||||||
|
OTG Descriptor:
|
||||||
|
bLength 3
|
||||||
|
bDescriptorType 9
|
||||||
|
bmAttributes 0x03
|
||||||
|
SRP (Session Request Protocol)
|
||||||
|
HNP (Host Negotiation Protocol)
|
||||||
|
Configuration Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 2
|
||||||
|
wTotalLength 47
|
||||||
|
bNumInterfaces 1
|
||||||
|
bConfigurationValue 1
|
||||||
|
iConfiguration 0
|
||||||
|
bmAttributes 0xe0
|
||||||
|
Self Powered
|
||||||
|
Remote Wakeup
|
||||||
|
MaxPower 126mA
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 0
|
||||||
|
bAlternateSetting 0
|
||||||
|
bNumEndpoints 2
|
||||||
|
bInterfaceClass 8 Mass Storage
|
||||||
|
bInterfaceSubClass 6 SCSI
|
||||||
|
bInterfaceProtocol 80 Bulk-Only
|
||||||
|
iInterface 1 Mass Storage
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x81 EP 1 IN
|
||||||
|
bmAttributes 2
|
||||||
|
Transfer Type Bulk
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0400 1x 1024 bytes
|
||||||
|
bInterval 0
|
||||||
|
bMaxBurst 15
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x01 EP 1 OUT
|
||||||
|
bmAttributes 2
|
||||||
|
Transfer Type Bulk
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0400 1x 1024 bytes
|
||||||
|
bInterval 0
|
||||||
|
bMaxBurst 15
|
||||||
|
Binary Object Store Descriptor:
|
||||||
|
bLength 5
|
||||||
|
bDescriptorType 15
|
||||||
|
wTotalLength 22
|
||||||
|
bNumDeviceCaps 2
|
||||||
|
USB 2.0 Extension Device Capability:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 16
|
||||||
|
bDevCapabilityType 2
|
||||||
|
bmAttributes 0x00000006
|
||||||
|
Link Power Management (LPM) Supported
|
||||||
|
SuperSpeed USB Device Capability:
|
||||||
|
bLength 10
|
||||||
|
bDescriptorType 16
|
||||||
|
bDevCapabilityType 3
|
||||||
|
bmAttributes 0x00
|
||||||
|
wSpeedsSupported 0x000f
|
||||||
|
Device can operate at Low Speed (1Mbps)
|
||||||
|
Device can operate at Full Speed (12Mbps)
|
||||||
|
Device can operate at High Speed (480Mbps)
|
||||||
|
Device can operate at SuperSpeed (5Gbps)
|
||||||
|
bFunctionalitySupport 1
|
||||||
|
Lowest fully-functional device speed is Full Speed (12Mbps)
|
||||||
|
bU1DevExitLat 1 micro seconds
|
||||||
|
bU2DevExitLat 500 micro seconds
|
||||||
|
Device Status: 0x0000
|
||||||
|
(Bus Powered)
|
||||||
|
```
|
||||||
|
|
||||||
|
xfce file manager (thunar)
|
||||||
|
![!Thunar Screenshot](/helios64/img/usb/linux_gadget_das_thunar_raid.png)
|
||||||
|
|
||||||
|
lsblk output
|
||||||
|
```
|
||||||
|
$ lsblk
|
||||||
|
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
||||||
|
sdc 8:32 0 335,2G 0 disk
|
||||||
|
└─sdc1 8:33 0 335,2G 0 part
|
||||||
|
|
||||||
|
$ lsblk -S
|
||||||
|
NAME HCTL TYPE VENDOR MODEL REV TRAN
|
||||||
|
sda 0:0:0:0 disk ATA WDC WDS240G2G0B 0000 sata
|
||||||
|
sdb 1:0:0:0 disk ATA TOSHIBA MQ04 0J sata
|
||||||
|
sdc 2:0:0:0 disk Linux File-Stor Gadget 0404 usb
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -93,13 +93,15 @@ nav:
|
||||||
- Jumper: 'helios64/jumper.md'
|
- Jumper: 'helios64/jumper.md'
|
||||||
- LED: 'helios64/led.md'
|
- LED: 'helios64/led.md'
|
||||||
- M.2: 'helios64/m2.md'
|
- M.2: 'helios64/m2.md'
|
||||||
- PMIC: 'helios64/pmic.md'
|
- Power:
|
||||||
|
- Auto Power On: 'helios64/auto_poweron.md'
|
||||||
|
- PMIC: 'helios64/pmic.md'
|
||||||
|
- UPS Battery: 'helios64/ups.md'
|
||||||
- PWM Fan: 'helios64/pwm.md'
|
- PWM Fan: 'helios64/pwm.md'
|
||||||
- RTC: 'helios64/rtc.md'
|
- RTC: 'helios64/rtc.md'
|
||||||
- SATA: 'helios64/sata.md'
|
- SATA: 'helios64/sata.md'
|
||||||
- SPI: 'helios64/spi.md'
|
- SPI: 'helios64/spi.md'
|
||||||
- UEXT: 'helios64/uext.md'
|
- UEXT: 'helios64/uext.md'
|
||||||
- UPS Battery: 'helios64/ups.md'
|
|
||||||
- USB: 'helios64/usb.md'
|
- USB: 'helios64/usb.md'
|
||||||
- Documents: 'helios64/docs.md'
|
- Documents: 'helios64/docs.md'
|
||||||
- Helios4:
|
- Helios4:
|
||||||
|
|