parent
01770b8666
commit
bca8d49850
@ -0,0 +1,90 @@ |
||||
# 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.* |
Loading…
Reference in new issue