| ====================== |
| Kernel driver w1_therm |
| ====================== |
| |
| Supported chips: |
| |
| * Maxim ds18*20 based temperature sensors. |
| * Maxim ds1825 based temperature sensors. |
| * GXCAS GX20MH01 temperature sensor. |
| * Maxim MAX31850 thermoelement interface. |
| |
| Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru> |
| |
| |
| Description |
| ----------- |
| |
| w1_therm provides basic temperature conversion for ds18*20, ds28ea00, GX20MH01 |
| and MAX31850 devices. |
| |
| Supported family codes: |
| |
| ==================== ==== |
| W1_THERM_DS18S20 0x10 |
| W1_THERM_DS1822 0x22 |
| W1_THERM_DS18B20 0x28 |
| W1_THERM_DS1825 0x3B |
| W1_THERM_DS28EA00 0x42 |
| ==================== ==== |
| |
| Support is provided through the sysfs entry ``w1_slave``. Each open and |
| read sequence will initiate a temperature conversion, then provide two |
| lines of ASCII output. The first line contains the nine hex bytes |
| read along with a calculated crc value and YES or NO if it matched. |
| If the crc matched the returned values are retained. The second line |
| displays the retained values along with a temperature in millidegrees |
| Centigrade after t=. |
| |
| Alternatively, temperature can be read using ``temperature`` sysfs, it |
| returns only the temperature in millidegrees Centigrade. |
| |
| A bulk read of all devices on the bus could be done writing ``trigger`` |
| to ``therm_bulk_read`` entry at w1_bus_master level. This will |
| send the convert command to all devices on the bus, and if parasite |
| powered devices are detected on the bus (and strong pullup is enabled |
| in the module), it will drive the line high during the longer conversion |
| time required by parasited powered device on the line. Reading |
| ``therm_bulk_read`` will return 0 if no bulk conversion pending, |
| -1 if at least one sensor still in conversion, 1 if conversion is complete |
| but at least one sensor value has not been read yet. Result temperature is |
| then accessed by reading the ``temperature`` entry of each device, which |
| may return empty if conversion is still in progress. Note that if a bulk |
| read is sent but one sensor is not read immediately, the next access to |
| ``temperature`` on this device will return the temperature measured at the |
| time of issue of the bulk read command (not the current temperature). |
| |
| A strong pullup will be applied during the conversion if required. |
| |
| ``conv_time`` is used to get current conversion time (read), and |
| adjust it (write). A temperature conversion time depends on the device type and |
| its current resolution. Default conversion time is set by the driver according |
| to the device datasheet. A conversion time for many original device clones |
| deviate from datasheet specs. There are three options: 1) manually set the |
| correct conversion time by writing a value in milliseconds to ``conv_time``; 2) |
| auto measure and set a conversion time by writing ``1`` to |
| ``conv_time``; 3) use ``features`` to enable poll for conversion |
| completion. Options 2, 3 can't be used in parasite power mode. To get back to |
| the default conversion time write ``0`` to ``conv_time``. |
| |
| Writing a resolution value (in bits) to ``w1_slave`` will change the |
| precision of the sensor for the next readings. Allowed resolutions are defined by |
| the sensor. Resolution is reset when the sensor gets power-cycled. |
| |
| To store the current resolution in EEPROM, write ``0`` to ``w1_slave``. |
| Since the EEPROM has a limited amount of writes (>50k), this command should be |
| used wisely. |
| |
| Alternatively, resolution can be read or written using the dedicated |
| ``resolution`` entry on each device, if supported by the sensor. |
| |
| Some non-genuine DS18B20 chips are fixed in 12-bit mode only, so the actual |
| resolution is read back from the chip and verified. |
| |
| Note: Changing the resolution reverts the conversion time to default. |
| |
| The write-only sysfs entry ``eeprom_cmd`` is an alternative for EEPROM operations. |
| Write ``save`` to save device RAM to EEPROM. Write ``restore`` to restore EEPROM |
| data in device RAM. |
| |
| ``ext_power`` entry allows checking the power state of each device. Reads |
| ``0`` if the device is parasite powered, ``1`` if the device is externally powered. |
| |
| Sysfs ``alarms`` allow read or write TH and TL (Temperature High an Low) alarms. |
| Values shall be space separated and in the device range (typical -55 degC |
| to 125 degC). Values are integer as they are store in a 8bit register in |
| the device. Lowest value is automatically put to TL. Once set, alarms could |
| be search at master level. |
| |
| The module parameter strong_pullup can be set to 0 to disable the |
| strong pullup, 1 to enable autodetection or 2 to force strong pullup. |
| In case of autodetection, the driver will use the "READ POWER SUPPLY" |
| command to check if there are pariste powered devices on the bus. |
| If so, it will activate the master's strong pullup. |
| In case the detection of parasite devices using this command fails |
| (seems to be the case with some DS18S20) the strong pullup can |
| be force-enabled. |
| |
| If the strong pullup is enabled, the master's strong pullup will be |
| driven when the conversion is taking place, provided the master driver |
| does support the strong pullup (or it falls back to a pullup |
| resistor). The DS18b20 temperature sensor specification lists a |
| maximum current draw of 1.5mA and that a 5k pullup resistor is not |
| sufficient. The strong pullup is designed to provide the additional |
| current required. |
| |
| The DS28EA00 provides an additional two pins for implementing a sequence |
| detection algorithm. This feature allows you to determine the physical |
| location of the chip in the 1-wire bus without needing pre-existing |
| knowledge of the bus ordering. Support is provided through the sysfs |
| ``w1_seq``. The file will contain a single line with an integer value |
| representing the device index in the bus starting at 0. |
| |
| ``features`` sysfs entry controls optional driver settings per device. |
| Insufficient power in parasite mode, line noise and insufficient conversion |
| time may lead to conversion failure. Original DS18B20 and some clones allow for |
| detection of invalid conversion. Write bit mask ``1`` to ``features`` to enable |
| checking the conversion success. If byte 6 of scratchpad memory is 0xC after |
| conversion and temperature reads 85.00 (powerup value) or 127.94 (insufficient |
| power), the driver returns a conversion error. Bit mask ``2`` enables poll for |
| conversion completion (normal power only) by generating read cycles on the bus |
| after conversion starts. In parasite power mode this feature is not available. |
| Feature bit masks may be combined (OR). More details in |
| Documentation/ABI/testing/sysfs-driver-w1_therm |
| |
| GX20MH01 device shares family number 0x28 with DS18*20. The device is generally |
| compatible with DS18B20. Added are lowest 2\ :sup:`-5`, 2\ :sup:`-6` temperature |
| bits in Config register; R2 bit in Config register enabling 13 and 14 bit |
| resolutions. The device is powered up in 14-bit resolution mode. The conversion |
| times specified in the datasheet are too low and have to be increased. The |
| device supports driver features ``1`` and ``2``. |
| |
| MAX31850 device shares family number 0x3B with DS1825. The device is generally |
| compatible with DS1825. The higher 4 bits of Config register read all 1, |
| indicating 15, but the device is always operating in 14-bit resolution mode. |