Primero, hola a todos
Hace ya mucho tiempo que comencé un hilo sobre este tema.... la posibilidad de leer la temperatura de la placa base (motherboard) mediante un programa en C. Por lo que sé no es una simple curiosidad que yo tengo sino que hay bastante gente que le interesa esta información...
Por aquel entonces quería hacer un proyecto para la universidad, ahora que ya estoy trabajando tengo más tiempo para perder en estas cositas, así que lo que fué un proyecto inacabado se ha convertido en un objetivo de pura cabezonería
Bueno, ultimamente he retomado mis indagaciones y parece que he conseguido lo imposible... POR FIN LEO LAS TEMPERATURAS!!!!
Bien, el tema es bastante espeso, así que iré posteando todas mis averiguaciones sobre este hilo, si a los moderadores no les importa.
Ahora mismo estoy peleandome con las lecturas de Voltajes y velocidades de los ventiladores... Iré posteando todo lo que saco.
Antes de que nadie se alegre demasiado he de decir que tan sólo funciona con placas base que tengan el Super IO chip ITE8712... Mirad el manual de la placa base o bajaros algún programa que sondee el hardware de vuestro sistema para comprobar qué tipo de SuperIO chip teneis.
La idea de este hilo es que cada uno vaya haciendo averiguaciones con su propia placa (y su propio IO chip) y así lo que ha empezado siendo una cuestión de cabezonería se convierta en todo un proyecto...
Por internet no hay demasiada información al respecto, así que voy a contar todo lo que he logrado y sobre todo cómo lo he logrado...
Al fin y al cabo compartir es vivir y si puedo arrojar luz sobre este tema tan oscuro pues mejor que mejor...
No tengo todo el tiempo que necesitaría para escribir todo así que voy a ir escribiendo poco a poco en distintos mensajes...
PASOS PREVIOS:
--------------------
- Primero y antes que nada debemos saber un par de cosas sobre cómo funcionan las placas base, sobre todo cómo son capaces de darnos esa información que aparece en la bios en la parte de hardware monitor:
En nuestra placa base hay una serie de sensores montados, miden la temperatura del micro, de la placa, del chipset, miden las revoluciones de los ventiladores y permiten modificar su velocidad mediante PWM (modulación por ancho de pulso), miden las temperaturas que llegan al micro... +5v, -5v, +12v, -12v, +3,3v...
Bueno pues todos estos elementos suelen estar conectados a un chip llamado SuperIO chip, que se encarga de además de realizar estas tareas manejar los puertos serie y paralelo, los infrarojos, lectura de tarjetas de memoria...
Esto es, se encargan de controlar todo lo que es IO (entradas/salidas) de nuestro PC.
- Una vez dicho esto, el segundo paso será conocer el tipo de SuperIO chip que tiene nuestra placa base (si es que lo tiene), hay bastantes marcas y cada marca tiene un monton de modelos distintos:
Ali,ITE,National Semi Conductor (NS), SIS, SMC, Winbond...
Los más conocidos sin duda son los ITE y los Winbond. Si vuestra placa es de cierta calidad seguro que los llevan.
Para poder saber qué tipo de SuperIOchip teneis, lo mejor es o bien leer el manual de vuestra placa o bien bajaros un programa que os lo diga.
Os recomiendo que os bajeis el programa
Speedfan está realizado por un tal Alfredo Milani y es gratuito. Además os servirá para comprobar si el programa que hacemos hace las mediciones correctamente o no.
- Bueno pues los pasos previos están dados.... ahora queda sin duda lo más dificil...
¿¿¿ Cómo se accede a los registros de estos SuperIO chips ???? pues esta es la gran pregunta sin respuesta.... Hasta ahora.
Vale, pues para poder comunicarnos con estos SuperIOchips hace falta usar las instrucciones Inp() y Outp(), que permiten hacer lecturas/escrituras en puertos.
**1er problema, estas instrucciones a partir de windows NT son privilegiadas y tan sólo los programas con un nivel de privilegio adecuado pueden usarlas, así que si estais usando windows NT, 2000, xp la cosa se complica. Pero no pasa nada...
Tan sólo los drivers pueden realizar llamadas a estas instrucciones.
SOLUCION:
Aqui hay varias soluciones...
Necesitamos una dll, que nos permita hacer llamadas a un .sys de nuestro sistema que se encargue de ofrecernos una serie de funciones para lectura/escritura de los puertos.
Yo he encontrado dos, ambas gratuitas siempre y cuando no vayamos a hacer negocio con ellas (como es mi caso).
La primera es la CanIO.dll y CanIO.sys. De CanSOFT, bueno, son canadienses como se nota... Esta dll era la que usaba el
MBM (mother board monitor) creo, un pedazo de programa donde los haya que desgraciadamente ha dejado de ser actualizado.
La librería puede ser descargada de
aqui.
La segunda posibilidad es la que yo he usado finalmente, se trata de una dll llamada io.dll, que se encarga de llamar al io.sys de nuestro sistema y nos ofrece un monton de funciones para lectura/escritura de los puertos.
La podeis descargar de
aqui.
Además esta última cuenta con unos archivos para compilar junto con nuestro programa y que nos facilitan mucho las cosas... están en varios lenguajes....
Bueno, hasta aqui por hoy, que se me hace tarde.
El próximo día hablaré de cómo se inicia esta dll y de cómo se inician las comunicaciones con el SuperIOchip....
Para los que están muy interesados.... deberes para casa!!!!
Buscad y rebuscad por internet las especificaciones de vuestro SuperIOchip, esta es la clave del éxito, no hay más....
Para los que teneis un SuperIO chip de ITE...
aqui os dejo un enlace a los documentos necesarios para conseguir nuestro objetivo. Seguramente que aunque vuestro chip no sea el mismo funcionará de forma parecida...
Por cierto mi placa base es una ASUS A8NSLI DELUXE, si la teneis, ya sabeis que SuperIO chip teneis.
Un saludo.