[Vorstellung] NoteBook FanControl (NBFC)

Grantig schrieb:
Der Service läuft aber auch komplett ohne GUI und auch ohne eingeloggten Nutzer.
Nicht zu vergessen ist die Problematik der UAC. Ich arbeite aus Sicherheitsgründen ohne Admin-Rechten. Beim Start meckert die UAC. Ich starte NBFC deshalb mit einem Tool, bei dem ich das Admin-Kennwort verschlüsselt hinterlegt habe.
 
Thank you, but it won't save any settings unfortunately. All the values I set appear as 0 after applying the newly created profile.
 
Kommt eine Config bzw. hat jemand gute Werte für das Dell XPS12?

Wäre super :)

Besten Dank schon mal für jegliche Hilfe!
 
@TimeWalker75a
Are you sure you saved the changes after editing your config?

Here are the steps to create and apply a new config:
1. Add new config
2. Set your values
3. Save changes
4. Apply current config

It works for me.
 
Zuletzt bearbeitet:
1. http://puu.sh/1WeQi pressing the "+" sign, naming the config "Dell System Vostro 3450"
2. http://puu.sh/1WeQw setting r/w mode to word
3. http://puu.sh/1WeSE set my values, press apply config button
4. http://puu.sh/1WeTw fan speed is obviously incorrect, lets see config then?
5. http://puu.sh/1WeU6 everything is set to 0

And again, if I edit my config by hand this happens
1WeWO

it appears you have fixed the max speed, but forgot the min speed.
 
Zuletzt bearbeitet von einem Moderator: (Beiträge zusammengeführt)
I forgot to update NumericUpDown MaxValue on Config window load.
I fixed it and uploaded a new version.

You can still get NBFC to throw an Exception if you edit your config by hand and set values higher than 255 without settings ReadWriteWords to true, though. (But you can't fuck up your config via NBFC config editor)
Do you think it would be better to check configs for validity before loading them?

It would be great if you could post a screenshot of R&W showing your EC registers.
Does it really have 16bit registers or does it just use 2 registers to "emulate" a 16bit register?
 
I made sure I set it to read words. And extra check wouldn't hurt, really.

I actually analyzed the behavior a bit more and it seems like you are only able to set desired levels via Dell's SMI (according to the author or HWInfo64 anyway.. and it's not documented. The fan control in this software sort of works, but it requires a Respin interval to be set in order to keep the fan at desired speed, but then a delay is introduced because it interferes with EC and creates lag, much like having RWE open at all times).
There are only 3 speeds predefined in EC's firmware: 1200 (off, reaching this sets fan to 0rpm) - 3200(low trip) - 4200(high trip) and this is common for all modern Dell laptops, the speeds vary though.

It depends, it uses 16 bit register to set levels, then 8 bit to reflect trip point levels (0x01 low trip at 55C, 0x02 high trip at 71C, 0x03 start throttling at 95C) and 2x8 bit registers to display higher and lower tachometer readout (one register for thousands, another one for decimals .. which makes up a 16 bit word really). I can link you to my git, I've started reversing EC registers and made it pretty far, just search for Field (ECRM in there: https://github.com/Dolnor/V3450_commentary/blob/master/acpi_dsdt.dsl
The chips is ITE IT8518E (no public datasheet available), my board is Intel Emerald Lake (found on Lenovo B570 as well).

I've made a detailed note (see explanation on FANO and FLVL registers) there how to make the fan stick on a certain speed, but there's no way I can directly set my custom speed without interfering with DELLDIAG (SMI) and I have no idea how to do this. And even if I knew the only levels possible are the ones that are hardcoded into EC, the ones I've mentioned. I've attempted to control this over ACPI by altering DSDT, but it seems like setting FANO to low from ACPI is a problematic experience, it never gets set to 0. You can set the FLVL to 0x00 though and make fan drop speed gradually. That's the story for current gen Dell machines.
 
This contains hints on how Dell's SMI is accessed: https://launchpad.net/ubuntu/natty/+source/i8kutils/1.33
i8kutils have derived from the source code of i8k for Windows, which was reverse engineered from Dell's code.

Note that i8k will let you run a fan on a Dell at 0 (off), 1 (slow), or 2 (fast) levels, and that there is a left and a right fan setting. Right and left don't seem to have anything to do with fan's physical location.
 
Hi,

ich habe gerade versucht, NBFC für das Lenovo Yoga 13 auszuprobieren, da auch das im Idle Modus viel zu laut ist.

Leider kann ich die .exe datei gar nicht erst öffnen (Windows 8 64-bit)
....
*EDIT* habs hinbekommen, lag daran dass ich einen windows dienst deaktiviert hatte, der standartmäßig an ist

ich konnte NBFC mittlerweile auf einem Zenbook UX31A mit Jojo EFfekt testen, mit NBFC läuft es einwandfrei, ein Traum.

Werde mich die Tage mal hinsetzen und versuchen eine Yoga 13 config zu machen, da ich mich dazu aber erst in die Materie einlesen müsste, wäre ich froh, wenn es jemand anders tun könnte ;)
Ein leises Yoga 13 wäre der Oberhammer.
 
Zuletzt bearbeitet:
@pommesfritz
Wars der Dienst "Windows Verwlatungsinstrumentation" bzw. WMI.
NBFC nutzt nämlich WMI um das Notebook Modell auszulesen.

Wenn du mir bestätigen könntest, das es daran gescheitert ist, könnte ich nen extra Check beim Start einbauen um eine Aussagekräftigere Fehlermeldung auszuspucken.

@TimeWalker75a
Have you tried ik8fanGUI?
If not, can you try it? (here are some instructions to get it to work under Win7 x64: I8kfangui and Windows 7 x64 Solved)

I had a short look at the sourcecode of i8kfanGUI and I found out it accesses the fan via SMBIOS.
NBFC currently accesses the EC only via LPC Bus (low level).
Maybe setting the fan speed via SMBIOS does not interfere with DELLDIAG?
 
ik8fanGUI does not suport PWM Fans(4pin) like the fan in the Hell Precision M4400
 
Grantig schrieb:
@pommesfritz
Wars der Dienst "Windows Verwlatungsinstrumentation" bzw. WMI.
NBFC nutzt nämlich WMI um das Notebook Modell auszulesen.

Wenn du mir bestätigen könntest, das es daran gescheitert ist, könnte ich nen extra Check beim Start einbauen um eine Aussagekräftigere Fehlermeldung auszuspucken.

ja, der wars!
 
Ist es möglich mehr Auswahl bezüglich Configs zu finden da ich keines von Dell fand und nicht weiss was ich da selber einstellen könnte? Zwar wurde mit einem Biosupdate das Verhalten meines Vostro 3750 gebessert aber da dürfte etwas mehr möglich sein unter Beachtung der Temps versteht sich.
 
Hallo,

ich muss ehrlich sagen, dass es echt toll ist, was du auf die Beine gestellt hast. Ich hatte es schon vor einiger Zeit benutzt, aber da lief es noch nicht so, aber jetzt ist es einfach nur TOP!

Ich besitze das UX32VD.

Bei Gelegenheit, werd ich dir mal den einen oder anderen 10€ spenden, jedoch muss ich das dann erst mit Mami und Papi klären, tjaja, so ist das, wenn man noch nicht 18 ist :(

Auf jeden Fall ein großes Lob an dich, halt daran fest und mach weiter.


Und damit noch eine gute Nacht :)
 
pommesfritz schrieb:
ich habe gerade versucht, NBFC für das Lenovo Yoga 13 auszuprobieren, da auch das im Idle Modus viel zu laut ist.

Ich hab mich schon im Dezember tagelang damit beschäftigt, aber leider nichts geschafft. Wünsche dir viel Erfolg!
 
skyywtk schrieb:
Ich hab mich schon im Dezember tagelang damit beschäftigt, aber leider nichts geschafft. Wünsche dir viel Erfolg!

Habe es heute 3 Stunden lang versucht - leider ohne Erfolg.
Was waren deine Probleme?
Ich habe es nichtmal geschafft die richtigen Register im EC zu finden. Allgemein haben sich da ein drittel aller Werte jede Sekunde geändert. Als ich die CPU dann unter Last gesetzt habe und der Lüfter aufdrehte konnte ich leider kein Register erkennen was damit zusammenhängt.
Ich hab sowas aber auch noch nie gemacht.

Bist du weiter gekommen?

Da mein Widerrufsrecht abläuft habe ich mein Yoga nun zurückgeschickt, kann es also nicht weiter testen. Wenn hier jemand eine Lösung für das Yoga 13 gefunden hat, so wäre ich sehr daran interessiert, denn dann würde ich mir es wieder kaufen. Mit dem lauten Lüfter aber nicht.
 
Es tut mir leid, ich spreche kein Deutsch.

I have done analysis of UX32VD DSDT table and managed to find some extra information that may be interesting for fan control. It should be the same for whole Zenbook series and will probably be similar to most Asus models made in last 3-4 years. Please have a look at my post here:
http://forum.notebookreview.com/asus/705656-fan-control-asus-prime-ux31-ux31a-ux32a-ux32vd.html
And also here:
http://forum.notebookreview.com/asus/687758-asus-ux32a-fan-goes-off-off-21.html#post9073025

I am using Linux and I haven't tried NBFC, but I hope you will find some of my findings helpful!
 
@Milkryor
Danke für das Lob, freut mich dass NBFC dir weiterhilft :)

@akron1980
Alle vorhandenen Configs die mir bekannt sind, sind im Startpost verlinkt.
Mehr gibts z.Z. leider nicht.

@prikolchik
Thank you very much for your great work. I read your posts with great interest.
Unfortunately NBFC is not capable of calling ACPI methods, but still I found some information (especially in the datasheet you linked) that could be useful to improve the NBFC configs for Asus notebooks:

Fan1 Configuration (FAN1CNF) register offset: 0x10
Fan2 Configuration (FAN2CNF) register offset: 0x11



@Zenbook Nutzer
Es wäre nett wen jemand mit einem Zenbook folgendes testen könnte:



  1. [*]NBFC oder andere Programme die versuchen den Lüfter zu steuern schließen
    [*]Mit RW beim Register 0x10 Bit 7 auf 1 setzen (wenn man in RW auf ein Register doppelklickt lassen sich auch einzelne Bits manipulieren - per doppelklick auf ein Bit kann man es kippen)
    [*]In Register 0x97 einen niedrigen Wert schreiben und schauen ob die Drehzahl gehalten wird, oder ob die "SmartAuto" Steuerung einspringt
    [*]Falls 3. nicht funktioniert, in register 0x02 verschiedene Werte schreiben und schauen ob der Lüfter darauf reagiert und die Drehzahl hält.
    [*]Wichtig! Nach diesem Test Register 0x10 wieder auf 0 setzen, damit die "SmartAuto" Lüftersteuerung wieder aktiviert wird.

Sorry, habe da was falsch interpretiert (bzw. zu unaufmerksam gelesen), bitte nicht die besagten Schritte ausführen.

Wer mehr dazu erfahren will, kann sich gerne das IT8510E_TE_G_V0.7.2.pdf aus meinem Skydrive laden (im Ordner Zenbook) und sich folgende Punkte ansehen:
  • 7.11.4.3 PWM Duty Cycle Register 0 to 7(DCRi) (S. 222)
  • 7.11.4.8 Fan 1 Configuration Register (FAN1CNF) (S. 225)
 
Zuletzt bearbeitet:
Grantig schrieb:
@prikolchik
Thank you very much for your great work. I read your posts with great interest.
Unfortunately NBFC is not capable of calling ACPI methods

I don't know how easy it is to add ACPI support in NBFC, but you should seriously consider it. That could give us a much higher degree of flexibility when it comes to controlling the fan on some laptops, especially on ASUS.

Grantig schrieb:
Fan1 Configuration (FAN1CNF) register offset: 0x10
Fan2 Configuration (FAN2CNF) register offset: 0x11
NO! This is NOT the case! Read below on explanation

Grantig schrieb:
@Zenbook Nutzer
Es wäre nett wen jemand mit einem Zenbook folgendes testen könnte:

  1. NBFC oder andere Programme die versuchen den Lüfter zu steuern schließen
  2. Mit RW beim Register 0x10 Bit 7 auf 1 setzen (wenn man in RW auf ein Register doppelklickt lassen sich auch einzelne Bits manipulieren - per doppelklick auf ein Bit kann man es kippen)
  3. In Register 0x97 einen niedrigen Wert schreiben und schauen ob die Drehzahl gehalten wird, oder ob die "SmartAuto" Steuerung einspringt
  4. Falls 3. nicht funktioniert, in register 0x02 verschiedene Werte schreiben und schauen ob der Lüfter darauf reagiert und die Drehzahl hält.
  5. Wichtig! Nach diesem Test Register 0x10 wieder auf 0 setzen, damit die "SmartAuto" Lüftersteuerung wieder aktiviert wird.

Wer mehr dazu erfahren will, kann sich gerne das IT8510E_TE_G_V0.7.2.pdf aus meinem Skydrive laden (im Ordner Zenbook) und sich folgende Punkte ansehen:
  • 7.11.4.3 PWM Duty Cycle Register 0 to 7(DCRi) (S. 222)
  • 7.11.4.8 Fan 1 Configuration Register (FAN1CNF) (S. 225)
WARNING! DO NOT DO THIS! You have misunderstood the datasheet. Here is a quote from my post on notebookreview.com:

Say I want to find out which mode the Fan1 is in. I look at the datasheet on page 225 under "7.11.4.8 Fan 1 Configuration Register (FAN1CNF)" you can see it is at offet of 0x10 with the base address of 0x1800 (from page 221), therefore we need to read the memory at 0x1800 + 0x10 = 0x1810
So the 0x10 address on page 225 is actually 0x1810 and this address is NOT in the ACPI accessible Embedded Controller memory that NBFC works with. In other words, modifying 0x10 byte in ACPI EC address space will lead to unknown behaviour, but it certainly will not be controlling the fan mode!

That datasheet described "automatic" fan control using the logic built into the embedded controller. After invesigating, I found that ASUS does not use that logic as it is all set to default values and does not change if you control the fan by other means.
-------------------
What you could add is GPU temperature reporting for Zenbooks (not sure if you already had that) and also proper fan speed display in RPM. You can find the fan speed easily like this: http://forum.notebookreview.com/asu...rime-ux31-ux31a-ux32a-ux32vd.html#post9073954

Also, if you do want to manually control the fans and don't want to use the ACPI, then you can use system I/O to do that. I have taken the ACPI code (from DSDT table) and converted into C equivalent as a proof of concept. It works perfectly on Linux!
Code:
http://pastebin.com/Hp2pWeyL

The basic idea is that it uses system I/O to write to Embedded Controller Scratch RAM (address 0x521 and 0x522) to set the fan mode. I think there must be a much simpler way to access Scratch RAM on the Embedded Controller.

The problem is that ACPI uses the same I/O ports while my program (linked above) may be running and that could lead to unidentified behaviour (it did so on my machine when I was testing it, which is why I do not recommend anyone to use it). The only way to get around that is (as far as I know) to aquire the ACPI mutex MU4T as it is used in the original ACPI code that comes with my UX32VD specifically to make sure system I/O is accessed only one point at a time. However, if you know of a way to access EC memory that is outside of ACPI embedded controller 0x00-0xFF address range, then please let me know!

If you want to implement system I/O support in NBFC, then this link is extremely helpful: http://stackoverflow.com/questions/485448/programmatically-access-cpu-fan-on-a-laptop-windows

Not sure if this is even useful for you, but thought it would be interesting.

Also, if you want you can easily add fan control support for many Acer laptops by looking at this C code:
Code:
http://lxr.free-electrons.com/source/drivers/platform/x86/acerhdf.c
You can find the appropriate EC bytes for fan control, etc.
 
Zuletzt bearbeitet:
pommesfritz schrieb:
Habe es heute 3 Stunden lang versucht - leider ohne Erfolg.
Was waren deine Probleme?
Ich habe es nichtmal geschafft die richtigen Register im EC zu finden. Allgemein haben sich da ein drittel aller Werte jede Sekunde geändert. Als ich die CPU dann unter Last gesetzt habe und der Lüfter aufdrehte konnte ich leider kein Register erkennen was damit zusammenhängt.
Ich hab sowas aber auch noch nie gemacht.

Bist du weiter gekommen?

Konnte ein paar Register ausfindig machen, die für die Temperatur zuständig sind. Wenn man die ändert, ändert sich auch die Temperaturanzeige z.b. in HW Monitor. Für die Lüfter hab ich dort jedoch auch nix gefunden.
In ca. 2 Wochen kommt aber ein Softwareupdate von Lenovo bzgl. Lüfter, mal sehn wie viel das bringen wird.
 
Zurück
Oben