| .. _w1_api: |
| |
| 1-Wire Bus |
| ########## |
| |
| Overview |
| ******** |
| |
| 1-Wire is a low speed half-duplex serial bus using only a single wire plus |
| ground for both data transmission and device power supply. |
| Similarly to I2C, 1-Wire uses a bidirectional open-collector data line, |
| and is a single master multidrop bus. This means one master initiates all data |
| exchanges with the slave devices. |
| The 1-Wire bus supports longer bus lines than I2C, while it reaches speeds of up |
| to 15.4 kbps in standard mode and up to 125 kbps in overdrive mode. |
| Reliable communication in standard speed configuration is possible with 10 nodes |
| over a bus length of 100 meters. Using overdrive speed, 3 nodes on a bus of |
| 10 meters length are expected to work solid. Optimized timing parameters and |
| fewer nodes on the bus may allow to reach larger bus extents. |
| |
| The implementation details are specified in the `BOOK OF IBUTTON STANDARDS`_. |
| |
| .. figure:: 1-Wire_bus_topology.drawio.svg |
| :align: center |
| :alt: 1-Wire bus topology |
| |
| A typical 1-Wire bus topology |
| |
| |
| .. _w1-master-api: |
| |
| W1 Master API |
| ================= |
| |
| Zephyr's 1-Wire Master API is used to interact with 1-Wire slave devices like |
| temperature sensors and serial memories. |
| |
| In Zephyr this API is split into the following layers. |
| |
| * The link layer handles basic communication functions such as bus reset, |
| presence detect and bit transfer operations. |
| It is the only hardware-dependent layer in Zephyr. |
| This layer is supported by a driver using the Zephyr :ref:`uart_api` interface, |
| which should work on most Zephyr platforms. |
| In the future, a GPIO/Timer based driver and hardware specific drivers might |
| be added. |
| * The 1-Wire network layer handles all means for slave identification and bus |
| arbitration. |
| This includes ROM commands like Match ROM, or Search ROM. |
| |
| * All slave devices have a unique 64-bit identification number, which |
| includes a 8-bit `1-Wire Family Code`_ and a 8-bit CRC. |
| * In order to find slaves on the bus, the standard specifies an search |
| algorithm which successively detects all slaves on the bus. |
| This algorithm is described in detail by `Maxim's Applicationnote 187`_. |
| |
| * Transport layer and Presentation layer functions are not implemented in the |
| generic 1-Wire driver and therefore must be handled in individual slave drivers. |
| |
| The 1-Wire API is considered experimental. |
| |
| |
| Configuration Options |
| ********************* |
| |
| Related configuration options: |
| |
| * :kconfig:option:`CONFIG_W1` |
| * :kconfig:option:`CONFIG_W1_NET` |
| |
| |
| API Reference |
| ************* |
| |
| 1-Wire data link layer |
| ====================== |
| |
| .. doxygengroup:: w1_data_link |
| |
| 1-Wire network layer |
| ==================== |
| |
| .. doxygengroup:: w1_network |
| |
| 1-Wire generic functions and helpers |
| ==================================== |
| |
| Functions that are not directly related to any of the networking layers. |
| |
| .. doxygengroup:: w1_interface |
| |
| |
| .. _BOOK OF IBUTTON STANDARDS: |
| https://www.maximintegrated.com/en/design/technical-documents/app-notes/9/937.html |
| |
| .. _1-Wire Family Code: |
| https://www.maximintegrated.com/en/design/technical-documents/app-notes/1/155.html |
| |
| .. _Maxim's Applicationnote 187: |
| https://www.maximintegrated.com/en/design/technical-documents/app-notes/1/187.html |