€•âÒŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ-/translations/zh_CN/hwmon/abituguru-datasheet”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/zh_TW/hwmon/abituguru-datasheet”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/it_IT/hwmon/abituguru-datasheet”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/ja_JP/hwmon/abituguru-datasheet”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/ko_KR/hwmon/abituguru-datasheet”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/pt_BR/hwmon/abituguru-datasheet”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/sp_SP/hwmon/abituguru-datasheet”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒuGuru datasheet”h]”hŒuGuru datasheet”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒG/var/lib/git/docbuild/linux/Documentation/hwmon/abituguru-datasheet.rst”h´KubhŒ paragraph”“”)�”}”(hX+First of all, what I know about uGuru is no fact based on any help, hints or datasheet from Abit. The data I have got on uGuru have I assembled through my weak knowledge in "backwards engineering". And just for the record, you may have noticed uGuru isn't a chip developed by Abit, as they claim it to be. It's really just a microprocessor (uC) created by Winbond (W83L950D). And no, reading the manual for this specific uC or mailing Winbond for help won't give any useful data about uGuru, as it is the program inside the uC that is responding to calls.”h]”hX5First of all, what I know about uGuru is no fact based on any help, hints or datasheet from Abit. The data I have got on uGuru have I assembled through my weak knowledge in “backwards engineeringâ€�. And just for the record, you may have noticed uGuru isn’t a chip developed by Abit, as they claim it to be. It’s really just a microprocessor (uC) created by Winbond (W83L950D). And no, reading the manual for this specific uC or mailing Winbond for help won’t give any useful data about uGuru, as it is the program inside the uC that is responding to calls.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ.Olle Sandberg , 2005-05-25”h]”(hŒOlle Sandberg <”…”�”}”(hhÛh²hh³Nh´NubhŒ reference”“”)�”}”(hŒollebull@gmail.com”h]”hŒollebull@gmail.com”…”�”}”(hhåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:ollebull@gmail.com”uh1hãhhÛubhŒ >, 2005-05-25”…”�”}”(hhÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hXËOriginal version by Olle Sandberg who did the heavy lifting of the initial reverse engineering. This version has been almost fully rewritten for clarity and extended with write support and info on more databanks, the write support is once again reverse engineered by Olle the additional databanks have been reverse engineered by me. I would like to express my thanks to Olle, this document and the Linux driver could not have been written without his efforts.”h]”hXËOriginal version by Olle Sandberg who did the heavy lifting of the initial reverse engineering. This version has been almost fully rewritten for clarity and extended with write support and info on more databanks, the write support is once again reverse engineered by Olle the additional databanks have been reverse engineered by me. I would like to express my thanks to Olle, this document and the Linux driver could not have been written without his efforts.”…”�”}”(hhÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ�Note: because of the lack of specs only the sensors part of the uGuru is described here and not the CPU / RAM / etc voltage & frequency control.”h]”hŒ�Note: because of the lack of specs only the sensors part of the uGuru is described here and not the CPU / RAM / etc voltage & frequency control.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ0Hans de Goede , 28-01-2006”h]”(hŒHans de Goede <”…”�”}”(hjh²hh³Nh´Nubhä)�”}”(hŒj.w.r.degoede@hhs.nl”h]”hŒj.w.r.degoede@hhs.nl”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:j.w.r.degoede@hhs.nl”uh1hãhjubhŒ >, 28-01-2006”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Detection”h]”hŒ Detection”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj=h²hh³hÊh´KubhÌ)�”}”(hX'As far as known the uGuru is always placed at and using the (ISA) I/O-ports 0xE0 and 0xE4, so we don't have to scan any port-range, just check what the two ports are holding for detection. We will refer to 0xE0 as CMD (command-port) and 0xE4 as DATA because Abit refers to them with these names.”h]”hX)As far as known the uGuru is always placed at and using the (ISA) I/O-ports 0xE0 and 0xE4, so we don’t have to scan any port-range, just check what the two ports are holding for detection. We will refer to 0xE0 as CMD (command-port) and 0xE4 as DATA because Abit refers to them with these names.”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K!hj=h²hubhÌ)�”}”(hX#If DATA holds 0x00 or 0x08 and CMD holds 0x00 or 0xAC a uGuru could be present. We have to check for two different values at data-port, because after a reboot uGuru will hold 0x00 here, but if the driver is removed and later on attached again data-port will hold 0x08, more about this later.”h]”hX#If DATA holds 0x00 or 0x08 and CMD holds 0x00 or 0xAC a uGuru could be present. We have to check for two different values at data-port, because after a reboot uGuru will hold 0x00 here, but if the driver is removed and later on attached again data-port will hold 0x08, more about this later.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K&hj=h²hubhÌ)�”}”(hXAAfter wider testing of the Linux kernel driver some variants of the uGuru have turned up which will hold 0x00 instead of 0xAC at the CMD port, thus we also have to test CMD for two different values. On these uGuru's DATA will initially hold 0x09 and will only hold 0x08 after reading CMD first, so CMD must be read first!”h]”hXCAfter wider testing of the Linux kernel driver some variants of the uGuru have turned up which will hold 0x00 instead of 0xAC at the CMD port, thus we also have to test CMD for two different values. On these uGuru’s DATA will initially hold 0x09 and will only hold 0x08 after reading CMD first, so CMD must be read first!”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K+hj=h²hubhÌ)�”}”(hŒ]To be really sure a uGuru is present a test read of one or more register sets should be done.”h]”hŒ]To be really sure a uGuru is present a test read of one or more register sets should be done.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hj=h²hubeh}”(h]”Œ detection”ah ]”h"]”Œ detection”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒReading / Writing”h]”hŒReading / Writing”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjŽh²hh³hÊh´K6ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Addressing”h]”hŒ Addressing”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjŸh²hh³hÊh´K9ubhÌ)�”}”(hŒÌThe uGuru has a number of different addressing levels. The first addressing level we will call banks. A bank holds data for one or more sensors. The data in a bank for a sensor is one or more bytes large.”h]”hŒÌThe uGuru has a number of different addressing levels. The first addressing level we will call banks. A bank holds data for one or more sensors. The data in a bank for a sensor is one or more bytes large.”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K;hjŸh²hubhÌ)�”}”(hŒÛThe number of bytes is fixed for a given bank, you should always read or write that many bytes, reading / writing more will fail, the results when writing less then the number of bytes for a given bank are undetermined.”h]”hŒÛThe number of bytes is fixed for a given bank, you should always read or write that many bytes, reading / writing more will fail, the results when writing less then the number of bytes for a given bank are undetermined.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K?hjŸh²hubhÌ)�”}”(hŒ�See below for all known bank addresses, numbers of sensors in that bank, number of bytes data per sensor and contents/meaning of those bytes.”h]”hŒ�See below for all known bank addresses, numbers of sensors in that bank, number of bytes data per sensor and contents/meaning of those bytes.”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KChjŸh²hubhÌ)�”}”(hŒèAlthough both this document and the kernel driver have kept the sensor terminology for the addressing within a bank this is not 100% correct, in bank 0x24 for example the addressing within the bank selects a PWM output not a sensor.”h]”hŒèAlthough both this document and the kernel driver have kept the sensor terminology for the addressing within a bank this is not 100% correct, in bank 0x24 for example the addressing within the bank selects a PWM output not a sensor.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KFhjŸh²hubhÌ)�”}”(hX0Notice that some banks have both a read and a write address this is how the uGuru determines if a read from or a write to the bank is taking place, thus when reading you should always use the read address and when writing the write address. The write address is always one (1) more than the read address.”h]”hX0Notice that some banks have both a read and a write address this is how the uGuru determines if a read from or a write to the bank is taking place, thus when reading you should always use the read address and when writing the write address. The write address is always one (1) more than the read address.”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KKhjŸh²hubeh}”(h]”Œ addressing”ah ]”h"]”Œ addressing”ah$]”h&]”uh1hµhjŽh²hh³hÊh´K9ubh¶)�”}”(hhh]”(h»)�”}”(hŒ uGuru ready”h]”hŒ uGuru ready”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjþh²hh³hÊh´KRubhÌ)�”}”(hŒ\Before you can read from or write to the uGuru you must first put the uGuru in "ready" mode.”h]”hŒ`Before you can read from or write to the uGuru you must first put the uGuru in “readyâ€� mode.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KThjþh²hubhÌ)�”}”(hŒŠTo put the uGuru in ready mode first write 0x00 to DATA and then wait for DATA to hold 0x09, DATA should read 0x09 within 250 read cycles.”h]”hŒŠTo put the uGuru in ready mode first write 0x00 to DATA and then wait for DATA to hold 0x09, DATA should read 0x09 within 250 read cycles.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KWhjþh²hubhÌ)�”}”(hŒÃNext CMD _must_ be read and should hold 0xAC, usually CMD will hold 0xAC the first read but sometimes it takes a while before CMD holds 0xAC and thus it has to be read a number of times (max 50).”h]”hŒÃNext CMD _must_ be read and should hold 0xAC, usually CMD will hold 0xAC the first read but sometimes it takes a while before CMD holds 0xAC and thus it has to be read a number of times (max 50).”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KZhjþh²hubhÌ)�”}”(hX5After reading CMD, DATA should hold 0x08 which means that the uGuru is ready for input. As above DATA will usually hold 0x08 the first read but not always. This step can be skipped, but it is undetermined what happens if the uGuru has not yet reported 0x08 at DATA and you proceed with writing a bank address.”h]”hX5After reading CMD, DATA should hold 0x08 which means that the uGuru is ready for input. As above DATA will usually hold 0x08 the first read but not always. This step can be skipped, but it is undetermined what happens if the uGuru has not yet reported 0x08 at DATA and you proceed with writing a bank address.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K^hjþh²hubeh}”(h]”Œ uguru-ready”ah ]”h"]”Œ uguru ready”ah$]”h&]”uh1hµhjŽh²hh³hÊh´KRubh¶)�”}”(hhh]”(h»)�”}”(hŒ.Sending bank and sensor addresses to the uGuru”h]”hŒ.Sending bank and sensor addresses to the uGuru”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjOh²hh³hÊh´KeubhÌ)�”}”(hŒ—First the uGuru must be in "ready" mode as described above, DATA should hold 0x08 indicating that the uGuru wants input, in this case the bank address.”h]”hŒ›First the uGuru must be in “readyâ€� mode as described above, DATA should hold 0x08 indicating that the uGuru wants input, in this case the bank address.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KghjOh²hubhÌ)�”}”(hŒ´Next write the bank address to DATA. After the bank address has been written wait for to DATA to hold 0x08 again indicating that it wants / is ready for more input (max 250 reads).”h]”hŒ´Next write the bank address to DATA. After the bank address has been written wait for to DATA to hold 0x08 again indicating that it wants / is ready for more input (max 250 reads).”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KjhjOh²hubhÌ)�”}”(hŒ;Once DATA holds 0x08 again write the sensor address to CMD.”h]”hŒ;Once DATA holds 0x08 again write the sensor address to CMD.”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KnhjOh²hubeh}”(h]”Œ.sending-bank-and-sensor-addresses-to-the-uguru”ah ]”h"]”Œ.sending bank and sensor addresses to the uguru”ah$]”h&]”uh1hµhjŽh²hh³hÊh´Keubh¶)�”}”(hhh]”(h»)�”}”(hŒReading”h]”hŒReading”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj’h²hh³hÊh´KrubhÌ)�”}”(hŒ÷First send the bank and sensor addresses as described above. Then for each byte of data you want to read wait for DATA to hold 0x01 which indicates that the uGuru is ready to be read (max 250 reads) and once DATA holds 0x01 read the byte from CMD.”h]”hŒ÷First send the bank and sensor addresses as described above. Then for each byte of data you want to read wait for DATA to hold 0x01 which indicates that the uGuru is ready to be read (max 250 reads) and once DATA holds 0x01 read the byte from CMD.”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthj’h²hubhÌ)�”}”(hŒªOnce all bytes have been read data will hold 0x09, but there is no reason to test for this. Notice that the number of bytes is bank address dependent see above and below.”h]”hŒªOnce all bytes have been read data will hold 0x09, but there is no reason to test for this. Notice that the number of bytes is bank address dependent see above and below.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kyhj’h²hubhÌ)�”}”(hXAfter completing a successful read it is advised to put the uGuru back in ready mode, so that it is ready for the next read / write cycle. This way if your program / driver is unloaded and later loaded again the detection algorithm described above will still work.”h]”hXAfter completing a successful read it is advised to put the uGuru back in ready mode, so that it is ready for the next read / write cycle. This way if your program / driver is unloaded and later loaded again the detection algorithm described above will still work.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K}hj’h²hubeh}”(h]”Œreading”ah ]”h"]”Œreading”ah$]”h&]”uh1hµhjŽh²hh³hÊh´Krubh¶)�”}”(hhh]”(h»)�”}”(hŒWriting”h]”hŒWriting”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÕh²hh³hÊh´K…ubhÌ)�”}”(hŒúFirst send the bank and sensor addresses as described above. Then for each byte of data you want to write wait for DATA to hold 0x00 which indicates that the uGuru is ready to be written (max 250 reads) and once DATA holds 0x00 write the byte to CMD.”h]”hŒúFirst send the bank and sensor addresses as described above. Then for each byte of data you want to write wait for DATA to hold 0x00 which indicates that the uGuru is ready to be written (max 250 reads) and once DATA holds 0x00 write the byte to CMD.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‡hjÕh²hubhÌ)�”}”(hŒpOnce all bytes have been written wait for DATA to hold 0x01 (max 250 reads) don't ask why this is the way it is.”h]”hŒrOnce all bytes have been written wait for DATA to hold 0x01 (max 250 reads) don’t ask why this is the way it is.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŒhjÕh²hubhÌ)�”}”(hŒ6Once DATA holds 0x01 read CMD it should hold 0xAC now.”h]”hŒ6Once DATA holds 0x01 read CMD it should hold 0xAC now.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjÕh²hubhÌ)�”}”(hX After completing a successful write it is advised to put the uGuru back in ready mode, so that it is ready for the next read / write cycle. This way if your program / driver is unloaded and later loaded again the detection algorithm described above will still work.”h]”hX After completing a successful write it is advised to put the uGuru back in ready mode, so that it is ready for the next read / write cycle. This way if your program / driver is unloaded and later loaded again the detection algorithm described above will still work.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‘hjÕh²hubeh}”(h]”Œwriting”ah ]”h"]”Œwriting”ah$]”h&]”uh1hµhjŽh²hh³hÊh´K…ubh¶)�”}”(hhh]”(h»)�”}”(hŒGotchas”h]”hŒGotchas”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj&h²hh³hÊh´K˜ubhÌ)�”}”(hXÛAfter wider testing of the Linux kernel driver some variants of the uGuru have turned up which do not hold 0x08 at DATA within 250 reads after writing the bank address. With these versions this happens quite frequent, using larger timeouts doesn't help, they just go offline for a second or 2, doing some internal calibration or whatever. Your code should be prepared to handle this and in case of no response in this specific case just goto sleep for a while and then retry.”h]”hXÝAfter wider testing of the Linux kernel driver some variants of the uGuru have turned up which do not hold 0x08 at DATA within 250 reads after writing the bank address. With these versions this happens quite frequent, using larger timeouts doesn’t help, they just go offline for a second or 2, doing some internal calibration or whatever. Your code should be prepared to handle this and in case of no response in this specific case just goto sleep for a while and then retry.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kšhj&h²hubeh}”(h]”Œgotchas”ah ]”h"]”Œgotchas”ah$]”h&]”uh1hµhjŽh²hh³hÊh´K˜ubeh}”(h]”Œreading-writing”ah ]”h"]”Œreading / writing”ah$]”h&]”uh1hµhh·h²hh³hÊh´K6ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Address Map”h]”hŒ Address Map”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjUh²hh³hÊh´K¤ubh¶)�”}”(hhh]”(h»)�”}”(hŒBank 0x20 Alarms (R)”h]”hŒBank 0x20 Alarms (R)”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjfh²hh³hÊh´K§ubhÌ)�”}”(hŒ}This bank contains 0 sensors, iow the sensor address is ignored (but must be written) just use 0. Bank 0x20 contains 3 bytes:”h]”hŒ}This bank contains 0 sensors, iow the sensor address is ignored (but must be written) just use 0. Bank 0x20 contains 3 bytes:”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¨hjfh²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ{Byte 0: This byte holds the alarm flags for sensor 0-7 of Sensor Bank1, with bit 0 corresponding to sensor 0, 1 to 1, etc. ”h]”(hŒterm”“”)�”}”(hŒByte 0:”h]”hŒByte 0:”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´K­hjŒubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒrThis byte holds the alarm flags for sensor 0-7 of Sensor Bank1, with bit 0 corresponding to sensor 0, 1 to 1, etc.”h]”hŒrThis byte holds the alarm flags for sensor 0-7 of Sensor Bank1, with bit 0 corresponding to sensor 0, 1 to 1, etc.”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¬hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´K­hj‡ubj‹)�”}”(hŒ|Byte 1: This byte holds the alarm flags for sensor 8-15 of Sensor Bank1, with bit 0 corresponding to sensor 8, 1 to 9, etc. ”h]”(j‘)�”}”(hŒByte 1:”h]”hŒByte 1:”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´K±hj¿ubj¡)�”}”(hhh]”hÌ)�”}”(hŒsThis byte holds the alarm flags for sensor 8-15 of Sensor Bank1, with bit 0 corresponding to sensor 8, 1 to 9, etc.”h]”hŒsThis byte holds the alarm flags for sensor 8-15 of Sensor Bank1, with bit 0 corresponding to sensor 8, 1 to 9, etc.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K°hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´K±hj‡h²hubj‹)�”}”(hŒ|Byte 2: This byte holds the alarm flags for sensor 0-5 of Sensor Bank2, with bit 0 corresponding to sensor 0, 1 to 1, etc. ”h]”(j‘)�”}”(hŒByte 2:”h]”hŒByte 2:”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´K¶hjîubj¡)�”}”(hhh]”hÌ)�”}”(hŒrThis byte holds the alarm flags for sensor 0-5 of Sensor Bank2, with bit 0 corresponding to sensor 0, 1 to 1, etc.”h]”hŒrThis byte holds the alarm flags for sensor 0-5 of Sensor Bank2, with bit 0 corresponding to sensor 0, 1 to 1, etc.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K´hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´K¶hj‡h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjfh²hh³hÊh´Nubeh}”(h]”Œbank-0x20-alarms-r”ah ]”h"]”Œbank 0x20 alarms (r)”ah$]”h&]”uh1hµhjUh²hh³hÊh´K§ubh¶)�”}”(hhh]”(h»)�”}”(hŒ,Bank 0x21 Sensor Bank1 Values / Readings (R)”h]”hŒ,Bank 0x21 Sensor Bank1 Values / Readings (R)”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj+h²hh³hÊh´K¹ubhÌ)�”}”(hŒŽThis bank contains 16 sensors, for each sensor it contains 1 byte. So far the following sensors are known to be available on all motherboards:”h]”hŒŽThis bank contains 16 sensors, for each sensor it contains 1 byte. So far the following sensors are known to be available on all motherboards:”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kºhj+h²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒSensor 0 CPU temp”h]”hÌ)�”}”(hjSh]”hŒSensor 0 CPU temp”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K½hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjLh²hh³hÊh´NubjP)�”}”(hŒSensor 1 SYS temp”h]”hÌ)�”}”(hjjh]”hŒSensor 1 SYS temp”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¾hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjLh²hh³hÊh´NubjP)�”}”(hŒSensor 3 CPU core volt”h]”hÌ)�”}”(hj�h]”hŒSensor 3 CPU core volt”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¿hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjLh²hh³hÊh´NubjP)�”}”(hŒSensor 4 DDR volt”h]”hÌ)�”}”(hj˜h]”hŒSensor 4 DDR volt”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÀhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjLh²hh³hÊh´NubjP)�”}”(hŒSensor 10 DDR Vtt volt”h]”hÌ)�”}”(hj¯h]”hŒSensor 10 DDR Vtt volt”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÁhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjLh²hh³hÊh´NubjP)�”}”(hŒSensor 15 PWM temp ”h]”hÌ)�”}”(hŒSensor 15 PWM temp”h]”hŒSensor 15 PWM temp”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÂhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjLh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jJh³hÊh´K½hj+h²hubj†)�”}”(hhh]”j‹)�”}”(hXByte 0: This byte holds the reading from the sensor. Sensors in Bank1 can be both volt and temp sensors, this is motherboard specific. The uGuru however does seem to know (be programmed with) what kindoff sensor is attached see Sensor Bank1 Settings description. ”h]”(j‘)�”}”(hŒByte 0:”h]”hŒByte 0:”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´KÈhjçubj¡)�”}”(hhh]”hÌ)�”}”(hŒþThis byte holds the reading from the sensor. Sensors in Bank1 can be both volt and temp sensors, this is motherboard specific. The uGuru however does seem to know (be programmed with) what kindoff sensor is attached see Sensor Bank1 Settings description.”h]”hŒþThis byte holds the reading from the sensor. Sensors in Bank1 can be both volt and temp sensors, this is motherboard specific. The uGuru however does seem to know (be programmed with) what kindoff sensor is attached see Sensor Bank1 Settings description.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÅhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´KÈhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j…hj+h²hh³hÊh´NubhÌ)�”}”(hXuVolt sensors use a linear scale, a reading 0 corresponds with 0 volt and a reading of 255 with 3494 mV. The sensors for higher voltages however are connected through a division circuit. The currently known division circuits in use result in ranges of: 0-4361mV, 0-6248mV or 0-14510mV. 3.3 volt sources use the 0-4361mV range, 5 volt the 0-6248mV and 12 volt the 0-14510mV .”h]”hXuVolt sensors use a linear scale, a reading 0 corresponds with 0 volt and a reading of 255 with 3494 mV. The sensors for higher voltages however are connected through a division circuit. The currently known division circuits in use result in ranges of: 0-4361mV, 0-6248mV or 0-14510mV. 3.3 volt sources use the 0-4361mV range, 5 volt the 0-6248mV and 12 volt the 0-14510mV .”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÊhj+h²hubhÌ)�”}”(hŒ’Temp sensors also use a linear scale, a reading of 0 corresponds with 0 degree Celsius and a reading of 255 with a reading of 255 degrees Celsius.”h]”hŒ’Temp sensors also use a linear scale, a reading of 0 corresponds with 0 degree Celsius and a reading of 255 with a reading of 255 degrees Celsius.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÐhj+h²hubeh}”(h]”Œ(bank-0x21-sensor-bank1-values-readings-r”ah ]”h"]”Œ,bank 0x21 sensor bank1 values / readings (r)”ah$]”h&]”uh1hµhjUh²hh³hÊh´K¹ubh¶)�”}”(hhh]”(h»)�”}”(hŒKBank 0x22 Sensor Bank1 Settings (R) and Bank 0x23 Sensor Bank1 Settings (W)”h]”hŒKBank 0x22 Sensor Bank1 Settings (R) and Bank 0x23 Sensor Bank1 Settings (W)”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj@h²hh³hÊh´KÕubhÌ)�”}”(hŒ©Those banks contain 16 sensors, for each sensor it contains 3 bytes. Each set of 3 bytes contains the settings for the sensor with the same sensor address in Bank 0x21 .”h]”hŒ©Those banks contain 16 sensors, for each sensor it contains 3 bytes. Each set of 3 bytes contains the settings for the sensor with the same sensor address in Bank 0x21 .”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K×hj@h²hubj†)�”}”(hhh]”(j‹)�”}”(hŒVByte 0: Alarm behaviour for the selected sensor. A 1 enables the described behaviour. ”h]”(j‘)�”}”(hŒByte 0:”h]”hŒByte 0:”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´KÝhjbubj¡)�”}”(hhh]”hÌ)�”}”(hŒMAlarm behaviour for the selected sensor. A 1 enables the described behaviour.”h]”hŒMAlarm behaviour for the selected sensor. A 1 enables the described behaviour.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÜhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´KÝhj_ubj‹)�”}”(hŒWBit 0: Give an alarm if measured temp is over the warning threshold (RW) [1]_ ”h]”(j‘)�”}”(hŒBit 0:”h]”hŒBit 0:”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Kàhj‘ubj¡)�”}”(hhh]”hÌ)�”}”(hŒOGive an alarm if measured temp is over the warning threshold (RW) [1]_”h]”(hŒKGive an alarm if measured temp is over the warning threshold (RW) ”…”�”}”(hj¦h²hh³Nh´NubhŒfootnote_reference”“”)�”}”(hŒ[1]_”h]”hŒ1”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œrefid”Œid4”Œdocname”Œhwmon/abituguru-datasheet”uh1j®hj¦Œresolved”Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kàhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Kàhj_h²hubj‹)�”}”(hŒWBit 1: Give an alarm if measured volt is over the max threshold (RW) [2]_ ”h]”(j‘)�”}”(hŒBit 1:”h]”hŒBit 1:”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´KãhjÖubj¡)�”}”(hhh]”hÌ)�”}”(hŒOGive an alarm if measured volt is over the max threshold (RW) [2]_”h]”(hŒKGive an alarm if measured volt is over the max threshold (RW) ”…”�”}”(hjëh²hh³Nh´Nubj¯)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”j¿Œid5”jÁjÂuh1j®hjëjÃKubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kãhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Kãhj_h²hubj‹)�”}”(hŒWBit 2: Give an alarm if measured volt is under the min threshold (RW) [2]_ ”h]”(j‘)�”}”(hŒBit 2:”h]”hŒBit 2:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Kæhjubj¡)�”}”(hhh]”hÌ)�”}”(hŒOGive an alarm if measured volt is under the min threshold (RW) [2]_”h]”(hŒKGive an alarm if measured volt is under the min threshold (RW) ”…”�”}”(hj*h²hh³Nh´Nubj¯)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”j¿jjÁjÂuh1j®hj*jÃKubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kæhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Kæhj_h²hubj‹)�”}”(hŒRBit 3: Beep if alarm (RW) ”h]”(j‘)�”}”(hŒBit 3:”h]”hŒBit 3:”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´KéhjSubj¡)�”}”(hhh]”hÌ)�”}”(hŒJBeep if alarm (RW)”h]”hŒJBeep if alarm (RW)”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kéhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Kéhj_h²hubj‹)�”}”(hŒQBit 4: 1 if alarm cause measured temp is over the warning threshold (R) ”h]”(j‘)�”}”(hŒBit 4:”h]”hŒBit 4:”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Kìhj‚ubj¡)�”}”(hhh]”hÌ)�”}”(hŒI1 if alarm cause measured temp is over the warning threshold (R)”h]”hŒI1 if alarm cause measured temp is over the warning threshold (R)”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kìhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Kìhj_h²hubj‹)�”}”(hŒQBit 5: 1 if alarm cause measured volt is over the max threshold (R) ”h]”(j‘)�”}”(hŒBit 5:”h]”hŒBit 5:”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Kïhj±ubj¡)�”}”(hhh]”hÌ)�”}”(hŒI1 if alarm cause measured volt is over the max threshold (R)”h]”hŒI1 if alarm cause measured volt is over the max threshold (R)”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KïhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Kïhj_h²hubj‹)�”}”(hŒQBit 6: 1 if alarm cause measured volt is under the min threshold (R) ”h]”(j‘)�”}”(hŒBit 6:”h]”hŒBit 6:”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Kòhjàubj¡)�”}”(hhh]”hÌ)�”}”(hŒI1 if alarm cause measured volt is under the min threshold (R)”h]”hŒI1 if alarm cause measured volt is under the min threshold (R)”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kòhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Kòhj_h²hubj‹)�”}”(hŒ�Bit 7: - Volt sensor: Shutdown if alarm persist for more than 4 seconds (RW) - Temp sensor: Shutdown if temp is over the shutdown threshold (RW) ”h]”(j‘)�”}”(hŒBit 7:”h]”hŒBit 7:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Köhjubj¡)�”}”(hhh]”jK)�”}”(hhh]”(jP)�”}”(hŒHVolt sensor: Shutdown if alarm persist for more than 4 seconds (RW)”h]”hÌ)�”}”(hj)h]”hŒHVolt sensor: Shutdown if alarm persist for more than 4 seconds (RW)”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kõhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj$ubjP)�”}”(hŒITemp sensor: Shutdown if temp is over the shutdown threshold (RW) ”h]”hÌ)�”}”(hŒHTemp sensor: Shutdown if temp is over the shutdown threshold (RW)”h]”hŒHTemp sensor: Shutdown if temp is over the shutdown threshold (RW)”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Köhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj$ubeh}”(h]”h ]”h"]”h$]”h&]”jâjãuh1jJh³hÊh´Kõhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Köhj_h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj@h²hh³hÊh´NubhŒfootnote”“”)�”}”(hŒIThis bit is only honored/used by the uGuru if a temp sensor is connected ”h]”(hŒlabel”“”)�”}”(hŒ1”h]”hŒ1”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjpubhÌ)�”}”(hŒHThis bit is only honored/used by the uGuru if a temp sensor is connected”h]”hŒHThis bit is only honored/used by the uGuru if a temp sensor is connected”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Køhjpubeh}”(h]”jÀah ]”h"]”Œ1”ah$]”h&]”jºajÁjÂuh1jnh³hÊh´Køhj@h²hjÃKubjo)�”}”(hŒìThis bit is only honored/used by the uGuru if a volt sensor is connected Note with some trickery this can be used to find out what kinda sensor is detected see the Linux kernel driver for an example with many comments on how todo this. ”h]”(ju)�”}”(hŒ2”h]”hŒ2”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj™ubhÌ)�”}”(hŒëThis bit is only honored/used by the uGuru if a volt sensor is connected Note with some trickery this can be used to find out what kinda sensor is detected see the Linux kernel driver for an example with many comments on how todo this.”h]”hŒëThis bit is only honored/used by the uGuru if a volt sensor is connected Note with some trickery this can be used to find out what kinda sensor is detected see the Linux kernel driver for an example with many comments on how todo this.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kúhj™ubeh}”(h]”jah ]”h"]”Œ2”ah$]”h&]”(jýj<ejÁjÂuh1jnh³hÊh´Kúhj@h²hjÃKubj†)�”}”(hhh]”(j‹)�”}”(hŒvByte 1: - Temp sensor: warning threshold (scale as bank 0x21) - Volt sensor: min threshold (scale as bank 0x21) ”h]”(j‘)�”}”(hŒByte 1:”h]”hŒByte 1:”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´MhjÃubj¡)�”}”(hhh]”jK)�”}”(hhh]”(jP)�”}”(hŒ4Temp sensor: warning threshold (scale as bank 0x21)”h]”hÌ)�”}”(hjÝh]”hŒ4Temp sensor: warning threshold (scale as bank 0x21)”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjØubjP)�”}”(hŒ5Volt sensor: min threshold (scale as bank 0x21) ”h]”hÌ)�”}”(hŒ4Volt sensor: min threshold (scale as bank 0x21)”h]”hŒ4Volt sensor: min threshold (scale as bank 0x21)”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjØubeh}”(h]”h ]”h"]”h$]”h&]”jâjãuh1jJh³hÊh´MhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´MhjÀubj‹)�”}”(hŒwByte 2: - Temp sensor: shutdown threshold (scale as bank 0x21) - Volt sensor: max threshold (scale as bank 0x21) ”h]”(j‘)�”}”(hŒByte 2:”h]”hŒByte 2:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Mhjubj¡)�”}”(hhh]”jK)�”}”(hhh]”(jP)�”}”(hŒ4Temp sensor: shutdown threshold (scale as bank 0x21)”h]”hÌ)�”}”(hj6h]”hŒ4Temp sensor: shutdown threshold (scale as bank 0x21)”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj1ubjP)�”}”(hŒ6Volt sensor: max threshold (scale as bank 0x21) ”h]”hÌ)�”}”(hŒ4Volt sensor: max threshold (scale as bank 0x21)”h]”hŒ4Volt sensor: max threshold (scale as bank 0x21)”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj1ubeh}”(h]”h ]”h"]”h$]”h&]”jâjãuh1jJh³hÊh´Mhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´MhjÀh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj@h²hh³Nh´Nubeh}”(h]”ŒGbank-0x22-sensor-bank1-settings-r-and-bank-0x23-sensor-bank1-settings-w”ah ]”h"]”ŒKbank 0x22 sensor bank1 settings (r) and bank 0x23 sensor bank1 settings (w)”ah$]”h&]”uh1hµhjUh²hh³hÊh´KÕubh¶)�”}”(hhh]”(h»)�”}”(hŒKBank 0x24 PWM outputs for FAN's (R) and Bank 0x25 PWM outputs for FAN's (W)”h]”hŒOBank 0x24 PWM outputs for FAN’s (R) and Bank 0x25 PWM outputs for FAN’s (W)”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjƒh²hh³hÊh´M ubj†)�”}”(hhh]”(j‹)�”}”(hŒÝThose banks contain 3 "sensors", for each sensor it contains 5 bytes. - Sensor 0 usually controls the CPU fan - Sensor 1 usually controls the NB (or chipset for single chip) fan - Sensor 2 usually controls the System fan ”h]”(j‘)�”}”(hŒEThose banks contain 3 "sensors", for each sensor it contains 5 bytes.”h]”hŒIThose banks contain 3 “sensorsâ€�, for each sensor it contains 5 bytes.”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Mhj—ubj¡)�”}”(hhh]”jK)�”}”(hhh]”(jP)�”}”(hŒ%Sensor 0 usually controls the CPU fan”h]”hÌ)�”}”(hj±h]”hŒ%Sensor 0 usually controls the CPU fan”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj¬ubjP)�”}”(hŒASensor 1 usually controls the NB (or chipset for single chip) fan”h]”hÌ)�”}”(hjÈh]”hŒASensor 1 usually controls the NB (or chipset for single chip) fan”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj¬ubjP)�”}”(hŒ)Sensor 2 usually controls the System fan ”h]”hÌ)�”}”(hŒ(Sensor 2 usually controls the System fan”h]”hŒ(Sensor 2 usually controls the System fan”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”jâjãuh1jJh³hÊh´M hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Mhj”ubj‹)�”}”(hŒ„Byte 0: Flag 0x80 to enable control, Fan runs at 100% when disabled. low nibble (temp)sensor address at bank 0x21 used for control. ”h]”(j‘)�”}”(hŒByte 0:”h]”hŒByte 0:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Mhj ubj¡)�”}”(hhh]”hÌ)�”}”(hŒ{Flag 0x80 to enable control, Fan runs at 100% when disabled. low nibble (temp)sensor address at bank 0x21 used for control.”h]”hŒ{Flag 0x80 to enable control, Fan runs at 100% when disabled. low nibble (temp)sensor address at bank 0x21 used for control.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Mhj”h²hubj‹)�”}”(hŒ}Byte 1: 0-255 = 0-12v (linear), specify voltage at which fan will rotate when under low threshold temp (specified in byte 3) ”h]”(j‘)�”}”(hŒByte 1:”h]”hŒByte 1:”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Mhj6 ubj¡)�”}”(hhh]”hÌ)�”}”(hŒt0-255 = 0-12v (linear), specify voltage at which fan will rotate when under low threshold temp (specified in byte 3)”h]”hŒt0-255 = 0-12v (linear), specify voltage at which fan will rotate when under low threshold temp (specified in byte 3)”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjH ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Mhj”h²hubj‹)�”}”(hŒ~Byte 2: 0-255 = 0-12v (linear), specify voltage at which fan will rotate when above high threshold temp (specified in byte 4) ”h]”(j‘)�”}”(hŒByte 2:”h]”hŒByte 2:”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Mhje ubj¡)�”}”(hhh]”hÌ)�”}”(hŒu0-255 = 0-12v (linear), specify voltage at which fan will rotate when above high threshold temp (specified in byte 4)”h]”hŒu0-255 = 0-12v (linear), specify voltage at which fan will rotate when above high threshold temp (specified in byte 4)”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hje ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Mhj”h²hubj‹)�”}”(hŒ1Byte 3: Low threshold temp (scale as bank 0x21) ”h]”(j‘)�”}”(hŒByte 3:”h]”hŒByte 3:”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Mhj” ubj¡)�”}”(hhh]”hÌ)�”}”(hŒ(Low threshold temp (scale as bank 0x21)”h]”hŒ(Low threshold temp (scale as bank 0x21)”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj” ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´Mhj”h²hubj‹)�”}”(hŒ2byte 4: High threshold temp (scale as bank 0x21) ”h]”(j‘)�”}”(hŒbyte 4:”h]”hŒbyte 4:”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´M!hjà ubj¡)�”}”(hhh]”hÌ)�”}”(hŒ(High threshold temp (scale as bank 0x21)”h]”hŒ(High threshold temp (scale as bank 0x21)”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjà ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´M!hj”h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjƒh²hh³Nh´Nubeh}”(h]”ŒGbank-0x24-pwm-outputs-for-fan-s-r-and-bank-0x25-pwm-outputs-for-fan-s-w”ah ]”h"]”ŒKbank 0x24 pwm outputs for fan's (r) and bank 0x25 pwm outputs for fan's (w)”ah$]”h&]”uh1hµhjUh²hh³hÊh´M ubh¶)�”}”(hhh]”(h»)�”}”(hŒ-Bank 0x26 Sensors Bank2 Values / Readings (R)”h]”hŒ-Bank 0x26 Sensors Bank2 Values / Readings (R)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´M$ubhÌ)�”}”(hŒIThis bank contains 6 sensors (AFAIK), for each sensor it contains 1 byte.”h]”hŒIThis bank contains 6 sensors (AFAIK), for each sensor it contains 1 byte.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M&hj h²hubj†)�”}”(hhh]”(j‹)�”}”(hŒ¶So far the following sensors are known to be available on all motherboards: - Sensor 0: CPU fan speed - Sensor 1: NB (or chipset for single chip) fan speed - Sensor 2: SYS fan speed ”h]”(j‘)�”}”(hŒKSo far the following sensors are known to be available on all motherboards:”h]”hŒKSo far the following sensors are known to be available on all motherboards:”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´M+hj" ubj¡)�”}”(hhh]”jK)�”}”(hhh]”(jP)�”}”(hŒSensor 0: CPU fan speed”h]”hÌ)�”}”(hj< h]”hŒSensor 0: CPU fan speed”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M)hj: ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj7 ubjP)�”}”(hŒ3Sensor 1: NB (or chipset for single chip) fan speed”h]”hÌ)�”}”(hjS h]”hŒ3Sensor 1: NB (or chipset for single chip) fan speed”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M*hjQ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj7 ubjP)�”}”(hŒSensor 2: SYS fan speed ”h]”hÌ)�”}”(hŒSensor 2: SYS fan speed”h]”hŒSensor 2: SYS fan speed”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M+hjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj7 ubeh}”(h]”h ]”h"]”h$]”h&]”jâjãuh1jJh³hÊh´M)hj4 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj" ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´M+hj ubj‹)�”}”(hŒOByte 0: This byte holds the reading from the sensor. 0-255 = 0-15300 (linear) ”h]”(j‘)�”}”(hŒByte 0:”h]”hŒByte 0:”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´M/hj’ ubj¡)�”}”(hhh]”hÌ)�”}”(hŒEThis byte holds the reading from the sensor. 0-255 = 0-15300 (linear)”h]”hŒEThis byte holds the reading from the sensor. 0-255 = 0-15300 (linear)”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M.hj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj’ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´M/hj h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj h²hh³Nh´Nubeh}”(h]”Œ)bank-0x26-sensors-bank2-values-readings-r”ah ]”h"]”Œ-bank 0x26 sensors bank2 values / readings (r)”ah$]”h&]”uh1hµhjUh²hh³hÊh´M$ubh¶)�”}”(hhh]”(h»)�”}”(hŒMBank 0x27 Sensors Bank2 Settings (R) and Bank 0x28 Sensors Bank2 Settings (W)”h]”hŒMBank 0x27 Sensors Bank2 Settings (R) and Bank 0x28 Sensors Bank2 Settings (W)”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÏ h²hh³hÊh´M2ubhÌ)�”}”(hŒKThose banks contain 6 sensors (AFAIK), for each sensor it contains 2 bytes.”h]”hŒKThose banks contain 6 sensors (AFAIK), for each sensor it contains 2 bytes.”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M4hjÏ h²hubj†)�”}”(hhh]”(j‹)�”}”(hŒVByte 0: Alarm behaviour for the selected sensor. A 1 enables the described behaviour. ”h]”(j‘)�”}”(hŒByte 0:”h]”hŒByte 0:”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´M7hjñ ubj¡)�”}”(hhh]”hÌ)�”}”(hŒMAlarm behaviour for the selected sensor. A 1 enables the described behaviour.”h]”hŒMAlarm behaviour for the selected sensor. A 1 enables the described behaviour.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M7hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjñ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´M7hjî ubj‹)�”}”(hŒJBit 0: Give an alarm if measured rpm is under the min threshold (RW) ”h]”(j‘)�”}”(hŒBit 0:”h]”hŒBit 0:”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´M:hj ubj¡)�”}”(hhh]”hÌ)�”}”(hŒBGive an alarm if measured rpm is under the min threshold (RW)”h]”hŒBGive an alarm if measured rpm is under the min threshold (RW)”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M:hj2 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´M:hjî h²hubj‹)�”}”(hŒJBit 3: Beep if alarm (RW) ”h]”(j‘)�”}”(hŒBit 3:”h]”hŒBit 3:”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´M=hjO ubj¡)�”}”(hhh]”hÌ)�”}”(hŒBBeep if alarm (RW)”h]”hŒBBeep if alarm (RW)”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M=hja ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´M=hjî h²hubj‹)�”}”(hŒJBit 7: Shutdown if alarm persist for more than 4 seconds (RW) ”h]”(j‘)�”}”(hŒBit 7:”h]”hŒBit 7:”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´M@hj~ ubj¡)�”}”(hhh]”hÌ)�”}”(hŒBShutdown if alarm persist for more than 4 seconds (RW)”h]”hŒBShutdown if alarm persist for more than 4 seconds (RW)”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M@hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj~ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´M@hjî h²hubj‹)�”}”(hŒ,Byte 1: min threshold (scale as bank 0x26) ”h]”(j‘)�”}”(hŒByte 1:”h]”hŒByte 1:”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´MDhj­ ubj¡)�”}”(hhh]”hÌ)�”}”(hŒ"min threshold (scale as bank 0x26)”h]”hŒ"min threshold (scale as bank 0x26)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MChj¿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj­ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÊh´MDhjî h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjÏ h²hh³hÊh´Nubeh}”(h]”ŒIbank-0x27-sensors-bank2-settings-r-and-bank-0x28-sensors-bank2-settings-w”ah ]”h"]”ŒMbank 0x27 sensors bank2 settings (r) and bank 0x28 sensors bank2 settings (w)”ah$]”h&]”uh1hµhjUh²hh³hÊh´M2ubeh}”(h]”Œ address-map”ah ]”h"]”Œ address map”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¤ubh¶)�”}”(hhh]”(h»)�”}”(hŒWarning for the adventurous”h]”hŒWarning for the adventurous”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjò h²hh³hÊh´MGubhÌ)�”}”(hXcA word of caution to those who want to experiment and see if they can figure the voltage / clock programming out, I tried reading and only reading banks 0-0x30 with the reading code used for the sensor banks (0x20-0x28) and this resulted in a _permanent_ reprogramming of the voltages, luckily I had the sensors part configured so that it would shutdown my system on any out of spec voltages which probably safed my computer (after a reboot I managed to immediately enter the bios and reload the defaults). This probably means that the read/write cycle for the non sensor part is different from the sensor part.”h]”hXcA word of caution to those who want to experiment and see if they can figure the voltage / clock programming out, I tried reading and only reading banks 0-0x30 with the reading code used for the sensor banks (0x20-0x28) and this resulted in a _permanent_ reprogramming of the voltages, luckily I had the sensors part configured so that it would shutdown my system on any out of spec voltages which probably safed my computer (after a reboot I managed to immediately enter the bios and reload the defaults). This probably means that the read/write cycle for the non sensor part is different from the sensor part.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MIhjò h²hubeh}”(h]”Œwarning-for-the-adventurous”ah ]”h"]”Œwarning for the adventurous”ah$]”h&]”uh1hµhh·h²hh³hÊh´MGubeh}”(h]”Œuguru-datasheet”ah ]”h"]”Œuguru datasheet”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jD Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œ1”]”j°aŒ2”]”(jój2euŒrefids”}”Œnameids”}”(j j j‹jˆjRjOjûjøjLjIj�jŒjÒjÏj#j jJjGjï jì j(j%j=j:j€j}j–jÀj½jjý jú jÌ jÉ jç jä j j uŒ nametypes”}”(j ‰j‹‰jR‰jû‰jL‰j�‰jÒ‰j#‰jJ‰jï ‰j(‰j=‰j€‰j–ˆj½ˆjý ‰jÌ ‰jç ‰j ‰uh}”(j h·jˆj=jOjŽjøjŸjIjþjŒjOjÏj’j jÕjGj&jì jUj%jfj:j+j}j@jºj°jýjój<j2jÀjpjj™jú jƒjÉ j jä jÏ j jò uŒ footnote_refs”}”(j„ ]”j°aj† ]”(jój2euŒ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”(jpj™eŒ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jR Ks…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.