Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
1-Wire
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Device communications bus system}} [[File:I-button.jpg|thumb|right|350px|An {{not a typo|iButton}} in a plastic fob, as used for Istanbul [[Akbil (smart ticket)|Akbil smart ticket]]]] [[File:Java Ring.jpg|thumb|right|200px|A Java ring with an embedded {{not a typo|iButton}}]] '''1-Wire''' is a [[Wired communication|wired]] [[half duplex|half-duplex]] [[Serial communication|serial]] [[Bus (computing)|bus]] designed by [[Dallas Semiconductor]] that provides low-speed (16.3 kbit/s<ref>{{Cite web|url=https://www.analog.com/en/app-notes/reading-and-writing-1wirereg-devices-through-serial-interfaces.html|title=Reading and Writing 1-Wire Devices Through Serial Interfaces|website=Maxim Integrated|language=en-US|access-date=2022-12-21}}</ref>) [[data communication]] and [[IC power-supply pin|supply voltage]] over a single [[Electrical conductor|conductor]].<ref>{{Cite web |title=Overview of 1-Wire Technology and Its Use |url=https://www.analog.com/en/technical-articles/guide-to-1wire-communication.html |url-status=live |archive-url=https://web.archive.org/web/20230627125557/https://www.analog.com/en/technical-articles/guide-to-1wire-communication.html |archive-date=2023-06-27 |access-date=2023-07-21 |website=[[Analog Devices]]}}</ref> 1-Wire is similar in concept to [[I2C|I<sup>2</sup>C]], but with lower data rates and longer range. It is typically used to communicate with small inexpensive [[electronic component|device]]s such as digital [[thermometer]]s and weather instruments. A network of 1-Wire devices with an associated [[Master/slave (technology)|master]] device is called a '''MicroLAN'''. The protocol is also used in small electronic keys known as a '''Dallas key''' or '''{{not a typo|iButton}}'''. One distinctive feature of the bus is the possibility of using only two conductors — data and ground. To accomplish this, 1-Wire devices integrate a small [[capacitor]] (~800{{nbsp}}[[farad|pF]]) to store charge, which powers the device during periods when the data line is active. == Usage example == 1-Wire devices are available in different packages: [[integrated circuit]]s, a [[TO-92]]-style package (as typically used for transistors), and a portable form called an {{not a typo|iButton}} or Dallas key which is a small stainless-steel package that resembles a [[Button cell|watch battery]]. Manufacturers also produce devices more complex than a single component that use the 1-Wire bus to communicate. 1-Wire devices can fit in different places in a system. It might be one of many components on a circuit board within a product. It also might be a single component within a device such as a temperature probe. It could be attached to a device being monitored. Some laboratory systems connect to 1-Wire devices using cables with [[modular connector]]s or [[Category 5 cable|CAT-5]] cable. In such systems, [[Registered jack#RJ11|RJ11]] (6P2C or 6P4C [[modular connector|modular plugs]], commonly used for telephones) are popular. Systems of sensors and actuators can be built by wiring together many 1-Wire components. Each 1-Wire component contains all of the logic needed to operate on the 1-Wire bus. Examples include [[temperature]] loggers, timers, [[voltage]] and current sensors, battery monitors, and [[memory]]. These can be connected to a PC using a bus converter. [[USB]], [[RS-232]] serial, and [[parallel port]] interfaces are popular solutions for connecting a MicroLan to the host PC. 1-Wire devices can also be interfaced directly to microcontrollers from various vendors. {{not a typo|iButtons}} are connected to 1-Wire bus systems by means of sockets with contacts that touch the "lid" and "base" of the canister. Alternatively, the connection can be semi-permanent with a socket into which the {{not a typo|iButton}} clips, but from which it is easily removed. <!--The '''Java Ring''' is a ring-mounted {{not a typo|iButton}} with a [[Java virtual machine]] that is compatible with the [[Java Card]] 2.0 specification. These were given to attendees of the 1998 [[JavaOne]] conference.<ref name="JavaWorld">''[http://www.javaworld.com/javaworld/jw-04-1998/jw-04-javadev.html?page=1 An introduction to the Java Ring]'', by [[Stephen M. Curry]], [[JavaWorld.com]], April 1st, 1998.</ref>--> <!--I feel that this was only kinda relevant to the article, and them being handed out at a Java conference was likely not so--> Each 1-Wire chip has a unique identifier code. This feature makes the chips, especially {{not a typo|iButtons}}, suitable electronic keys. Some uses include locks, burglar alarms, computer systems, manufacturer-approved accessories, time clocks and courier and maintenance keys for smart safes. {{not a typo|iButtons}} have been used as [[Akbil (smart ticket)|Akbil smart ticket]]s for the [[public transport in Istanbul]]. === Power supplies === Apple [[MagSafe]]- and MagSafe-2-connector–equipped power supplies, displays, and Mac laptops use the 1-Wire protocol to send and receive data to and from the connected Mac laptop, via the middle pin of the connector. Data include power supply model, wattage, and serial number; and laptop commands to send full power, and illuminate the red or green [[light-emitting diode]]s in the connector.<ref>{{Cite web | url=http://www.righto.com/2013/06/teardown-and-exploration-of-magsafe.html | title="Teardown and exploration of Apple's Magsafe connector" | publisher=rightTo.com | access-date=2017-07-18}}</ref> Genuine [[Dell]] laptop power supplies use the 1-Wire protocol to send data via the third wire to the [[laptop|laptop computer]] about power, current and voltage ratings. The laptop will then refuse charging if the adapter does not meet requirements.<ref>{{Cite web | url=http://hackaday.com/2014/03/03/hacking-dell-laptop-charger-identification/ | title=Hacking Dell Laptop Charger Identification | publisher=hackaday.com | access-date=2015-11-30}}</ref> == Communication protocol == In any MicroLan, there is always one [[Master/slave (technology)|master]] in overall charge, which may be a [[personal computer]] or a [[microcontroller]]. The master initiates activity on the bus, simplifying the avoidance of collisions on the bus. Protocols are built into the master's software to detect collisions. After a collision, the master retries the required communication. A 1-Wire network is a single [[open drain]] wire with a single [[pull-up resistor]]. The pull-up resistor pulls the wire up to 3 or 5 volts. The master device and all the slaves each have a single open-drain connection to drive the wire, and a way to sense the state of the wire. Despite the "1-Wire" name, all devices must also have a second conductor for a [[Ground (electricity)|ground]] connection to permit a return current to flow through the data wire.<ref>{{Cite web |title=1-Wire online tutorial. This tutorial will give you an overview of the 1-Wire protocol, its device operation and application solutions. <!-- BOT GENERATED TITLE --> |url=http://www.maxim-ic.com/products/1-wire/flash/overview/index.cfm |archive-url=https://web.archive.org/web/20090502224036/http://www.maxim-ic.com/products/1-wire/flash/overview/index.cfm |archive-date=2009-05-02 |url-status=live |access-date=2009-03-13}}</ref> Communication occurs when a master or slave briefly pulls the bus low, ''i.e.'', connects the pull-up resistor to ground through its output MOSFET. The data wire is high when idle, and so it can also power a limited number of slave devices. Data rates of 16.3 kbit/s can be achieved.<!-- Page 40 --> There is also an overdrive mode that speeds up the communication by a factor of 10.<!-- Page 39 --> A short 1-Wire bus can be driven from a single digital I/O pin on a microcontroller. A [[universal asynchronous receiver-transmitter]] (UART) can also be used.<ref>{{Cite web|title=Using a UART to Implement a 1-Wire Bus Master|website=Analog Devices|url=https://www.analog.com/en/resources/technical-articles/using-a-uart-to-implement-a-1wire-bus-master.html|date=10 September 2002|access-date=3 December 2024}}</ref> Specific 1-Wire [[Driver circuit|driver]] and [[Network bridge|bridge]] chips are available. [[USB|Universal Serial Bus]] "bridge" chips are also available. Bridge chips are particularly useful to drive cables longer than 100 m. Up to 300-meter [[twisted pair]]s, ''i.e.'', telephone cables, have been tested by the manufacturer. These extreme lengths require adjustments to the pull-up resistances from {{Nowrap|5 to 1 kΩ}}.<!-- Page 40-41 --> The master starts a transmission with a ''reset'' pulse, which pulls the wire to 0 volts for at least 480 [[microsecond|μs]]. This resets every slave device on the bus. After that, any slave device, if present, shows that it exists with a "presence" pulse: it holds the bus low for at least 60 μs after the master releases the bus. To send a [[binary number]] "1", the bus master sends a very brief ({{Nowrap|1–15 μs}}) low pulse. To send a binary number "0", the master sends a 60 μs low pulse. The falling (negative) edge of the pulse is used to start a [[monostable multivibrator]] in the slave device. The multivibrator in the slave reads the data line about 30 μs after the falling edge. The slave's internal timer is an inexpensive analog timer. It has analog tolerances that affect its timing accuracy. Therefore, the pulses are calculated to be within margins. Therefore, the "0" pulses have to be 60 μs long, and the "1" pulses can't be longer than 15 μs. When receiving data, the master sends a {{nowrap|1–15 μs}} {{nowrap|0 volt}} pulse to start each bit. If the transmitting slave unit wants to send a "1", it does nothing, and the bus goes to the pulled-up voltage. If the transmitting slave wants to send a "0", it pulls the data line to ground for {{Nowrap|60 μs}}. The basic sequence is a reset pulse followed by an eight-bit command, and then data are sent or received in groups of eight bits. When a sequence of data is being transferred, errors can be detected with an eight-bit [[cyclic redundancy check|CRC]] (weak data protection)<!-- I think it's important to point this out --><!-- and who are we to disagree with you? -->. Many devices can share the same bus. Each device on the bus has a 64-bit serial number, of which eight bits are used as a checksum, thus allowing a "universe" of 2<sup>56</sup> (over 7.2 × 10<sup>16</sup>) unique device identities. The [[Bit numbering#Least significant bit|least significant byte]] of the serial number is an eight-bit number that tells the type of the device. The [[Bit numbering#Most significant bit|most significant byte]] is a standard (for the 1-Wire bus) eight-bit CRC.<ref name="maximic_1wire_standard" /><!-- Page 14 --> There are several standard broadcast commands, as well as commands used to address a particular device. The master can send a selection command, then the address of a particular device. The next command is executed only by the addressed device. The 1-Wire bus enumeration protocol, like other [[singulation]] protocols, is an algorithm the master uses to read the address of every device on the bus. Since the address includes the device type and a CRC, recovering the roster of addresses also produces a reliable inventory of the devices on the bus. To find the devices, the master broadcasts an [[enumeration]] command, and then an address, "listening" after each bit of an address. If a slave's address matches all the address bits sent so far, it returns a 0. The master uses this simple behavior to search systematically for valid sequences of address bits. The process is much faster than a brute force search of all possible 56-bit numbers, because as soon as an invalid bit is detected, all subsequent address bits are known to be invalid. The 56-bit address space is searched as a binary tree,<!-- Page 51 --> allowing up to 75 devices to be found per second.<!-- Page 53 with formula --> The order in which device addresses are discovered by this enumeration protocol is deterministic and depends only on the device type and serial number. Bit-reversing these 56 bits yields the order of discovery for devices using Maxim's published algorithm (algorithm defined in Application Note 187<ref>{{Cite web|title=1 Wire Search Algorithm (Application Note 187)|url=https://www.maximintegrated.com/en/design/technical-documents/app-notes/1/187.html|format=PDF| access-date= 2 October 2020}}</ref>). The search algorithm can be implemented in an alternative form, initially searching paths with address bits equal to 1, rather than 0. In this case, inverting the 56 address bits and then reversing them yields the order of discovery. The location of devices on the bus is sometimes significant. For these situations, a microcontroller can use several pins, or the manufacturer has a 1-Wire device that can switch the bus off or pass it on. Software can therefore explore sequential ''bus [[Broadcast domain|domain]]s''.<ref name="maximic_1wire_standard">{{Cite web|title=iButton Overview|url=http://www.maxim-ic.com/products/ibutton/ibuttons/standard.pdf|format=PDF| access-date= 18 December 2008 <!-- Added by DASHBot -->| archive-url= https://web.archive.org/web/20090127003835/http://www.maxim-ic.com/products/ibutton/ibuttons/standard.pdf| archive-date= 27 January 2009 <!-- Added by DASHBot -->}} 081218 maxim-ic.com</ref> == ROM family codes == Every 1-Wire device’s 64-bit ROM ID ends with an 8-bit family code. In most cases this byte is assigned to a single part number, so reading it from the bus is usually enough to identify the device—for example, 0x10 (DS18S20 thermometer),<ref>{{cite web |title=DS18S20 – High-Precision 1-Wire Digital Thermometer (datasheet) |url=https://www.analog.com/media/en/technical-documentation/data-sheets/ds18s20.pdf |website=Analog Devices |access-date=2025-04-25}}</ref> 0x01 (DS2401 silicon serial number),<ref>{{cite web |title=DS2401 – Silicon Serial Number (datasheet) |url=https://www.analog.com/media/en/technical-documentation/data-sheets/ds2401.pdf |website=Analog Devices |access-date=2025-04-25}}</ref> or 0x2D (DS2431 1 kbit EEPROM).<ref>{{cite web |title=DS2431 – 1024-Bit 1-Wire EEPROM (datasheet) |url=https://www.analog.com/DS2431/datasheet |website=Analog Devices |access-date=2025-04-25}}</ref> Various people have created online databases of family codes from the broad range of 1-Wire memory, authenticator, ID, and battery-monitor devices.<ref>{{cite web |title=1-Wire Family Code Database |url=https://jumtee.com/1-wire-family-code-database |website=Jumtee Security |access-date=2025-04-25}}</ref> == Example communication with a device == The following signals were generated by an [[Field-programmable gate array|FPGA]], which was the master for the communication with a DS2432 ([[EEPROM]]<!-- 1k-Bit Protected 1-Wire EEPROM with SHA-1 Engine -->) chip, and measured with a logic analyzer. A logic high on the 1-Wire output, means the output of the FPGA is in tri-state mode and the 1-Wire device can pull the bus low. A low means the FPGA pulls down the bus. The 1-Wire input is the measured bus signal. On input sample time high, the FPGA samples the input for detecting the device response and receiving bits. [[File:1-Wire-Protocol.png]] == Development tools == When developing and/or troubleshooting the 1-Wire bus, examination of hardware signals can be very important. [[Logic analyzer]]s and [[bus analyzer]]s are tools that collect, analyze, decode, and store signals to simplify viewing the high-speed waveforms. == See also == * [[SDI-12]], a single data wire communications scheme * [[Single-wire transmission line]], a technique for electric power transmission with only "1 wire" without a ground return wire path * [[Touch memory]] == References == {{Reflist}} == External links == *[https://www.maximintegrated.com/en/products/ibutton-one-wire/one-wire.html 1-Wire Device] *[http://wphost.spider-e.com/?p=231 Accessing, Reading, and Writing to 1-Wire devices using a UART] *[http://www.maximintegrated.com/en/app-notes/index.mvp/id/214 Using a UART to Implement a 1-Wire Bus Master] *[http://www.maxim-ic.com/products/ibutton/index.cfm?CMP=ELK2 iButton], [http://www.ibuttonlink.com iButtonLink] *[https://pdfserv.maximintegrated.com/en/an/AN148.pdf Guidelines for Reliable Long Line 1-Wire Networks] *[http://www.maxim-ic.com/appnotes.cfm/an_pk/4206/CMP/ELK6 Choosing the Right 1-Wire Master for Embedded Applications] *[http://www.owfs.org/ OWFS — 1-Wire file system for Linux] *[http://sheepdogguides.com/dst1main.htm Guides to working with 1-Wire, for programmers and engineers] *[https://web.archive.org/web/20120315032730/http://www.technotes.se/?p=26 Getting 1-Wire sensors working in Linux using OWFS] *[http://www.hacktronics.com/Tutorials/arduino-1-Wire-tutorial.html 1-wire Arduino tutorial] *[http://sheepdogguides.com/lut/dstl2hello_ds18b20.htm Guide to writing software for 1-Wire/ MicroLan] using [[Lazarus (IDE)|Lazarus]], "the free Delphi". {{Computer bus}} {{Automation protocols}} [[Category:Serial buses]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Automation protocols
(
edit
)
Template:Cite web
(
edit
)
Template:Computer bus
(
edit
)
Template:Nbsp
(
edit
)
Template:Not a typo
(
edit
)
Template:Nowrap
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)