1-Wire

1-Wire

This section refers to the following sample application(s):

  • 02-onewire





1-Wire is a well-known protocol used for communicating between a micro-controller and one or more sensor/actuator 1-Wire slave devices, using a single data wire. Some 1-Wire devices also harvest energy from the data wire, so they don't require any other power source. This makes it a popular protocol for interfacing to simple sensors (e.g. temperature,  humidity), and several vendors sell sensors with a 1-Wire interface.

Communication over the data wire is bi-directional. An external pull-up resistor is used to pull the data wire high by default. The 1-Wire protocol defines how the master and the slaves communicate using a combination of timeouts, GPIO-like reads and pull-down operations. Each 1-Wire device has a unique 64-bit address. The procedures for discovering the addresses of the 1-Wire devices connected to the bus, and for reading and writing arbitrary data to a specific 1-Wire slave are all built into the protocol.

A typical 1-Wire transaction consists of the following steps:

  • A "detection" step during the which the master pulls down the data (called the "reset pulse"). A certain timeout after the master releases the bus, a slave will also pull the data line down (the "presence pulse"). When the master sees the data line being low after it released it, the master knows that there is at least one device on the bus.

  • An "addressing" step during which the master sends a command indicating the type of addressing to be used, sometimes followed by the 64-bit address of the slave to communicate with. Typical commands are detailed below.

  • One or more "communication" steps during which the master can transmit an arbitrary number of bytes to the addressed slave, or read an arbitrary number of bytes from it.

The following table indicates typical commands sent by the master at the beginning of the "addressing" step.

Name

Value

Description

Name

Value

Description

READ_ROM

0x33

Indicates to the slave that it should transmit its 64-bit address during the next read operation. This can only be used if a single device is present on the bus.

SEARCH_ROM

0xFE

Indicates to the slaves that the master will start a "search" operation to determine the 64-bit addresses of the devices on the bus. This search operation consists of single-bit write and read operations to efficiently "walk" the 64-bit addressing space.

MATCH_ROM

0x55

Indicates that the master will send the 64-bit address of the slave it wishes to communicate with.

SKIP_ROM

0xCC

Indicates that the master wishes to skip the addressing step and start communicating right away.This command can only be used if a single slave device is present on the bus.

1-Wire on the LTC5800

The 

 chip has built-in 1-Wire support. Your application has access to three 1-Wire devices, each corresponding to a different pin, as listed in the following table:

1-Wire device

silkscreen on the

board

1-Wire device

silkscreen on the

board

DN_1WIRE_UART_DEV_ID

TX

DN_1WIRE_UARTC0_DEV_ID

C0 TX

DN_1WIRE_UARTC1_DEV_ID

S MISO

We discourage the use of DN_1WIRE_UARTC0_DEV_ID as a 1-Wire device since it prevents you from using the CLI interface.

 

The 02-onewire Sample Application

The 02-onewire sample application defines a number of CLI commands to perform 1-Wire operations. The OWI_DEVICE define sets the 1-Wire device to be used. When set to DN_1WIRE_UARTC1_DEV_ID (the default value), the pin corresponding to the 1-Wire data line is labeled S MISO on the 

 silkscreen.

This sample application does not define any additional tasks (operations are done directly in the CLI's task), nor does it attempt to join a network.

To be able to run this sample application, you need to connect a 1-Wire slave device to your 

 as follows:

  • Connect your 1-Wire slave's ground line to a pin labeled GND on the 

     silkscreen.

  • Connect your 1-Wire slave's data line to the pin labeled MISO on the 

     silkscreen.

  • Use a resistor to pull the data line high by connecting it between the data line and the labeled Vsupply on the 

     silkscreen. The value of this resistor is typically 5k Ohm, although you should find the recommended value in the datasheet of your 1-Wire slave.

Optionally, you can connect an oscilloscope to monitor the activity on the 1-Wire data line.

After programming the 

, use the following CLI commands to trigger 1-Wire operations:

Command

 

Command

 

d

The "detect" command will issue a reset pulse and listen for a presence pulse. The CLI interface will print whether at least one 1-Wire slave device is present on the bus.

w

The "write" command allows you write arbitrary data over the 1-Wire data line. The payload you enter must be written in hexadecimal characters. That is, entering

w 33

issues the READ_ROM command.

wb

The "write bit" command allows you to write a single bit to the 1-Wire data line. You need to specify a single argument, either 0 or 1.

r

The "read" command allows you to read an arbitrary number of bytes from the 1-Wire bus. You need to specify the number of bytes (in decimal) as the only argument. That is, entering

r 8

reads 8 bytes.

rb

The "read bit" command allows you to read a single bit from the 1-Wire bus. After entering this command, the CLI interface prints the bit read, either 0 or 1.

s

The "search" command performs a 1-Wire search operation, and prints the 64-bit addresses of the devices present on the bus. You can use the information gathered by this operation to address a specific device in a subsequent transaction.