접근법
어디다 사용 할까?
굳이 왜 사용 할까?
1-wire 통신
> 딱 두선으로 전원공급 + 양방향 통신 가능
// POE 있으면 좋음
> 전원공급이 됨
nomal power mode / parasite power mode
1. 장거리는 힘듦 ( 노이즈에 약함 )
> 신호선이 하나 > GPIO
선이 길어질수록 전압 떨어짐 > 멀리까지 전달x
2. 주소 체계 방식
하나의 GPIO로 여러 칩을 연결함
> 어떤 칩이 보냈는지 알아내기 위해
> 주소 체계 방식 사용
3. 빠른 속도 불가 (time base)
클럭이 없음.. >time base (baud rate)
4. 간단해서 많이 사용 + 혼합 사용도 가능
프로토콜
1. 물리적인 통식 방식만을 규정한 프로토콜
SPI,
2. 물리적 + 소프트웨어 적인 규칙 까지 정한 프로토콜
1- wire
3. 소프트웨어 적인 규칙만 정의한 프로토콜
http, 모드버스, tcp
> 4. 레이어(상하관계) 가 있는 프로토콜
ex) tcp 위에 http
1-wire
전압 + 시간 을 보내야함
ex) 전압
3v - 1
4v - 2
5v- 3
>> 노이즈에 말도안되게 취약
전선의 길이에도 취약 ( 전선이 길수록 전압 하강)
ex) 전압
5v, 0v 둘만 사용
평소 HIGH > MASTER
initialization timming ( 시작 )
> LOW , 480μs ( 전압 + 시간 )
> HIGH , 15~60 μs ( slave칩 응답 대기,
// 실제로는 1010 딱딱 떨어지지않음)
> SLAVE chip
> HIGH , 60~240μs
명령어 종류
마스터가 통신 시작을 알림 > presence pulse 수신
> 명령어
slave : ROM code(주소)를 갖는다
ROM command : 장치를 선택하기위한
Function commnad : 장치에게 특정동작 수행하도록
ROM명령어 종류
Search ROM : 0xF0
1-wire에 연결된 모든 slave 장치들의 ROM code (주소) 를 읽는다
Match ROM : 0x55
> 64bit ROM code를 보냄
> 이에 맞는 slave에 접근
> 나머지 slave : reset pulse 대기
Skip ROM : 0xCC
모든 slave 장치에게 동시에 comand를 보냄
Alarm search : 0xEC
slave 장치의 alarm flag가 set인지 확인
Function 명령어
제조사마다 다름 , 프로토콜에 따라 Function 까지 정의된 경우가 있음
> 그러면 복잡혀
DS18B20 의 메모리는 scratchpad 라고 부름
메모리는 우리가 생가가하는 물리적인 메모리가 아닌경우가 많음
ex) 1~10000번지 array 를 만들어버리고
1000번지라고 1000번지에 접근하는것이 아니라
a[3] 을 1000번지라고 퉁침
Conver T : 0x44
온도의 변환 시작.
신호선으로 전원 공급 > HIGH >온도변환중 전원공급
[온도의 변환시간]
93.75ms (9bit) - 750ms (12bit)
>컴퓨터에게 있어서는 엄청나게 느린시간..
> 절대 빠른 통신 방법이 될 수 없음
Write scratchpad : 0x4E
3byte 의 데이터를 장치의 scaratchpad에 씀
Read scratchpad : 0xBE
scaratchpad값을 읽어옴
copy scratchpad : 0x48
값을 EEPROM으로 저장
> 전원필요
> 신호선을 10μs 동안 HIGH 유지
recall E^2 : 0xB8
현재 alarm 쓰레스 홀드 값(TH, TL) configuration data
> EEPROM에서 불러옴 > scratchpad 2,3,4 byte에 기록
// 쓰레스 홀드 : 화를 내게 하는 기준값
read power supply : 0xB4
전원공급 출처 확인 VDD핀 or 신호선
데이터 주고 받는 방법
한 slot (간격)에 한 bit 를 보냄
slot 의 시간 간격 : 1μs 이상
0 전송 : 60~120μs LOW
1 전송 : 1μs : LOW
시간에 따라 0,1 구분
slave : 15~60μs 사이에 샘플링후 값 읽기
+ slave : Master가 1μs 이상 LOW 로 내려야 전송가능
+ slave : 0 표현 >15μs 동안만 LOW로 내릴 수 있음
> Master 는 15μs 동안 값을 읽어와야함
>> 소스에 다 있긴함