Fortron TwinsPro FSP900 DUAL Netzteil unter Linux auslesen
Das Fortron TwinsPro FSP900 Dual Netzteil bietet für den Einsatz unter Linux auf einem Server-Board keine native Möglichkeit, Daten über das Netzteil auszulesen. Mithilfe von Linux-eigenen Mitteln lassen sich die Daten aber dennoch auswerten.

Problemstellung
Fortron bietet ab Werk ausschließlich einen Windows-Port, um mittels der firmeneigenen proprietären Software FSP Guardian das Netzteil auszulesen.
Will man das Netzteil auf einem Server-Board unter einem Linux-Server-Betriebssystem betreiben, fehlen herstellerseitige Mittel für das Auslesen der Daten. Auch ein PMBus-Anschluss ist nicht vorhanden.
Im folgenden soll daher mit bereits vorhandenen Werkzeugen in modernen Linux-Umgebungen das Auslesen der Daten ermöglicht werden:
- Konfiguration mit Boardmitteln
- Das Netzteil anschließen und testen
- im Kernelspace für Überwachungsfunktionen verfügbar machen
- Fehlerfallprüfung
Konfiguration
Im folgenden konfigurieren wir das Auslesen der Daten mithilfe von i2c-tools und lm-sensors eines Netzteils mit Anschluss an einen USB 2.0 Header.
Testumgebung
Für die Konfiguration wird ein System mit Linux-Betriebssystem benötigt. Wir testen mit einem Ubuntu Image:
Linux custom-hw-image 5.15.0-97-generic #107-Ubuntu SMP Wed Feb 7 13:26:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
Konfiguration
Pakteinstallation
Installieren Sie i2c-tools und lm-sensors:
root@custom-hw-image:~# apt install i2c-tools lm-sensors
Hardwareerkennung
Damit die Daten ausgelesen werden können, muss das Gerät korrekt erkannt und eingebunden sein. Prüfen Sie zunächst, ob das Netzteil über einen USB 2.0 Header angeschlossen ist:
root@custom-hw-image:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 10c4:ea90 Silicon Labs CP2112 HID I2C Bridge
Bus 001 Device 002: ID 046d:c31c Logitech, Inc. Keyboard K120
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Das gesuchte Netzteil ist Device 003 auf Bus 001 korrekt erkannt worden. Jetzt prüfen Sie, auf welchem Bus die Bridge über I2C eingebunden wurde:
root@custom-hw-image:~# i2cdetect -l
i2c-0 smbus SMBus I801 adapter at efa0 SMBus adapter
i2c-1 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-2 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-3 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-4 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-5 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-6 i2c CP2112 SMBus Bridge on hidraw2 I2C adapter
Hier wurde die SMBus Bridge auf Bus i2c-6 gefunden.
Bus auslesen
Sie können nun den I2C-Bus auf dieser Adresse auslesen:
root@custom-hw-image:~# i2cdetect -y 6
Warning: Can't use SMBus Quick Write command, will skip some addresses
0 1 2 3 4 5 6 7 8 9 a b c d e f
00:
10:
20:
30: -- -- -- -- -- -- -- --
40:
50: 50 51 -- -- -- -- 56 -- 58 59 -- -- -- -- -- --
60:
70:
Hier werden beide Netzteile auf den Adressen 0x58 und 0x59 erkannt. Um zu prüfen, ob der Herstellername passt:
root@custom-hw-image:~# i2cget -y 6 0x58 0x99 i 8
0x09 0x46 0x53 0x50 0x2d 0x47 0x52 0x4f
root@custom-hw-image:~# printf "\x09\x46\x53\x50\x2d\x47\x52\x4f\n"
FSP-GRO
Außerdem kann zur Prüfung die Spannung ausgelesen werden:
root@custom-hw-image:~# i2cget -y 6 0x58 0x8B w
0x1879
Diesen Wert muss man dann nur umrechnen und in Volt übersetzen. Der Hersteller verwendet eine direkte Skalierung. Die Spannung lässt sich also linear berechnen:
Einbindung der Anschlüsse im Kernelspace

Mit den folgenden Kommandos können Sie jetzt beide Netzteil-Anschlüsse dem Kernelspace hinzufügen:
root@custom-hw-image:~# echo pmbus 0x58 | sudo tee /sys/bus/i2c/devices/i2c-6/new_device
pmbus 0x58
root@custom-hw-image:~# echo pmbus 0x59 | sudo tee /sys/bus/i2c/devices/i2c-6/new_device
pmbus 0x59
Prüfen Sie die erfolgreiche Einbindung:
root@custom-hw-image:~# i2cdetect -y 6
Warning: Can't use SMBus Quick Write command, will skip some addresses
0 1 2 3 4 5 6 7 8 9 a b c d e f
00:
10:
20:
30: -- -- -- -- -- -- -- --
40:
50: 50 51 -- -- -- -- 56 -- UU UU -- -- -- -- -- --
60:
70:
Die beiden Netzteile sind so für direkte Abfragen via I2C nicht erreichbar, da diese nun komplett im KernelSpace UU (Upper Unit) eingebunden sind.
Beide Netzteile können Sie jetzt vollständig mittels lm-sensors auslesen (für die Ausgabe siehe Abb. 2):
root@custom-hw-image:~# sensors
Fehlerfallprüfung
Zuletzt können Sie noch einen Fehlerfall simulieren.
Hier wird testweise der Kaltgerätestecker von Netzteil 1 gezogen (siehe Abb. 3):

|
Autor: Wilfried Seifert Wilfried Seifert, tätig in der Abteilung Systems Engineering bei Thomas-Krenn, ist in seinem Arbeitsbereich für die System-/Prototypenentwicklung sowie Softwaredeployment / Rollout unterschiedlicher Architekturen zuständig. LPIC 3 zertifiziert, beschäftigt sich u.a. mit Aufbau / Programmierung Embedded (x64/ARM) Systemen.
|

