1-wire väylä

Alunperin julkaistu: 13.8.2024

Viimeksi muokattu: tiistai 13.8.2024

1-Wire väylän on kehittänyt Dallas Semiconductor -yhtiö (sittemmin Maxim ja nykyisin Analog Devices). 1-Wire on tiedonsiirtoprotokolla ja väylästandardi, joka mahdollistaa datan siirron yksinkertaisesti yhden datalinjan ja maa-yhteyden avulla. Tässä muutamia keskeisiä kohtia 1-Wire väylän käytöstä eri sovellutuksissa:

  1. Yksinkertainen johdotus: 1-Wire-väylä tarvitsee yksinkertaisimmillaan vain kaksi johtoa: yhden datan siirtoa varten ja toisen maayhteydeksi. Tämä tekee sen käytöstä erittäin yksinkertaista ja edullista.
  2. Matala tiedonsiirtonopeus: Väylä on suunniteltu matalan tiedonsiirtonopeuden sovelluksiin, ja se toimii yleensä nopeuksilla, jotka ovat tyypillisesti alle 16.3 kbps (kilobittiä sekunnissa).
  3. Laitteiden tunnistus: Jokaisella 1-Wire-laitteella on uniikki 64-bittinen sarjanumero, mikä mahdollistaa useiden laitteiden käytön samalla väylällä. Tämä sarjanumero koostuu laitetyypin koodista, yksilöllisestä numerosta ja tarkistussummasta.
  4. Virtalähde: Joissakin sovelluksissa 1-Wire-laitteet voivat saada virtansa suoraan datalinjasta (parasiittinen-virtakäyttö), jolloin erillistä virtajohtoa ei tarvita.
  5. Sovellukset: 1-Wire-tekniikkaa käytetään laajalti muun muassa antureissa (esim. lämpötila-anturit, kuten DS18B20), muisteissa, turvalaitteissa ja laitetunnisteissa.
  6. Yhteensopivuus: 1-Wire-väylää voidaan käyttää yhdessä mikro-ohjaimien ja tietokoneiden kanssa, ja sen käyttöön on saatavilla monia ohjelmisto- ja laitteistotukia.

1-Wire-väylän yksinkertaisuus, edullisuus ja luotettavuus tekevät siitä suositun valinnan moniin eri sulautettuihin järjestelmiin ja teollisiin sovelluksiin. 1-wire väylän maksimipituus on 300 metriä lineaaritopologialla 1-wire laitteiden lyhyillä liitynnöillä. Pitkillä liityntähaaroilla ja tähtitopologialla enintään 100 m.

Laitteen kytkeminen 1-Wire väylään

1-Wire väylässä on vain yksi väylää ohjaava laite, jota kutsutaan masteriksi/isännäksi (mikrokontrolleri tai PC tai jokin muu laite) ja loput kytkettävät laitteet ovat antureita tai muita toimilaitteita ja näitä kutsutaan slave/orja-nimityksellä. Master-slave välisestä toiminnasta on kirjoitettu vähän tuonnempana lisää. Itse väylälinjassa on yleensä vain kolme johtoa: maa, käyttöjännite ja data, mutta joskus näkee laitteita kytkettävän myös kahdella johtimella. Alla olevassa kuvassa on kytketty DS18B20 lämpötila-anturi ns. normaalisti kolmella johtimella ja vastaava kytkentä Arduinoon.

1-Wire laitteita voidaan kuitenkin myös kytkeä ns. parasiittiseen moodiin, jolloin tarvitaan vain kaksi johdinta itse anturille. Kytkentä tällöin on seuraavanlainen:

Parasiittisen poweroinnin kytkennässä anturiin syötetään käyttösähköt 4,7 kilo-ohmisen ylösvetovastuksen kautta ja samaa linjaa käytetään datan siirtoon. Anturissa itsessään on tarpeeksi kapasitanssia, jotta se kykenee kommunikoimaan ja mittaamaan lämpötilatietoa silloinkin kun datalinja on "0"-tilassa. Tietenkään datalinja ei voi koko aikaa olla "0" tilassa, vaan sitä pulssitetaan nollaan kommunikoidessa anturin kanssa. Kun anturi muuntaa lämpötilatietoa, väylää ei voi käyttää noin sekunnin (750 ms) aikana, muutoin anturi ei saa tarpeeksi virtaa jos dataväylä käy välillä nollassa. Kolmen johtimen kytkennässä tätä rajoitusta ei tietenkään ole.

1-Wire väylän toiminta lyhyesti

Väylällä ollessaan 1-Wire laitteet vastaavat isäntälaitteelle siinä järjestyksessä kuin ne on fyysisesti kytketty väylälle. Lyhimmän matkan päässä oleva orjalaite vastaa ensin, sitten seuraava jne. ellei isäntälaite spesifisesti määrää yksittäistä orjalaitetta vastaamaan.

Lyhyesti sanottuna toiminta menee periaatteessa aina näin:

  1. Master tekee väylälle resetin
  2. Orjalaitteet vastaavat länsäolopulssilla yksi kerrallaan
  3. Master valitsee yhden tai useamman orjalaitteen lähettämällä ROM-komennon väylälle
  4. Master lähettää MEMORY-komennon tai Command Coden ja orjalaite tai laitteet vastaavat tähän komentoon.
  5. Sykli alkaa alusta.

1-Wire väylän toiminta tarkemmin

Signalointi eli bittien ajoitus on väylällä jaettu 60 mikrosekunnin (uS) mittaisiin pätkiin tai aikaikkunoihin (slot), minkä aikana signaali vaihtaa tilaansa 0:n ja 1:n välillä. Kommunikointi tapahtuu aina master-laitteen vetäessä dataväylän ensin alustus eli reset-tilaan vähintään kahdeksan slotin eli 480 uS ajaksi. Tämä aloitussignaali tapahtuu aina kommunikaation alussa ja tämän aloitussignaalin avulla orjalaitteiden kellotus synkronoidaan, jotta bittien tulkinta tapahtuu väylällä oikein.

Reset-signaalin jälkeen master vapauttaa dataväylän takaisin 1-tilaan ja odottaa orjalaitteilta yhtä 0-pulssia per orjalaite. Orjalaite pitää läsnäolopulssia päällä vähintään 60 uS.

Kun reset-pulssi ja läsnäolopulssi on havaittu, voidaan alkaa tulkitsemaan väylän bittejä. Jokainen aikaikkuna (60 uS) vastaa yhtä bittiä. Jokaisen bitin alussa on 0-pulssi masterin aiheuttamana. Jos master haluaa kirjoittaa itse 0-pulssin väylälle, niin master pitää väylää tarpeeksi pitkään nollassa, jolloin orjalaitteet tulkitsevat sen 0-bitiksi. 1-bitissä master vapauttaa väylän aloituspulssin jälkeen, jolloin ylösvetovastus pitää väylän 1-tilassa ja orjalaitteet voivat tulkita 1-bitin. Alla on esitetty samat asiat kuvien kanssa.

Master 1-bitti

Master kirjoittaa 1-bitin väylälle vetämällä datalinjan 0-tilaan 1-15 uS mittaiseksi ajaksi, minkä jälkeen väylä vapautetaan loppupätkäksi, eli kyseinen 1-15 uS sisältyy 60 mikrosekunnin aikaikkunaan.

Master 0-bitti

Master kirjoittaa 0-bitin vetämällä dataväylän 0-tilaan enintään 60 uS mittaiseksi ajaksi.

Slave 0-bitti ja 1-bitti

Orjalaitteelta luetaan 0 tai 1, kun ensin master vetää datalinjan alas (aloituspulssi) ja vapauttaa väylän. Orjalaite pitää väylän 0-tilassa mikäli se haluaa kirjoittaa 0-bitin, muussa tapauksessa väylän annetaan olla ylösvetovastuksen (PU) varassa 1-tilassa. Isäntälaite tulkitsee orjalaitteen bitin noin 15 uS:n päästä aloituspulssin loppumisesta.

1-wire väylän ROM komennot

Jokainen 1-Wire laite sisältää uniikin 64-bittisen tunnistenumeron, joka on tallennettu laitteen lukumuistiin. Tätä numeroa voidaan käyttää, kun halutaan kohdistaa luku- tai kirjoituskomento suoraan kyseiseen laitteeseen, eli ROM-komentojen avulla ohjataan, mikä laite valitaan kommunikointia varten. Tunnistenumero koostuu kolmesta osasta, joista ensimmäiset 8-bittiä kertoo tuoteperheen koodin, seuraavat 48-bittiä on yksilöllinen sarjanumero ja lopuksi on 8-bittinen CRC-tarkistussumma, joka lasketaan ensimmäisistä 56:sta bitistä. ROM-komentoihin on istutettu joukko vakiokomentoja, jotka ovat kaikille laitteille valmistajasta riippumatta samoja. Kyseiset ROM-komennot on listattu alla olevaan taulukkoon.

KomentoHeksakoodiKäyttötarkoitus
READ ROM0x33Identifiointi
SKIP ROM0xCCJätä ID käyttämättä
MATCH ROM0x55Kohdista toiminto vain tiettyyn laitteeseen
SEARCH ROM0xF0Kerää kaikki ID:t väylältä
1-wire väylän komennot

READ ROM
Tällä komennolla voidaan lukea yksittäisen orjalaitteen 64-bittinen tunniste. Jos väylässä on useampia orjalaitteita, niin tunnistenumero on AND-operaatio kaikkien orjalaitteiden tunnisteiden kesken. Tämä komento lukee yhden 1-Wire-laitteen ROM-koodin. Tämä on hyödyllistä, kun väylässä on vain yksi laite, ja haluat tietää sen tunnisteen.

SKIP ROM
Tällä komennolla voidaan ohittaa ROM-koodin käsittely ja suoraan kommunikoida yhden laitteen kanssa, jos tiedetään, että väylässä on vain yksi laite. Tällä komennolla voidaan myös lähettää yksi ja sama komento usealle eri orjalaitteelle yhtäaikaa. 

MATCH ROM
Tämä komento valitsee tietyn 1-Wire-laitteen käyttämällä sen ROM-koodia. Tämän jälkeen kaikki viestintä tapahtuu vain kyseisen laitteen kanssa.

SEARCH ROM
Tämä komento käynnistää prosessin, jolla isäntälaite etsii ja tunnistaa kaikki väylässä olevat 1-Wire-laitteet. Tämän avulla voidaan selvittää, mitkä laitteet ovat kytkettynä väylään.

Koska 1-wire väylän laitteita on paljon erilaisia, ovat myös komennot ja käskyt erilaisia kullekin laitteelle. Onkin tärkeää lukea käytetyn anturin tai toimilaitteen datasivu huolella läpi, jotta laitettaa osataan käskyttää oikein.

1-Wire väylästä voit lukea tarkemmin lisää näistä osoitteista:
https://docs.arduino.cc/learn/communication/one-wire/
https://www.analog.com/media/en/technical-documentation/data-sheets/DS18B20.pdf
https://onlinedocs.microchip.com/pr/GUID-1618003F-992B-4E48-9411-5E5D5D952C06-en-US-3/index.html?GUID-EE2B21FC-9AA9-4C04-88EF-1951F703A56C
https://www.analog.com/en/resources/technical-articles/advanced-1-wire-network-driver.html