17ebd8b66SMauro Carvalho Chehab===============
27ebd8b66SMauro Carvalho ChehabuGuru datasheet
37ebd8b66SMauro Carvalho Chehab===============
47ebd8b66SMauro Carvalho Chehab
57ebd8b66SMauro Carvalho ChehabFirst of all, what I know about uGuru is no fact based on any help, hints or
67ebd8b66SMauro Carvalho Chehabdatasheet from Abit. The data I have got on uGuru have I assembled through
77ebd8b66SMauro Carvalho Chehabmy weak knowledge in "backwards engineering".
87ebd8b66SMauro Carvalho ChehabAnd just for the record, you may have noticed uGuru isn't a chip developed by
97ebd8b66SMauro Carvalho ChehabAbit, as they claim it to be. It's really just an microprocessor (uC) created by
107ebd8b66SMauro Carvalho ChehabWinbond (W83L950D). And no, reading the manual for this specific uC or
117ebd8b66SMauro Carvalho Chehabmailing  Windbond for help won't give any useful data about uGuru, as it is
127ebd8b66SMauro Carvalho Chehabthe program inside the uC that is responding to calls.
137ebd8b66SMauro Carvalho Chehab
147ebd8b66SMauro Carvalho ChehabOlle Sandberg <ollebull@gmail.com>, 2005-05-25
157ebd8b66SMauro Carvalho Chehab
167ebd8b66SMauro Carvalho Chehab
177ebd8b66SMauro Carvalho ChehabOriginal version by Olle Sandberg who did the heavy lifting of the initial
187ebd8b66SMauro Carvalho Chehabreverse engineering. This version has been almost fully rewritten for clarity
197ebd8b66SMauro Carvalho Chehaband extended with write support and info on more databanks, the write support
207ebd8b66SMauro Carvalho Chehabis once again reverse engineered by Olle the additional databanks have been
217ebd8b66SMauro Carvalho Chehabreverse engineered by me. I would like to express my thanks to Olle, this
227ebd8b66SMauro Carvalho Chehabdocument and the Linux driver could not have been written without his efforts.
237ebd8b66SMauro Carvalho Chehab
247ebd8b66SMauro Carvalho ChehabNote: because of the lack of specs only the sensors part of the uGuru is
257ebd8b66SMauro Carvalho Chehabdescribed here and not the CPU / RAM / etc voltage & frequency control.
267ebd8b66SMauro Carvalho Chehab
277ebd8b66SMauro Carvalho ChehabHans de Goede <j.w.r.degoede@hhs.nl>, 28-01-2006
287ebd8b66SMauro Carvalho Chehab
297ebd8b66SMauro Carvalho Chehab
307ebd8b66SMauro Carvalho ChehabDetection
317ebd8b66SMauro Carvalho Chehab=========
327ebd8b66SMauro Carvalho Chehab
337ebd8b66SMauro Carvalho ChehabAs far as known the uGuru is always placed at and using the (ISA) I/O-ports
347ebd8b66SMauro Carvalho Chehab0xE0 and 0xE4, so we don't have to scan any port-range, just check what the two
357ebd8b66SMauro Carvalho Chehabports are holding for detection. We will refer to 0xE0 as CMD (command-port)
367ebd8b66SMauro Carvalho Chehaband 0xE4 as DATA because Abit refers to them with these names.
377ebd8b66SMauro Carvalho Chehab
387ebd8b66SMauro Carvalho ChehabIf DATA holds 0x00 or 0x08 and CMD holds 0x00 or 0xAC an uGuru could be
397ebd8b66SMauro Carvalho Chehabpresent. We have to check for two different values at data-port, because
407ebd8b66SMauro Carvalho Chehabafter a reboot uGuru will hold 0x00 here, but if the driver is removed and
417ebd8b66SMauro Carvalho Chehablater on attached again data-port will hold 0x08, more about this later.
427ebd8b66SMauro Carvalho Chehab
437ebd8b66SMauro Carvalho ChehabAfter wider testing of the Linux kernel driver some variants of the uGuru have
447ebd8b66SMauro Carvalho Chehabturned up which will hold 0x00 instead of 0xAC at the CMD port, thus we also
457ebd8b66SMauro Carvalho Chehabhave to test CMD for two different values. On these uGuru's DATA will initially
467ebd8b66SMauro Carvalho Chehabhold 0x09 and will only hold 0x08 after reading CMD first, so CMD must be read
477ebd8b66SMauro Carvalho Chehabfirst!
487ebd8b66SMauro Carvalho Chehab
497ebd8b66SMauro Carvalho ChehabTo be really sure an uGuru is present a test read of one or more register
507ebd8b66SMauro Carvalho Chehabsets should be done.
517ebd8b66SMauro Carvalho Chehab
527ebd8b66SMauro Carvalho Chehab
537ebd8b66SMauro Carvalho ChehabReading / Writing
547ebd8b66SMauro Carvalho Chehab=================
557ebd8b66SMauro Carvalho Chehab
567ebd8b66SMauro Carvalho ChehabAddressing
577ebd8b66SMauro Carvalho Chehab----------
587ebd8b66SMauro Carvalho Chehab
597ebd8b66SMauro Carvalho ChehabThe uGuru has a number of different addressing levels. The first addressing
607ebd8b66SMauro Carvalho Chehablevel we will call banks. A bank holds data for one or more sensors. The data
617ebd8b66SMauro Carvalho Chehabin a bank for a sensor is one or more bytes large.
627ebd8b66SMauro Carvalho Chehab
637ebd8b66SMauro Carvalho ChehabThe number of bytes is fixed for a given bank, you should always read or write
647ebd8b66SMauro Carvalho Chehabthat many bytes, reading / writing more will fail, the results when writing
657ebd8b66SMauro Carvalho Chehabless then the number of bytes for a given bank are undetermined.
667ebd8b66SMauro Carvalho Chehab
677ebd8b66SMauro Carvalho ChehabSee below for all known bank addresses, numbers of sensors in that bank,
687ebd8b66SMauro Carvalho Chehabnumber of bytes data per sensor and contents/meaning of those bytes.
697ebd8b66SMauro Carvalho Chehab
707ebd8b66SMauro Carvalho ChehabAlthough both this document and the kernel driver have kept the sensor
714776b9e3SBrandon Jiangterminology for the addressing within a bank this is not 100% correct, in
727ebd8b66SMauro Carvalho Chehabbank 0x24 for example the addressing within the bank selects a PWM output not
737ebd8b66SMauro Carvalho Chehaba sensor.
747ebd8b66SMauro Carvalho Chehab
757ebd8b66SMauro Carvalho ChehabNotice that some banks have both a read and a write address this is how the
767ebd8b66SMauro Carvalho ChehabuGuru determines if a read from or a write to the bank is taking place, thus
777ebd8b66SMauro Carvalho Chehabwhen reading you should always use the read address and when writing the
787ebd8b66SMauro Carvalho Chehabwrite address. The write address is always one (1) more than the read address.
797ebd8b66SMauro Carvalho Chehab
807ebd8b66SMauro Carvalho Chehab
817ebd8b66SMauro Carvalho ChehabuGuru ready
827ebd8b66SMauro Carvalho Chehab-----------
837ebd8b66SMauro Carvalho Chehab
847ebd8b66SMauro Carvalho ChehabBefore you can read from or write to the uGuru you must first put the uGuru
857ebd8b66SMauro Carvalho Chehabin "ready" mode.
867ebd8b66SMauro Carvalho Chehab
877ebd8b66SMauro Carvalho ChehabTo put the uGuru in ready mode first write 0x00 to DATA and then wait for DATA
887ebd8b66SMauro Carvalho Chehabto hold 0x09, DATA should read 0x09 within 250 read cycles.
897ebd8b66SMauro Carvalho Chehab
907ebd8b66SMauro Carvalho ChehabNext CMD _must_ be read and should hold 0xAC, usually CMD will hold 0xAC the
917ebd8b66SMauro Carvalho Chehabfirst read but sometimes it takes a while before CMD holds 0xAC and thus it
927ebd8b66SMauro Carvalho Chehabhas to be read a number of times (max 50).
937ebd8b66SMauro Carvalho Chehab
947ebd8b66SMauro Carvalho ChehabAfter reading CMD, DATA should hold 0x08 which means that the uGuru is ready
957ebd8b66SMauro Carvalho Chehabfor input. As above DATA will usually hold 0x08 the first read but not always.
967ebd8b66SMauro Carvalho ChehabThis step can be skipped, but it is undetermined what happens if the uGuru has
977ebd8b66SMauro Carvalho Chehabnot yet reported 0x08 at DATA and you proceed with writing a bank address.
987ebd8b66SMauro Carvalho Chehab
997ebd8b66SMauro Carvalho Chehab
1007ebd8b66SMauro Carvalho ChehabSending bank and sensor addresses to the uGuru
1017ebd8b66SMauro Carvalho Chehab----------------------------------------------
1027ebd8b66SMauro Carvalho Chehab
1037ebd8b66SMauro Carvalho ChehabFirst the uGuru must be in "ready" mode as described above, DATA should hold
1047ebd8b66SMauro Carvalho Chehab0x08 indicating that the uGuru wants input, in this case the bank address.
1057ebd8b66SMauro Carvalho Chehab
1067ebd8b66SMauro Carvalho ChehabNext write the bank address to DATA. After the bank address has been written
1077ebd8b66SMauro Carvalho Chehabwait for to DATA to hold 0x08 again indicating that it wants / is ready for
1087ebd8b66SMauro Carvalho Chehabmore input (max 250 reads).
1097ebd8b66SMauro Carvalho Chehab
1107ebd8b66SMauro Carvalho ChehabOnce DATA holds 0x08 again write the sensor address to CMD.
1117ebd8b66SMauro Carvalho Chehab
1127ebd8b66SMauro Carvalho Chehab
1137ebd8b66SMauro Carvalho ChehabReading
1147ebd8b66SMauro Carvalho Chehab-------
1157ebd8b66SMauro Carvalho Chehab
1167ebd8b66SMauro Carvalho ChehabFirst send the bank and sensor addresses as described above.
1177ebd8b66SMauro Carvalho ChehabThen for each byte of data you want to read wait for DATA to hold 0x01
1187ebd8b66SMauro Carvalho Chehabwhich indicates that the uGuru is ready to be read (max 250 reads) and once
1197ebd8b66SMauro Carvalho ChehabDATA holds 0x01 read the byte from CMD.
1207ebd8b66SMauro Carvalho Chehab
1217ebd8b66SMauro Carvalho ChehabOnce all bytes have been read data will hold 0x09, but there is no reason to
1227ebd8b66SMauro Carvalho Chehabtest for this. Notice that the number of bytes is bank address dependent see
1237ebd8b66SMauro Carvalho Chehababove and below.
1247ebd8b66SMauro Carvalho Chehab
1257ebd8b66SMauro Carvalho ChehabAfter completing a successful read it is advised to put the uGuru back in
1267ebd8b66SMauro Carvalho Chehabready mode, so that it is ready for the next read / write cycle. This way
1277ebd8b66SMauro Carvalho Chehabif your program / driver is unloaded and later loaded again the detection
1287ebd8b66SMauro Carvalho Chehabalgorithm described above will still work.
1297ebd8b66SMauro Carvalho Chehab
1307ebd8b66SMauro Carvalho Chehab
1317ebd8b66SMauro Carvalho Chehab
1327ebd8b66SMauro Carvalho ChehabWriting
1337ebd8b66SMauro Carvalho Chehab-------
1347ebd8b66SMauro Carvalho Chehab
1357ebd8b66SMauro Carvalho ChehabFirst send the bank and sensor addresses as described above.
1367ebd8b66SMauro Carvalho ChehabThen for each byte of data you want to write wait for DATA to hold 0x00
1377ebd8b66SMauro Carvalho Chehabwhich indicates that the uGuru is ready to be written (max 250 reads) and
1387ebd8b66SMauro Carvalho Chehabonce DATA holds 0x00 write the byte to CMD.
1397ebd8b66SMauro Carvalho Chehab
1407ebd8b66SMauro Carvalho ChehabOnce all bytes have been written wait for DATA to hold 0x01 (max 250 reads)
1417ebd8b66SMauro Carvalho Chehabdon't ask why this is the way it is.
1427ebd8b66SMauro Carvalho Chehab
1437ebd8b66SMauro Carvalho ChehabOnce DATA holds 0x01 read CMD it should hold 0xAC now.
1447ebd8b66SMauro Carvalho Chehab
1457ebd8b66SMauro Carvalho ChehabAfter completing a successful write it is advised to put the uGuru back in
1467ebd8b66SMauro Carvalho Chehabready mode, so that it is ready for the next read / write cycle. This way
1477ebd8b66SMauro Carvalho Chehabif your program / driver is unloaded and later loaded again the detection
1487ebd8b66SMauro Carvalho Chehabalgorithm described above will still work.
1497ebd8b66SMauro Carvalho Chehab
1507ebd8b66SMauro Carvalho Chehab
1517ebd8b66SMauro Carvalho ChehabGotchas
1527ebd8b66SMauro Carvalho Chehab-------
1537ebd8b66SMauro Carvalho Chehab
1547ebd8b66SMauro Carvalho ChehabAfter wider testing of the Linux kernel driver some variants of the uGuru have
1557ebd8b66SMauro Carvalho Chehabturned up which do not hold 0x08 at DATA within 250 reads after writing the
1567ebd8b66SMauro Carvalho Chehabbank address. With these versions this happens quite frequent, using larger
1577ebd8b66SMauro Carvalho Chehabtimeouts doesn't help, they just go offline for a second or 2, doing some
1584776b9e3SBrandon Jianginternal calibration or whatever. Your code should be prepared to handle
1597ebd8b66SMauro Carvalho Chehabthis and in case of no response in this specific case just goto sleep for a
1607ebd8b66SMauro Carvalho Chehabwhile and then retry.
1617ebd8b66SMauro Carvalho Chehab
1627ebd8b66SMauro Carvalho Chehab
1637ebd8b66SMauro Carvalho ChehabAddress Map
1647ebd8b66SMauro Carvalho Chehab===========
1657ebd8b66SMauro Carvalho Chehab
1667ebd8b66SMauro Carvalho ChehabBank 0x20 Alarms (R)
1677ebd8b66SMauro Carvalho Chehab--------------------
1687ebd8b66SMauro Carvalho ChehabThis bank contains 0 sensors, iow the sensor address is ignored (but must be
1697ebd8b66SMauro Carvalho Chehabwritten) just use 0. Bank 0x20 contains 3 bytes:
1707ebd8b66SMauro Carvalho Chehab
1717ebd8b66SMauro Carvalho ChehabByte 0:
1727ebd8b66SMauro Carvalho Chehab  This byte holds the alarm flags for sensor 0-7 of Sensor Bank1, with bit 0
1737ebd8b66SMauro Carvalho Chehab  corresponding to sensor 0, 1 to 1, etc.
1747ebd8b66SMauro Carvalho Chehab
1757ebd8b66SMauro Carvalho ChehabByte 1:
1767ebd8b66SMauro Carvalho Chehab  This byte holds the alarm flags for sensor 8-15 of Sensor Bank1, with bit 0
1777ebd8b66SMauro Carvalho Chehab  corresponding to sensor 8, 1 to 9, etc.
1787ebd8b66SMauro Carvalho Chehab
1797ebd8b66SMauro Carvalho ChehabByte 2:
1807ebd8b66SMauro Carvalho Chehab  This byte holds the alarm flags for sensor 0-5 of Sensor Bank2, with bit 0
1817ebd8b66SMauro Carvalho Chehab  corresponding to sensor 0, 1 to 1, etc.
1827ebd8b66SMauro Carvalho Chehab
1837ebd8b66SMauro Carvalho Chehab
1847ebd8b66SMauro Carvalho ChehabBank 0x21 Sensor Bank1 Values / Readings (R)
1857ebd8b66SMauro Carvalho Chehab--------------------------------------------
1867ebd8b66SMauro Carvalho ChehabThis bank contains 16 sensors, for each sensor it contains 1 byte.
1877ebd8b66SMauro Carvalho ChehabSo far the following sensors are known to be available on all motherboards:
1887ebd8b66SMauro Carvalho Chehab
1897ebd8b66SMauro Carvalho Chehab- Sensor  0 CPU temp
1907ebd8b66SMauro Carvalho Chehab- Sensor  1 SYS temp
1917ebd8b66SMauro Carvalho Chehab- Sensor  3 CPU core volt
1927ebd8b66SMauro Carvalho Chehab- Sensor  4 DDR volt
1937ebd8b66SMauro Carvalho Chehab- Sensor 10 DDR Vtt volt
1947ebd8b66SMauro Carvalho Chehab- Sensor 15 PWM temp
1957ebd8b66SMauro Carvalho Chehab
1967ebd8b66SMauro Carvalho ChehabByte 0:
1977ebd8b66SMauro Carvalho Chehab  This byte holds the reading from the sensor. Sensors in Bank1 can be both
1987ebd8b66SMauro Carvalho Chehab  volt and temp sensors, this is motherboard specific. The uGuru however does
1997ebd8b66SMauro Carvalho Chehab  seem to know (be programmed with) what kindoff sensor is attached see Sensor
2007ebd8b66SMauro Carvalho Chehab  Bank1 Settings description.
2017ebd8b66SMauro Carvalho Chehab
2027ebd8b66SMauro Carvalho ChehabVolt sensors use a linear scale, a reading 0 corresponds with 0 volt and a
2037ebd8b66SMauro Carvalho Chehabreading of 255 with 3494 mV. The sensors for higher voltages however are
2047ebd8b66SMauro Carvalho Chehabconnected through a division circuit. The currently known division circuits
2057ebd8b66SMauro Carvalho Chehabin use result in ranges of: 0-4361mV, 0-6248mV or 0-14510mV. 3.3 volt sources
2067ebd8b66SMauro Carvalho Chehabuse the 0-4361mV range, 5 volt the 0-6248mV and 12 volt the 0-14510mV .
2077ebd8b66SMauro Carvalho Chehab
2087ebd8b66SMauro Carvalho ChehabTemp sensors also use a linear scale, a reading of 0 corresponds with 0 degree
2097ebd8b66SMauro Carvalho ChehabCelsius and a reading of 255 with a reading of 255 degrees Celsius.
2107ebd8b66SMauro Carvalho Chehab
2117ebd8b66SMauro Carvalho Chehab
2127ebd8b66SMauro Carvalho ChehabBank 0x22 Sensor Bank1 Settings (R) and Bank 0x23 Sensor Bank1 Settings (W)
2137ebd8b66SMauro Carvalho Chehab---------------------------------------------------------------------------
2147ebd8b66SMauro Carvalho Chehab
2157ebd8b66SMauro Carvalho ChehabThose banks contain 16 sensors, for each sensor it contains 3 bytes. Each
2167ebd8b66SMauro Carvalho Chehabset of 3 bytes contains the settings for the sensor with the same sensor
2177ebd8b66SMauro Carvalho Chehabaddress in Bank 0x21 .
2187ebd8b66SMauro Carvalho Chehab
2197ebd8b66SMauro Carvalho ChehabByte 0:
2207ebd8b66SMauro Carvalho Chehab  Alarm behaviour for the selected sensor. A 1 enables the described
2217ebd8b66SMauro Carvalho Chehab  behaviour.
2227ebd8b66SMauro Carvalho Chehab
2237ebd8b66SMauro Carvalho ChehabBit 0:
2247ebd8b66SMauro Carvalho Chehab  Give an alarm if measured temp is over the warning threshold		(RW) [1]_
2257ebd8b66SMauro Carvalho Chehab
2267ebd8b66SMauro Carvalho ChehabBit 1:
2277ebd8b66SMauro Carvalho Chehab  Give an alarm if measured volt is over the max threshold		(RW) [2]_
2287ebd8b66SMauro Carvalho Chehab
2297ebd8b66SMauro Carvalho ChehabBit 2:
2307ebd8b66SMauro Carvalho Chehab  Give an alarm if measured volt is under the min threshold		(RW) [2]_
2317ebd8b66SMauro Carvalho Chehab
2327ebd8b66SMauro Carvalho ChehabBit 3:
2337ebd8b66SMauro Carvalho Chehab  Beep if alarm								(RW)
2347ebd8b66SMauro Carvalho Chehab
2357ebd8b66SMauro Carvalho ChehabBit 4:
2367ebd8b66SMauro Carvalho Chehab  1 if alarm cause measured temp is over the warning threshold		(R)
2377ebd8b66SMauro Carvalho Chehab
2387ebd8b66SMauro Carvalho ChehabBit 5:
2397ebd8b66SMauro Carvalho Chehab  1 if alarm cause measured volt is over the max threshold		(R)
2407ebd8b66SMauro Carvalho Chehab
2417ebd8b66SMauro Carvalho ChehabBit 6:
2427ebd8b66SMauro Carvalho Chehab  1 if alarm cause measured volt is under the min threshold		(R)
2437ebd8b66SMauro Carvalho Chehab
2447ebd8b66SMauro Carvalho ChehabBit 7:
2457ebd8b66SMauro Carvalho Chehab  - Volt sensor: Shutdown if alarm persist for more than 4 seconds	(RW)
2467ebd8b66SMauro Carvalho Chehab  - Temp sensor: Shutdown if temp is over the shutdown threshold	(RW)
2477ebd8b66SMauro Carvalho Chehab
2487ebd8b66SMauro Carvalho Chehab.. [1] This bit is only honored/used by the uGuru if a temp sensor is connected
2497ebd8b66SMauro Carvalho Chehab
2507ebd8b66SMauro Carvalho Chehab.. [2] This bit is only honored/used by the uGuru if a volt sensor is connected
2517ebd8b66SMauro Carvalho Chehab       Note with some trickery this can be used to find out what kinda sensor
2527ebd8b66SMauro Carvalho Chehab       is detected see the Linux kernel driver for an example with many
2537ebd8b66SMauro Carvalho Chehab       comments on how todo this.
2547ebd8b66SMauro Carvalho Chehab
2557ebd8b66SMauro Carvalho ChehabByte 1:
2567ebd8b66SMauro Carvalho Chehab  - Temp sensor: warning threshold  (scale as bank 0x21)
2577ebd8b66SMauro Carvalho Chehab  - Volt sensor: min threshold      (scale as bank 0x21)
2587ebd8b66SMauro Carvalho Chehab
2597ebd8b66SMauro Carvalho ChehabByte 2:
2607ebd8b66SMauro Carvalho Chehab  - Temp sensor: shutdown threshold (scale as bank 0x21)
2617ebd8b66SMauro Carvalho Chehab  - Volt sensor: max threshold      (scale as bank 0x21)
2627ebd8b66SMauro Carvalho Chehab
2637ebd8b66SMauro Carvalho Chehab
2647ebd8b66SMauro Carvalho ChehabBank 0x24 PWM outputs for FAN's (R) and Bank 0x25 PWM outputs for FAN's (W)
2657ebd8b66SMauro Carvalho Chehab---------------------------------------------------------------------------
2667ebd8b66SMauro Carvalho Chehab
2677ebd8b66SMauro Carvalho ChehabThose banks contain 3 "sensors", for each sensor it contains 5 bytes.
2687ebd8b66SMauro Carvalho Chehab  - Sensor 0 usually controls the CPU fan
2697ebd8b66SMauro Carvalho Chehab  - Sensor 1 usually controls the NB (or chipset for single chip) fan
2707ebd8b66SMauro Carvalho Chehab  - Sensor 2 usually controls the System fan
2717ebd8b66SMauro Carvalho Chehab
2727ebd8b66SMauro Carvalho ChehabByte 0:
2737ebd8b66SMauro Carvalho Chehab  Flag 0x80 to enable control, Fan runs at 100% when disabled.
2747ebd8b66SMauro Carvalho Chehab  low nibble (temp)sensor address at bank 0x21 used for control.
2757ebd8b66SMauro Carvalho Chehab
2767ebd8b66SMauro Carvalho ChehabByte 1:
2777ebd8b66SMauro Carvalho Chehab  0-255 = 0-12v (linear), specify voltage at which fan will rotate when under
2787ebd8b66SMauro Carvalho Chehab  low threshold temp (specified in byte 3)
2797ebd8b66SMauro Carvalho Chehab
2807ebd8b66SMauro Carvalho ChehabByte 2:
2817ebd8b66SMauro Carvalho Chehab  0-255 = 0-12v (linear), specify voltage at which fan will rotate when above
2827ebd8b66SMauro Carvalho Chehab  high threshold temp (specified in byte 4)
2837ebd8b66SMauro Carvalho Chehab
2847ebd8b66SMauro Carvalho ChehabByte 3:
2857ebd8b66SMauro Carvalho Chehab  Low threshold temp  (scale as bank 0x21)
2867ebd8b66SMauro Carvalho Chehab
2877ebd8b66SMauro Carvalho Chehabbyte 4:
2887ebd8b66SMauro Carvalho Chehab  High threshold temp (scale as bank 0x21)
2897ebd8b66SMauro Carvalho Chehab
2907ebd8b66SMauro Carvalho Chehab
2917ebd8b66SMauro Carvalho ChehabBank 0x26 Sensors Bank2 Values / Readings (R)
2927ebd8b66SMauro Carvalho Chehab---------------------------------------------
2937ebd8b66SMauro Carvalho Chehab
2947ebd8b66SMauro Carvalho ChehabThis bank contains 6 sensors (AFAIK), for each sensor it contains 1 byte.
2957ebd8b66SMauro Carvalho Chehab
2967ebd8b66SMauro Carvalho ChehabSo far the following sensors are known to be available on all motherboards:
2977ebd8b66SMauro Carvalho Chehab  - Sensor 0: CPU fan speed
2987ebd8b66SMauro Carvalho Chehab  - Sensor 1: NB (or chipset for single chip) fan speed
2997ebd8b66SMauro Carvalho Chehab  - Sensor 2: SYS fan speed
3007ebd8b66SMauro Carvalho Chehab
3017ebd8b66SMauro Carvalho ChehabByte 0:
3027ebd8b66SMauro Carvalho Chehab  This byte holds the reading from the sensor. 0-255 = 0-15300 (linear)
3037ebd8b66SMauro Carvalho Chehab
3047ebd8b66SMauro Carvalho Chehab
3057ebd8b66SMauro Carvalho ChehabBank 0x27 Sensors Bank2 Settings (R) and Bank 0x28 Sensors Bank2 Settings (W)
3067ebd8b66SMauro Carvalho Chehab-----------------------------------------------------------------------------
3077ebd8b66SMauro Carvalho Chehab
3087ebd8b66SMauro Carvalho ChehabThose banks contain 6 sensors (AFAIK), for each sensor it contains 2 bytes.
3097ebd8b66SMauro Carvalho Chehab
3107ebd8b66SMauro Carvalho ChehabByte 0:
3117ebd8b66SMauro Carvalho Chehab  Alarm behaviour for the selected sensor. A 1 enables the described behaviour.
3127ebd8b66SMauro Carvalho Chehab
3137ebd8b66SMauro Carvalho ChehabBit 0:
3147ebd8b66SMauro Carvalho Chehab  Give an alarm if measured rpm is under the min threshold	(RW)
3157ebd8b66SMauro Carvalho Chehab
3167ebd8b66SMauro Carvalho ChehabBit 3:
3177ebd8b66SMauro Carvalho Chehab  Beep if alarm							(RW)
3187ebd8b66SMauro Carvalho Chehab
3197ebd8b66SMauro Carvalho ChehabBit 7:
3207ebd8b66SMauro Carvalho Chehab  Shutdown if alarm persist for more than 4 seconds		(RW)
3217ebd8b66SMauro Carvalho Chehab
3227ebd8b66SMauro Carvalho ChehabByte 1:
3237ebd8b66SMauro Carvalho Chehab  min threshold (scale as bank 0x26)
3247ebd8b66SMauro Carvalho Chehab
3257ebd8b66SMauro Carvalho Chehab
3267ebd8b66SMauro Carvalho ChehabWarning for the adventurous
3277ebd8b66SMauro Carvalho Chehab===========================
3287ebd8b66SMauro Carvalho Chehab
3297ebd8b66SMauro Carvalho ChehabA word of caution to those who want to experiment and see if they can figure
3307ebd8b66SMauro Carvalho Chehabthe voltage / clock programming out, I tried reading and only reading banks
3317ebd8b66SMauro Carvalho Chehab0-0x30 with the reading code used for the sensor banks (0x20-0x28) and this
3327ebd8b66SMauro Carvalho Chehabresulted in a _permanent_ reprogramming of the voltages, luckily I had the
3337ebd8b66SMauro Carvalho Chehabsensors part configured so that it would shutdown my system on any out of spec
3344776b9e3SBrandon Jiangvoltages which probably safed my computer (after a reboot I managed to
3357ebd8b66SMauro Carvalho Chehabimmediately enter the bios and reload the defaults). This probably means that
3367ebd8b66SMauro Carvalho Chehabthe read/write cycle for the non sensor part is different from the sensor part.
337