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.
94 lines
2.4 KiB
94 lines
2.4 KiB
\section{1-Wire Unit}
|
|
|
|
The 1-Wire unit implements the Dallas Semiconductor's 1-Wire protocol, most commonly used to interface smart thermometers (DS18x20). The protocol is explained in section \ref{sec:theory-1wire}.
|
|
|
|
This unit implements the ROM Search algorithm that is used to find the unique IDs of all 1-Wire devices connected to the bus. The algorithm can find up to 32 devices in one run; More devices can be found by issuing the SEARCH\_CONTINUE command.
|
|
|
|
Devices are addressed using their 64-bit (8-byte) identifiers. When only one device is connected, the value 0 may be used and the addressing will be skipped. Its ID may be recovered using the READ\_ADDR command or by the search algorithm.
|
|
|
|
\subsection{1-Wire Configuration}
|
|
|
|
\begin{inicode}
|
|
[1WIRE:ow@7]
|
|
# Data pin
|
|
pin=A0
|
|
# Parasitic (bus-powered) mode
|
|
parasitic=N
|
|
\end{inicode}
|
|
|
|
\subsection{1-Wire Events}
|
|
|
|
This unit generates no events.
|
|
|
|
\subsection{1-Wire Commands}
|
|
|
|
\begin{tabularx}{\textwidth}{p{\fldwcode}Xp{\fldwpld}}
|
|
\toprule
|
|
\textbf{Code} & \textbf{Function} & \textbf{Payload} \\
|
|
\midrule
|
|
|
|
0 & \flname{CHECK\_PRESENCE}
|
|
Test if there are any devices attached to the bus.
|
|
& \makecell[tl]{
|
|
\fldresp
|
|
\fld{u8} presence detected (0, 1)
|
|
} \\
|
|
|
|
1 & \flname{SEARCH\_ADDR}
|
|
Start the search algorithm.
|
|
& \makecell[tl]{
|
|
\fldresp
|
|
\fld{u8} should continue (0, 1) \\
|
|
\fld{u64[]} device addresses
|
|
} \\
|
|
|
|
2 & \flname{SEARCH\_ALARM}
|
|
Start the search algorithm, finding only devices in an alarm state.
|
|
& \makecell[tl]{
|
|
\fldresp
|
|
\fld{u8} should continue (0, 1) \\
|
|
\fld{u64[]} device addresses
|
|
} \\
|
|
|
|
3 & \flname{SEARCH\_CONTINUE}
|
|
Continue a previously started search
|
|
& \makecell[tl]{
|
|
\fldresp
|
|
\fld{u8} should continue (0, 1) \\
|
|
\fld{u64[]} device addresses
|
|
} \\
|
|
|
|
4 & \flname{READ\_ADDR}
|
|
Read a device address (single device only)
|
|
& \makecell[tl]{
|
|
\fldresp
|
|
\fld{u64} device address
|
|
} \\
|
|
|
|
10 & \flname{WRITE}
|
|
Write bytes to a device.
|
|
& \makecell[tl]{
|
|
\fldreq
|
|
\fld{u64} device address \\
|
|
\fld{u8[]} bytes to write
|
|
} \\
|
|
|
|
11 & \flname{READ}
|
|
Write a request and read response.
|
|
& \makecell[tl]{
|
|
\fldreq
|
|
\fld{u64} device address \\
|
|
\fld{u16} read length \\
|
|
\fld{u8} verify checksum (0, 1) \\
|
|
\fld{u8[]} request bytes
|
|
} \\
|
|
|
|
20 & \flname{POLL\_FOR\_1}
|
|
Wait for a READY status, used by DS18x20.
|
|
Not available in parasitic mode.
|
|
Responds with SUCCESS after all devices are ready.
|
|
& \\
|
|
\bottomrule
|
|
\end{tabularx}
|
|
|
|
|
|
|