|Version 1 (modified by khali, 15 months ago)|
How to figure out the voltage labels and scaling factors
Voltages are the most difficult part to configure. While temperature and fan speed values are generally reported correctly by the drivers directly, voltages are not. The reason is that the ADC used internally to monitor the voltage values has a limited range. Typically the ADC in monitoring chips can monitor from 0 to 4.08 V, 3.06 V, or 2.04 V. Other ranges are possible, but there are a two rules which apply in all cases:
- The ADC cannot measure negative voltages directly.
- The ADC cannot monitor positive voltages beyond its range directly.
In both cases, scaling factors have to be applied. In practice this is achieved using external or internal resistors for positive voltages. The negative voltage case is more complex, but I will not describe it here, as negative voltages are almost unused on recent systems and thus almost never monitored.
The scaling resistors can either be internal to the chip (the chip has dedicated pins for all voltages beyond its ADC range) or external (resistors are soldered on the motherboard.) Internal scaling is easy to deal with and the driver will do it for you. External scaling is motherboard specific and cannot be done by the driver. It has to be done in the libsensors configuration file specifically for every motherboard. Unfortunately the vendors rarely provide enough information to write such configuration statements, so some experimental work is needed. This guide will guide you through this.
First of all, we need reference values to know which result we are supposed to get to. In most cases, the reference will be the BIOS, which typically displays all monitored values. So, boot your machine and go to the BIOS, and write down on a sheet of paper the label and value for every voltage being monitored. If you can spot more than one value per item, this is very useful, so write down all values. The reference can also be a piece of software provided by the vendor.
Once you know which voltages are being monitored and their values on your specific systems, go to Linux and run sensors. We will try to figure out the proper labels and scaling factors. For this exercise, we need to know the ADC range of the chip. Here is the answer for the most popular Super-I/O chips:
- Old Winbond Super-I/O chips (W83627HF, W083627THF, W83637HF, W83687THF, W83697HF, driver = w83627hf): 0 to 4.08 V, 1 bit = 16 mV
- Old ITE Super-I/O chips (IT8705F, IT8712F, IT8716F, IT8718F, IT8716F, driver = it87): 0 to 4.08 V, 1 bit = 16 mV
- Newer ITE Super-I/O chips (IT8720F, IT8721F, IT8728F, driver = it87): 0 to 3.06 V, 1 bit = 12 mV
- Newer Winbond/Nuvoton Super-I/O chips (W83627EHF, W83627DHG, W83627UHG, W83667HG, NCT6775, NCT6776, driver = w83627ehf): 0 to 2.04 V, 1 bit = 8 mV
- All Fintek Super-I/O chips (driver = f71805f or f71882fg): 0 to 2.04 V, 1 bit = 8 mV
For other chips, try to find the answer in the datasheet, driver documentation or source code.