1-Wire 통신 (DS18B20)

머피의 법칙·2025년 1월 20일

STM32

목록 보기
3/3

개요

1-wire bus를 사용해서 데이터의 송/수신을 모두 처리한다.

따라서 1개의 GPIO 핀으로 입/출력 모드를 번갈아서 사용하며 통신한다.

데이터 통신 방법

  • MASTER
    1 slot에 1bit씩 데이터를 전송한다. slot의 시간 간격은 1µs 이상이다.

    1을 전송할 때는 1µs 동안 전압을 low로 유지한다.
    0을 전송할 때는 60µs~120µs 동안 전압을 low로 유지한다.

  • SLAVE
    slave는 master가 1µs 이상 신호선을 low로 내려야 데이터 전송이 가능하다.

    1을 전송할 때는 1µs 동안 전압을 low로 유지한다.
    0을 전송할 때는 15µs 동안만 low로 내린다. 따라서 master는 15µs안에 값을 읽어야한다.

Initialization

통신 시작은 Master에서만 가능하다.

통신을 시작하고 싶다면, Master에서 전압을 480µs 동안 전압을 LOW로 낮췄다가 HIGH로 올린다(reset pulse).

DS18B20이 rising edge를 탐지하면, 15µs~60µs동안 대기했다가 60µs~240µs동안 전압을 LOW로 낮춰서 존재를 알린다(presence pulse).

ROM Comand

Initialization이후에 Master장치는 ROM Command를 통해서 slave 장치들을 구분하거나 선택할 수 있다.

SEARCH ROM (0xF0)

bus에 존재하는 모든 slave device들의 ROM code를 받아오기 위해서 사용하는 명령어이다.

단 하나의 slave device만 bus에 연결된 경우, READ ROM 명령어를 통해서 ROM code를 받아오는게 효율적이다.

slave device들의 ROM code를 받아오는 과정은 다음과 같다.

slave들의 ROM code가 다음과 같다고 가정한다.

ROM1 00110101…

ROM2 10101010…

ROM3 11110101…

ROM4 00010001…

master가 0xF0를 전송하면 각 slave들은 첫 비트를 전송한다.

각 slave들은 ROM1 : 0, ROM2 : 1, ROM3 : 1, ROM4 : 0을 master에게 전송한다.
동시에 전송된 0110은 master에서 0으로 읽히게 된다.

다음으로 각 slave들은 첫 비트의 보수를 전송한다.

각 slave들은 ROM1 : 1, ROM2 : 0, ROM3 : 0, ROM4 : 1을 master에게 전송한다.
동시에 전송된 1001은 master에서 0으로 읽히게 된다.

master는 위의 두 번의 통신을 통해서 경우의 수를 계산할 수 있다.

00 : 최소 2개 이상의 slave가 연결되어있고, slave들의 비트가 1,0이 섞여있다.
01 : 연결된 slave들의 비트가 모두 0이다.
10 : 연결된 slave들의 비트가 모두 1이다.
11 : 연결된 slave가 존재하지 않는다.

master가 00을 수신한 경우, 해당 자리의 bit를 체크해두고 0을 송신한다.
0을 수신한 slave들은 해당 자리의 bit가 0인 경우만 남고 1인 slave들은 해당 자릿수로 돌아오기까지 대기한다.

위의 과정을 반복하면 아래와 같은 트리 구조가 그려지게된다.

READ ROM (0x33)

bus에 slave device가 단 하나만 존재할 때 사용할 수 있다.

SEARCH ROM 명령어의 ROM code 탐색과정 없이 slave device의 ROM code를 읽을 수 있다.

MATCH ROM (0x55)

MATCH ROM 명령어와 ROM code를 보내서 slave device를 선택한다.

선택된 slave device는 응답을 하고, 나머지 slave device들은 reset pulse가 올 때까지 대기한다.

SKIP ROM (0xCC)

모든 slave device에게 동시에 command를 보낸다.

Function Command

제조사마다 다르다. 아래는 DS18B20 기준이다.

DS18B20에는 scratchpad라고 부르는 메모리가 존재한다.

Master device는 function command를 통해서 scratchpad의 정보를 read/write할 수 있다.

CONVERT T (0x44)

DS18B20이 온도 변환을 수행한다.

변환도니 온도는 scratchpad memory의 2byte register에 저장된다.

parasite mode로 작동하는 경우, command 직후 10µs이내에 전압을 high로 올려서 전원을 공급해야한다.

WRITE SCRATCHPAD (0x4E)

3Byte의 데이터를 scratchpad에 write한다.

READ SCRATCHPAD (0xBE)

scratchpad의 값을 읽어온다.

0개의 댓글