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.
90 lines
2.7 KiB
90 lines
2.7 KiB
# 1-Wire
|
|
|
|
1-Wire is a Dallas (now Maxim) proprietary protocol used by the
|
|
ubiquitous DS18x20 (DS1820, DS18S20, DS18B20), iButton (contact access
|
|
chips) and other devices.
|
|
|
|
The bus uses two wires, Data and GND. A third, Vdd wire, is optional and can be left out for parasitic power from the Data line. See the DS18x20 datasheet for more details.
|
|
|
|
1-Wire requires precise timing and is implemented by bit-banging in GEX.
|
|
GEX also implements the Search algorithm for finding all devices
|
|
connected to the bus. Each device has a unique address, which are found
|
|
using a form of binary search with hardware support in the individual devices.
|
|
|
|
The search algorithm is available in a separate repository for easier re-use in other projects: [MightyPork/1wire-search](https://github.com/MightyPork/1wire-search).
|
|
|
|
## Commands
|
|
|
|
### CHECK_PRESENCE (0)
|
|
|
|
Test if there are any devices attached to the bus.
|
|
|
|
*Response:*
|
|
- u8 - presence detected (0,1)
|
|
|
|
### SEARCH_ADDR (1)
|
|
|
|
Start the search algorithm, looking for all devices.
|
|
|
|
Up to 32 devices can be found in one call. To find more, use the `SEARCH_CONTINUE`
|
|
command.
|
|
|
|
*Response:*
|
|
- u8 - have more? (0,1) - indicates whether `SEARCH_CONTINUE` should be used.
|
|
- u64[] - array of 8-byte addresses (litte-endian u64, or arrays of 8 bytes each)
|
|
|
|
### SEARCH_ALARM (2)
|
|
|
|
Identical to `SEARCH_ADDR` (see above), except only devices with
|
|
an active Alarm status are detected. This is used with thermometers
|
|
which can detect the temperature exceeding pre-selected limits.
|
|
|
|
### SEARCH_CONTINUE (3)
|
|
|
|
Continue a search (address or alarm). The report format is identical
|
|
to `SEARCH_ADDR`, but continues after the last reported address.
|
|
|
|
### READ_ADDR (4)
|
|
|
|
Read the address of the single device connected to the bus.
|
|
If more than one device is connected, this will likely fail due to a
|
|
checksum mismatch.
|
|
|
|
*Response:*
|
|
- u64 - a 8-byte addresses (litte-endian u64, or an arrays of 8 bytes)
|
|
|
|
### WRITE (10)
|
|
|
|
Write bytes to the bus.
|
|
|
|
*Request:*
|
|
- u64 - a 8-byte device address
|
|
- 0 = all devices, uses the ROM_SKIP bus command
|
|
- u8[] - bytes to write
|
|
|
|
### READ (11)
|
|
|
|
Send a query and read bytes from the bus.
|
|
|
|
*Request:*
|
|
- u64 - a 8-byte device address
|
|
- 0 = use the ROM_SKIP bus command, use with a single device connected only
|
|
- u16 - read length (bytes)
|
|
- u8 - verify the CRC chekcsum (0,1)
|
|
- u8[] - request bytes (written before reading)
|
|
|
|
*Response:*
|
|
- u8[] - read bytes
|
|
|
|
### POLL_FOR_1 (20)
|
|
|
|
Wait for a READY status (used in DS18x20 measurements).
|
|
|
|
*NOTE:* Not available if parasitic power is used, then it just waits the maximal measurement time of DS1820.
|
|
|
|
A response is issued after all devices are done measuring,
|
|
or a timeout error is returned.
|
|
|
|
## Events
|
|
|
|
*No events defined for this unit type.*
|
|
|