Skip to content

Sensors / Hwmon

The Ten64 board has multiple sensors, with a view to provide a complete picture of system temperatures, voltages and currents.

The sensor IC's are quite new and are not currently in the upstream kernel - we provide a dkms based package to compile these out of tree.

List of sensors

Sensor Bus Attribute Description Units
EMC1704 I2C1/0x18 external1_temp LS1088 Die temperature sensor Milli-degreesC (10^3)
EMC1704 I2C1/0x18 external2_temp Board Temperature sensor Q3 (near NVMe slot) Milli-degreesC (10^3)
EMC1704 I2C1/0x18 external3_temp Not used
EMC1704 I2C1/0x18 internal_temp EMC1704 internal temperature sensor (between uC and SPI-NOR flash) Milli-degreesC (10^3)
EMC1704 I2C1/0x18 source_voltage VIN Micro-volts (10^6)
EMC1704 I2C1/0x18 sense_voltage Not used
EMC1813 I2C1/0x4c temp1_input EMC1813 internal temperature Milli-degreesC (10^3)
EMC1813 I2C1/0x4c temp2_input VSC8514 #1 (eth0-eth3) die temperature Milli-degreesC (10^3)
EMC1813 I2C1/0x4c temp3_input VSC8514 #2 (eth4-eth7) die temperature Milli-degreesC (10^3)
PAC1934 #1 I2C1/0x11 vbus0 miniPCIe P4 3.3V Sense+ Micro-volts (10^6)
PAC1934 #1 I2C1/0x11 vbus1 miniPCIe P5 3.3V Sense+ Micro-volts (10^6)
PAC1934 #1 I2C1/0x11 vbus2 LTE/M.2B 3.3V Sense+ Micro-volts (10^6)
PAC1934 #1 I2C1/0x11 vbus3 5V Micro-volts (10^6)
PAC1934 #2 I2C1/0x1a vbus0 DDR VDD (1.2V) voltage Micro-volts (10^6)
PAC1934 #2 I2C1/0x1a vbus1 DDR VPP (2.5V) voltage Micro-volts (10^6)
PAC1934 #2 I2C1/0x1a vbus2 DDR VTT (0.6V) voltage Micro-volts (10^6)
PAC1934 #2 I2C1/0x1a vbus3 1.8V (OVDD) voltage Micro-volts (10^6)

Sysfs access

You can read the sensor values via sysfs. The hwmon device names are numbered as they appear in the kernel, so be careful when referencing them.

ls -la /sys/class/hwmon/
drwxr-xr-x    2 root     root             0 Oct 15 01:15 .
drwxr-xr-x   58 root     root             0 Jan  1  1970 ..
lrwxrwxrwx    1 root     root             0 Oct 15 01:15 hwmon0 -> ../../devices/platform/soc/2000000.i2c/i2c-0/0-0018/hwmon/hwmon0
lrwxrwxrwx    1 root     root             0 Oct 15 01:15 hwmon1 -> ../../devices/platform/soc/2000000.i2c/i2c-0/0-004c/hwmon/hwmon1
lrwxrwxrwx    1 root     root             0 Oct 15 01:15 hwmon2 -> ../../devices/platform/soc/2000000.i2c/i2c-0/0-0011/hwmon/hwmon2
lrwxrwxrwx    1 root     root             0 Oct 15 01:15 hwmon3 -> ../../devices/platform/soc/2000000.i2c/i2c-0/0-001a/hwmon/hwmon3

Example - uploading sensor values to a time-series database

If you are uploading sensor values to a database, it might be helpful to use the "of_node" symlink to uniquely and consistently identify each hwmon device

For example, the script below can produce formatted key-values for InfluxDB:

board_id=$(sed 's/://g' /sys/class/net/eth0/address)
curtime=$(date +%s)
for s in $(ls /sys/class/hwmon); do
  chip_id=$(basename $(realpath "/sys/class/hwmon/${s}/of_node"))
  sensors=$(find "/sys/class/hwmon/${s}/" -maxdepth 1 -perm 0444 ! -name suppliers ! -name consumers ! -name name)
  for x in ${sensors}; do
    valname=$(basename "${x}")
    value=$(cat "${x}")
    #echo "boards.${board_id}.${chip_id}.${valname} ${value} ${curtime}" | nc 2003
    data="${chip_id}.${valname},board=${board_id} value=${value} ${curtime}"
    # Print the value
    echo "${data}"
    # Submit to influxdb
    curl -XPOST "http://influxdb:8086/write?precision=s&db=ten64" --data-binary "${data}"

Gives the output:

emc1813@4c.temp3_input,board=000afa2424e5 value=73625 1571103854
emc1813@4c.temp1_input,board=000afa2424e5 value=43125 1571103854
emc1813@4c.temp2_input,board=000afa2424e5 value=63625 1571103854
emc1704@18.internal_temp,board=000afa2424e5 value=44000 1571103854
emc1704@18.external2_temp,board=000afa2424e5 value=40000 1571103854
emc1704@18.sense_voltage,board=000afa2424e5 value=0 1571103854