xref: /linux/Documentation/w1/slaves/w1_therm.rst (revision 34dc1baba215b826e454b8d19e4f24adbeb7d00d)
1======================
2Kernel driver w1_therm
3======================
4
5Supported chips:
6
7  * Maxim ds18*20 based temperature sensors.
8  * Maxim ds1825 based temperature sensors.
9  * GXCAS GX20MH01 temperature sensor.
10  * Maxim MAX31850 thermoelement interface.
11
12Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
13
14
15Description
16-----------
17
18w1_therm provides basic temperature conversion for ds18*20, ds28ea00, GX20MH01
19and MAX31850 devices.
20
21Supported family codes:
22
23====================	====
24W1_THERM_DS18S20	0x10
25W1_THERM_DS1822		0x22
26W1_THERM_DS18B20	0x28
27W1_THERM_DS1825		0x3B
28W1_THERM_DS28EA00	0x42
29====================	====
30
31Support is provided through the sysfs entry ``w1_slave``. Each open and
32read sequence will initiate a temperature conversion, then provide two
33lines of ASCII output. The first line contains the nine hex bytes
34read along with a calculated crc value and YES or NO if it matched.
35If the crc matched the returned values are retained. The second line
36displays the retained values along with a temperature in millidegrees
37Centigrade after t=.
38
39Alternatively, temperature can be read using ``temperature`` sysfs, it
40returns only the temperature in millidegrees Centigrade.
41
42A bulk read of all devices on the bus could be done writing ``trigger``
43to ``therm_bulk_read`` entry at w1_bus_master level. This will
44send the convert command to all devices on the bus, and if parasite
45powered devices are detected on the bus (and strong pullup is enabled
46in the module), it will drive the line high during the longer conversion
47time required by parasited powered device on the line. Reading
48``therm_bulk_read`` will return 0 if no bulk conversion pending,
49-1 if at least one sensor still in conversion, 1 if conversion is complete
50but at least one sensor value has not been read yet. Result temperature is
51then accessed by reading the ``temperature`` entry of each device, which
52may return empty if conversion is still in progress. Note that if a bulk
53read is sent but one sensor is not read immediately, the next access to
54``temperature`` on this device will return the temperature measured at the
55time of issue of the bulk read command (not the current temperature).
56
57A strong pullup will be applied during the conversion if required.
58
59``conv_time`` is used to get current conversion time (read), and
60adjust it (write). A temperature conversion time depends on the device type and
61its current resolution. Default conversion time is set by the driver according
62to the device datasheet. A conversion time for many original device clones
63deviate from datasheet specs. There are three options: 1) manually set the
64correct conversion time by writing a value in milliseconds to ``conv_time``; 2)
65auto measure and set a conversion time by writing ``1`` to
66``conv_time``; 3) use ``features`` to enable poll for conversion
67completion. Options 2, 3 can't be used in parasite power mode. To get back to
68the default conversion time write ``0`` to ``conv_time``.
69
70Writing a resolution value (in bits) to ``w1_slave`` will change the
71precision of the sensor for the next readings. Allowed resolutions are defined by
72the sensor. Resolution is reset when the sensor gets power-cycled.
73
74To store the current resolution in EEPROM, write ``0`` to ``w1_slave``.
75Since the EEPROM has a limited amount of writes (>50k), this command should be
76used wisely.
77
78Alternatively, resolution can be read or written using the dedicated
79``resolution`` entry on each device, if supported by the sensor.
80
81Some non-genuine DS18B20 chips are fixed in 12-bit mode only, so the actual
82resolution is read back from the chip and verified.
83
84Note: Changing the resolution reverts the conversion time to default.
85
86The write-only sysfs entry ``eeprom_cmd`` is an alternative for EEPROM operations.
87Write ``save`` to save device RAM to EEPROM. Write ``restore`` to restore EEPROM
88data in device RAM.
89
90``ext_power`` entry allows checking the power state of each device. Reads
91``0`` if the device is parasite powered, ``1`` if the device is externally powered.
92
93Sysfs ``alarms`` allow read or write TH and TL (Temperature High an Low) alarms.
94Values shall be space separated and in the device range (typical -55 degC
95to 125 degC). Values are integer as they are store in a 8bit register in
96the device. Lowest value is automatically put to TL. Once set, alarms could
97be search at master level.
98
99The module parameter strong_pullup can be set to 0 to disable the
100strong pullup, 1 to enable autodetection or 2 to force strong pullup.
101In case of autodetection, the driver will use the "READ POWER SUPPLY"
102command to check if there are pariste powered devices on the bus.
103If so, it will activate the master's strong pullup.
104In case the detection of parasite devices using this command fails
105(seems to be the case with some DS18S20) the strong pullup can
106be force-enabled.
107
108If the strong pullup is enabled, the master's strong pullup will be
109driven when the conversion is taking place, provided the master driver
110does support the strong pullup (or it falls back to a pullup
111resistor).  The DS18b20 temperature sensor specification lists a
112maximum current draw of 1.5mA and that a 5k pullup resistor is not
113sufficient.  The strong pullup is designed to provide the additional
114current required.
115
116The DS28EA00 provides an additional two pins for implementing a sequence
117detection algorithm.  This feature allows you to determine the physical
118location of the chip in the 1-wire bus without needing pre-existing
119knowledge of the bus ordering.  Support is provided through the sysfs
120``w1_seq``. The file will contain a single line with an integer value
121representing the device index in the bus starting at 0.
122
123``features`` sysfs entry controls optional driver settings per device.
124Insufficient power in parasite mode, line noise and insufficient conversion
125time may lead to conversion failure. Original DS18B20 and some clones allow for
126detection of invalid conversion. Write bit mask ``1`` to ``features`` to enable
127checking the conversion success. If byte 6 of scratchpad memory is 0xC after
128conversion and temperature reads 85.00 (powerup value) or 127.94 (insufficient
129power), the driver returns a conversion error. Bit mask ``2`` enables poll for
130conversion completion (normal power only) by generating read cycles on the bus
131after conversion starts. In parasite power mode this feature is not available.
132Feature bit masks may be combined (OR). More details in
133Documentation/ABI/testing/sysfs-driver-w1_therm
134
135GX20MH01 device shares family number 0x28 with DS18*20. The device is generally
136compatible with DS18B20. Added are lowest 2\ :sup:`-5`, 2\ :sup:`-6` temperature
137bits in Config register; R2 bit in Config register enabling 13 and 14 bit
138resolutions. The device is powered up in 14-bit resolution mode. The conversion
139times specified in the datasheet are too low and have to be increased. The
140device supports driver features ``1`` and ``2``.
141
142MAX31850 device shares family number 0x3B with DS1825. The device is generally
143compatible with DS1825. The higher 4 bits of Config register read all 1,
144indicating 15, but the device is always operating in 14-bit resolution mode.
145