mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
7.0 KiB
144 lines
7.0 KiB
====================== |
|
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 <[email protected]> |
|
|
|
|
|
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 |
|
it's 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.
|
|
|