w1-uart.rst 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. .. SPDX-License-Identifier: GPL-2.0-or-later
  2. =====================
  3. Kernel driver w1-uart
  4. =====================
  5. Author: Christoph Winklhofer <cj.winklhofer@gmail.com>
  6. Description
  7. -----------
  8. UART 1-Wire bus driver. The driver utilizes the UART interface via the
  9. Serial Device Bus to create the 1-Wire timing patterns as described in
  10. the document `"Using a UART to Implement a 1-Wire Bus Master"`_.
  11. .. _"Using a UART to Implement a 1-Wire Bus Master": https://www.analog.com/en/technical-articles/using-a-uart-to-implement-a-1wire-bus-master.html
  12. In short, the UART peripheral must support full-duplex and operate in
  13. open-drain mode. The timing patterns are generated by a specific
  14. combination of baud-rate and transmitted byte, which corresponds to a
  15. 1-Wire read bit, write bit or reset pulse.
  16. For instance the timing pattern for a 1-Wire reset and presence detect uses
  17. the baud-rate 9600, i.e. 104.2 us per bit. The transmitted byte 0xf0 over
  18. UART (least significant bit first, start-bit low) sets the reset low time
  19. for 1-Wire to 521 us. A present 1-Wire device changes the received byte by
  20. pulling the line low, which is used by the driver to evaluate the result of
  21. the 1-Wire operation.
  22. Similar for a 1-Wire read bit or write bit, which uses the baud-rate
  23. 115200, i.e. 8.7 us per bit. The transmitted byte 0x80 is used for a
  24. Write-0 operation (low time 69.6us) and the byte 0xff for Read-0, Read-1
  25. and Write-1 (low time 8.7us).
  26. The default baud-rate for reset and presence detection is 9600 and for
  27. a 1-Wire read or write operation 115200. In case the actual baud-rate
  28. is different from the requested one, the transmitted byte is adapted
  29. to generate the 1-Wire timing patterns.
  30. Usage
  31. -----
  32. Specify the UART 1-wire bus in the device tree by adding the single child
  33. onewire to the serial node (e.g. uart0). For example:
  34. ::
  35. @uart0 {
  36. ...
  37. onewire {
  38. compatible = "w1-uart";
  39. };
  40. };