1) Reset pulse(480us동안 HIGH에서 LOW로;slave의 목소리를 듣기 위해 준비)
2) presence pulse(60~240us동안 HIGH에서 LOW로;slave가 Master에게 존재한다고 신호를 보냄)
우리는 온도 세서 한 개만 사용하지만 버스에 장치가 4개 붙어있다고 가정해본다.
//One-Wire에서는 주소체계가 8byte이므로 bit수는 64개다.
ROM1 00110101.....
ROM2 10101010.....
ROM3 11110101.....
ROM4 00010001.....
경우의 수
00 : 연결된 장치들의 비트가 1,0이 섞여 있음
01 : 연결된 장치들의 비트가 모두 0임
10 : 연결된 장치들의 비트가 모두 1임
11 : 연결된 장치가 없음
1) Search ROM(0xF0)를 보내서 주소를 싹 모은다.
2) 비트를 읽어 들이는데 방법이 독특하다.(첫 번째 비트는 그냥 읽고, 그 다음에 보수를 취한다음 경우의 수를 구한다)A) Master가 0을 보내면 ROM1(0)과 ROM4(0)가 반응할 것이고 ROM2(1), ROM3(1)는 반응하지 않을 것이다. 그리고 (0,0)인 분기점이 된다.(0이 우선순위)
B) 또 Master가 0을 보내면 ROM1(0)과 ROM4(0)가 반응할 것이고, Master는 "두 장치가 모두 0이구나"라고 인식을 하게 된다. 경우의 수에 따라 "0,1"이 될 것이다.
C) 다시 한번 Master가 0을 보내게 된다. 하지만 ROM1(1)과 ROM4(0)는 서로 비트가 다르므로 ROM1은 반응하지 않게 된다. 경우의 수는 (0,0)이고 분기점이 된다.
D) 이때부터 ROM4는 "000"이후로 꾸준히 2bit씩 읽는다.
F) 주소는 8byte로 이뤄져 있기 때문에 64bit가 될 때 까지 read할 것이다. 64bit까지 읽은 주소는 저장을 한 다음, call하고 싶을때 그 주소를 부른다.
3) 또 다른 주소를 얻고 싶다면 경우의 수가 (0,0)인 분기점을 찾으면 된다. 아까 ROM1(1), ROM4(0)일때 Master가 0을 보냈다면 이번에는 Master가 1을 보낸다.
결론적으로 경우의 수와 Master가 보내는 신호(0,1 ;0이 우선순위)에 따라 ROM의 주소가 결정될 것이다. 그리고 경우의 수가 (0,0)인 지점은 ROM이 1혹은 0이 섞여 있기 때문에 분기점이 될 것이고, 다른 장치의 주소를 찾는데 힌트를 줄것이다.