ae1f3df434
only gpiobus configured via FDT is supported. Bus enumeration is supported. Devices are created for each device found. 1-Wire temperature controllers are supported, but other drivers could be written. Temperatures are polled and reported via a sysctl. Errors are reported via sysctl counters. Mis-wired bus detection is included for more trouble shooting. See ow(4), owc(4) and ow_temp(4) for details of what's supported and known issues. This has been tested on Raspberry Pi-B, Pi2 and Beagle Bone Black with up to 7 devices. Differential Revision: https://reviews.freebsd.org/D2956 Relnotes: yes MFC after: 2 weeks Reviewed by: loos@ (with many insightful comments)
231 lines
6.3 KiB
Groff
231 lines
6.3 KiB
Groff
.\"
|
|
.\" Copyright (c) 2015 M. Warner Losh
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. The name of the author may not be used to endorse or promote products
|
|
.\" derived from this software without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.Dd July 20, 2015
|
|
.Dt OWN 9
|
|
.Os
|
|
.Sh NAME
|
|
.Nm own ,
|
|
.Nm own_send_command ,
|
|
.Nm own_commmand_wait ,
|
|
.Nm own_self_command ,
|
|
.Nm own_acquire_bus ,
|
|
.Nm own crc ,
|
|
.Nm own_release_bus ,
|
|
.Nm OWN_ACQUIRE_BUS ,
|
|
.Nm OWN_CRC ,
|
|
.Nm OWN_RELEASE_BUS ,
|
|
.Nm OWN_SEND_COMMAND
|
|
.Nd Dallas Semiconductor 1-Wire Network and Transport Interface
|
|
.Sh SYNOPSIS
|
|
.In sys/bus.h
|
|
.In dev/ow/own.h
|
|
.Ft int
|
|
.Fn own_send_command "device_t pdev" "struct ow_cmd *cmd"
|
|
.Ft int
|
|
.Fn own_command_wait "device_t pdev" "struct ow_cmd *cmd"
|
|
.Ft int
|
|
.Fn own_self_command "device_t pdev" "struct ow_cmd *cmd" "uint8_t xpt_cmd"
|
|
.Ft int
|
|
.Fn own_acquire_bus "device_t pdev" "int how"
|
|
.Ft int
|
|
.Fn own_release_bus "device_t pdev"
|
|
.Ft int
|
|
.Fn own_crc "device_t pdev" "uint8_t *buffer" "size_t len"
|
|
.Ft int
|
|
.Fn OWN_SEND_COMMAND "device_t ndev" "device_t pdev" "struct ow_cmd *cmd"
|
|
.Ft int
|
|
.Fn OWN_ACQUIRE_BUS "device_t ndev" "device_t pdev" "int how"
|
|
.Ft void
|
|
.Fn OWN_RELEASE_BUS "device_t ndev" "device_t pdev"
|
|
.Ft uint8_t
|
|
.Fn OWN_CRC "device_t ndev" "device_t pdev" "uint8_t *buffer" "size_t len"
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm
|
|
interface defines three sets of functions for interacting with 1-Wire
|
|
devices:
|
|
sending commands,
|
|
reserving the bus,
|
|
and
|
|
ensuring data integrity.
|
|
Wrappers are provided for the raw
|
|
.Nm OWN
|
|
.Xr kobj 9
|
|
interfaces and should be used for improved safety over the
|
|
.Xr kobj 9
|
|
ones.
|
|
.Ss Bus Commands
|
|
The 1-Wire bus defines different layers of access to the devices on
|
|
the bus.
|
|
The
|
|
.Nm
|
|
functions provide access to the network and transport layers.
|
|
The network layer designates the next command as being either for all
|
|
devices on the bus, or for a specific device.
|
|
The network layer also specifies the speed used by the link layer.
|
|
.Pp
|
|
.Vt "struct ow_cmd"
|
|
encapsulates network access, speed, and timing information.
|
|
It specifies the commands to send and whether or not to read data.
|
|
Its members are:
|
|
.Bl -tag -width ".Va xxxx"
|
|
.It Va flags
|
|
Flags controlling the interpretation of the structure.
|
|
These flags are defined in
|
|
.In dev/ow/ow.h :
|
|
.Bl -tag -width indent
|
|
.It OW_FLAG_OVERDRIVE
|
|
Send
|
|
.Va xpt_cmd
|
|
bytes and read
|
|
.Va xpt_read
|
|
bytes at overdrive speed.
|
|
.It OW_FLAG_READ_BIT
|
|
Interpret
|
|
.Va xpt_read_len
|
|
to be in bits to be read after
|
|
.Va xpt_cmd
|
|
rather than bytes.
|
|
.El
|
|
.It Va rom_cmd
|
|
ROM command bytes to send.
|
|
.It Va rom_len
|
|
Number of ROM command bytes to send.
|
|
.It Va rom_read_len
|
|
Number of bytes to read after sending the ROM command.
|
|
.It Va rom_read
|
|
Buffer for bytes read after the ROM command.
|
|
.It Va xpt_cmd
|
|
Transport command to send.
|
|
.It Va xpt_len
|
|
Length of the transport command bytes to send.
|
|
Specify 0 for no transport command.
|
|
.It Va xpt_read_len
|
|
Number of bytes to read after
|
|
.Va xpt_cmd
|
|
bytes are sent.
|
|
If the
|
|
.Dv OW_FLAG_READ_BIT
|
|
bit is set in
|
|
.Va flags ,
|
|
then it is the number of bits to read.
|
|
Bits read are packed into bytes.
|
|
.It Va xpt_read
|
|
Buffer for data read.
|
|
.El
|
|
.Pp
|
|
.Fn own_command_wait
|
|
acquires the 1-Wire bus, waiting if necessary,
|
|
sends the command,
|
|
and
|
|
then releases the bus.
|
|
.Fn own_send_command
|
|
sends the command without bus reservation.
|
|
.Fa pdev
|
|
is the client device (the presentation layer device) sending the command.
|
|
The
|
|
.Fa cmd
|
|
argument describes the transaction to send to the 1-Wire bus.
|
|
.Pp
|
|
.Fn own_self_command
|
|
fills in
|
|
.Fa cmd
|
|
with a MATCH_ROM ROM command, the ROM address of
|
|
.Fa pdev
|
|
and the
|
|
.Fa xpt_cmd
|
|
as a convenient way to create directed commands.
|
|
.Ss Bus Reservation
|
|
The 1-Wire system includes an advisory lock for the bus that
|
|
presentation layer devices can use to coordinate access.
|
|
Locking is purely advisory at this time.
|
|
.Pp
|
|
.Fn own_acquire_bus
|
|
reserves the bus.
|
|
It waits indefinitely if the
|
|
.Fa how
|
|
argument is
|
|
.Dv OWN_WAIT
|
|
and returns the error
|
|
.Dv EWOULDBLOCK
|
|
if passed
|
|
.Dv OWN_DONTWAIT
|
|
when the bus is owned by another client.
|
|
.Pp
|
|
.Fn own_release_bus
|
|
releases the bus.
|
|
.Ss Data Integrity
|
|
.Fn own_crc
|
|
computes the 1-Wire standard CRC function over the data
|
|
passed in
|
|
.Fa buffer
|
|
and
|
|
.Fa len
|
|
and returns the result.
|
|
.Ss Notes
|
|
The 1-Wire standard (Maxim AN937) defines layers that are akin to ISO
|
|
networking layers.
|
|
The lowest relevant layer, the link layer, defines the polling windows
|
|
and the timing of the signaling of different modes.
|
|
The network layer is built on top of the link layer
|
|
and is used to address devices in a unicast or multicast manner.
|
|
The transport layer defines commands and responses from the devices.
|
|
The presentation layer is composed of the device specific commands and
|
|
actions used to control the specific 1-Wire devices on bus.
|
|
.Pp
|
|
These interfaces are implemented by the
|
|
.Xr ow 4
|
|
device.
|
|
Presentation layer devices (children of the newbus
|
|
.Xr ow 4
|
|
device) should only call the functions described here.
|
|
The functionality provided by the
|
|
.Xr owc 4
|
|
device (specifically the
|
|
.Xr owll 9
|
|
interface) should only be called by the
|
|
.Xr ow 4
|
|
driver.
|
|
.Sh SEE ALSO
|
|
.Xr ow 4 ,
|
|
.Xr owc 4 ,
|
|
.Xr owll 9
|
|
.Pa http://pdfserv.maximintegrated.com/en/an/AN937.pdf
|
|
.Sh LEGAL
|
|
.Tn 1-Wire
|
|
is a registered trademark of Maxim Integrated Products, Inc.
|
|
.Sh HISTORY
|
|
The
|
|
.Nm
|
|
driver first appeared in
|
|
.Fx 11.0 .
|
|
.Sh AUTHORS
|
|
The
|
|
.Nm
|
|
device driver and this manual page were written by
|
|
.An Warner Losh .
|