반응형
ZSSC3241 센서 신호 컨디셔너 IC의 One-Wire Interface (OWI)는 아날로그 출력(AOUT 핀)과 디지털 인터페이스를 공유하는 비용 효과적인 1선 통신 방식으로, 주로 캘리브레이션(교정)과 데이터 읽기에 사용됩니다. OWI 프로토콜은 I²C에서 유래했으나, 듀티 사이클(duty ratio)을 이용해 비트를 구분하며, 슬레이브-마스터 구조를 따릅니다. 아래에서 OWI 사용 전 절차와 사용 방법을 데이터시트 및 관련 문서(예: ZSSC3241 데이터시트, ZSSC4151 애플리케이션 노트)를 기반으로 상세히 설명합니다. ZSSC3241 데이터시트(2023년 7월 버전)와 유사 IC(ZSSC4151)의 OWI 설명이 적용 가능하며, 프로토콜은 거의 동일합니다.
1. OWI 통신 사용 전 절차
OWI를 사용하기 전에 ZSSC3241의 하드웨어 연결, NVM(Non-Volatile Memory) 설정, 인터페이스 초기화, 모드 선택을 수행해야 합니다. 이는 데이터시트 섹션 6.4.3과 6.6.2에서 설명된 대로, 안정적인 통신을 보장합니다. 절차는 다음과 같습니다:
- 하드웨어 구성 및 연결:
- 필수 구성 요소:
- 풀업 저항(ROWI,PULLUP): AOUT 핀을 VDD(2.7V ~ 5.5V)에 연결. 추천 값: 1.8kΩ ~ 10kΩ (속도와 EMC에 따라 선택). 낮은 값(예: 1.8kΩ)은 고속 통신에 유리하지만 전력 소비 증가.
- 라인 캐패시턴스(COWI,LINE): EMC 강화 위해 추가 (예: 1nF ~ 51nF). 최소 비트 기간(tOWI,BIT)은 풀업 저항과 캐패시턴스에 따라 결정(표 23: 예, 1.8kΩ + 1nF = 20μs).
- OWI 마스터: 마이크로컨트롤러(MCU, 예: STM32) GPIO를 Open-Drain 모드로 연결. 마스터는 동적 드라이빙(OWI 슬레이브 출력 시 스위치 온) 지원.
- AOUT 핀(핀 16): OWI와 아날로그 출력 공유. 동시 사용 시 NVM SSF1의 owi_su_case 비트(비트 3)를 0으로 설정하여 스타트업 윈도우 활성화.
- 기타 연결: VDD(핀 19), VSS(핀 18), 센서 입력(INP/INN 등). 외부 JFET 사용 시 LDOctrl(핀 20) 설정(섹션 6.7).
- EMC 고려: 노이즈 환경에서 캐패시턴스 추가로 RF 간섭 줄임. 최대 데이터 레이트: 0.33 ~ 10kBit/s (표 24).
- 테스트 회로 예시: ZSSC3241 AOUT → ROWI,PULLUP (VDD 연결) → COWI,LINE (그라운드 연결) → MCU GPIO (그림 14 참조).
- 필수 구성 요소:
- NVM(Non-Volatile Memory) 구성:
- NVM 레지스터(00HEX ~ 35HEX)를 Command Mode에서 설정. OWI 관련 주요 레지스터:
- SSF1 (03HEX): owi_off(비트 13)=0 (OWI 활성화), owi_su_length(비트 2)=0 (스타트업 윈도우 50ms), owi_su_case(비트 3)=0 (아날로그 출력 동시 활성화).
- SSF2 (04HEX): cont_ANAoutn(비트 4)=0 (아날로그 출력 연속 모드, OWI 공유 시 필수).
- 슬레이브 주소 (02HEX): 비트[6:0]로 OWI 슬레이브 주소 설정 (기본: 0x28).
- 절차: Command Mode에서 NVM 쓰기(40HEX + 주소) 명령 사용. 쓰기 후 CRC 계산(90HEX)으로 무결성 확인. 잠금(lock 비트, SSF1 비트 0)=0으로 유지.
- NVM 레지스터(00HEX ~ 35HEX)를 Command Mode에서 설정. OWI 관련 주요 레지스터:
- 파워온 및 초기화:
- VDD 공급 후 tSTA1(2ms) 대기 (표 4).
- 스타트업 윈도우(owi_su_length 설정, 최대 50ms) 내 OWI 시작 조건(저 펄스 10μs 이상) 전송하여 인터페이스 고정.
- D2HEX 명령(Startup OWI)으로 OWI 인터페이스 초기화. 모든 모드(Sleep/Command/Cyclic)에서 가능.
- 모드 선택:
- Command Mode(A9HEX): OWI 설정 및 캘리브레이션에 필수. Sleep/Cyclic에서 전환.
- Cyclic Mode(ABHEX): 연속 측정 시 사용. 진입 전 NVM 설정 완료.
- Sleep Mode(A8HEX): 저전력. OWI와 결합 시 owi_off=0 필수, 하지만 Sleep Mode에서 OWI는 제한적.
- 모드 전환 후 상태 바이트(표 19)로 확인(비트[4:3]: 00=Command, 10=Cyclic).
- 캘리브레이션 및 진단 확인:
- 센서 오프셋/감도/온도 보상 계수(0AHEX ~ 13HEX) 설정(섹션 7).
- B0HEX(CHECK_DIAG)로 연결/메모리 오류 확인(표 18).
- 설정 후 CRC(90HEX) 계산.
2. OWI 통신 사용 방법
OWI 프로토콜은 마스터-슬레이브 구조로, 데이터시트 섹션 6.4.3과 애플리케이션 노트에서 설명된 대로 다음과 같습니다.
- 프로토콜 개요:
- 아이들 상태: OWI 라인 풀업(VDD).
- 시작 조건: 저 펄스(tOWI,START ≥10μs) 후 고 복귀.
- 데이터 전송: 바이트(8비트, MSB 먼저). 비트 값은 듀티 사이클로 결정: 0(1/8
3/8), 1(5/87/8). - 비트 기간(tOWI,BIT): 이전 비트의 0.5~1.5배 유지 (표 24).
- 정지 조건: 비트 기간 1.5배 이상 증가 또는 0.5배 이하 감소, 또는 20ms 이상 일정 레벨.
- CRC: 보호된 통신 시 CRC-8 사용(폴리노미얼 x⁸ + x² + x + 1, 시드 A5HEX).
- 명령 전송(마스터 → 슬레이브):
- 시작 조건 → 슬레이브 주소(7비트) + 쓰기 비트(0) → 명령 코드(예: AAHEX) → 데이터(필요 시) → 정지 조건.
- 예: A2HEX(원시 센서 데이터 요청).
- 데이터 읽기(슬레이브 → 마스터):
- 시작 조건 → 슬레이브 주소 + 읽기 비트(1) → 상태 바이트 → 데이터(24비트, 3바이트) → ACK(마스터 저 펄스) → 정지 조건.
- 데이터 반복: 끝나면 상태 → 센서 데이터 → 온도 데이터 반복.
- 타이밍 파라미터(표 24):
- tOWI,START: 10~100μs.
- tOWI,STOP: 1~10μs.
- tOWI,IDLE: ≥10μs.
- tOWI,BIT: 20~3000μs (풀업/캐패시턴스에 따라).
- 듀티: tOWI,0 = 0.125
0.375 × tBIT, tOWI,1 = 0.6250.875 × tBIT.
- 코드 예시(슈도코드, 데이터시트 기반):
- 초기화:
void OWI_Init() { // GPIO Open-Drain 설정 SetPinMode(AOUT, OPEN_DRAIN); SetPullUp(AOUT, ENABLE); }
- 시작 조건:
void OWI_Start() { SetPinLow(AOUT); Delay(10us); SetPinHigh(AOUT); Delay(10us); }
- 비트 쓰기:
void OWI_WriteBit(uint8_t bit) { SetPinLow(AOUT); Delay(bit ? 14us : 4us); // 듀티 사이클 SetPinHigh(AOUT); Delay(20us - (bit ? 14us : 4us)); }
- 데이터 읽기:
uint8_t OWI_ReadByte() { uint8_t byte = 0; for (int i = 7; i >= 0; i--) { SetPinLow(AOUT); Delay(2us); SetPinHigh(AOUT); Delay(10us); // 중간 샘플링 byte |= (ReadPin(AOUT) << i); Delay(8us); } return byte; }
- 전체 통신 예:
void SendCommand(uint8_t cmd) { OWI_Start(); OWI_WriteByte((ADDR << 1) | 0); // 쓰기 OWI_WriteByte(cmd); OWI_Stop(); } uint32_t ReadData() { OWI_Start(); OWI_WriteByte((ADDR << 1) | 1); // 읽기 uint8_t status = OWI_ReadByte(); uint32_t data = (OWI_ReadByte() << 16) | (OWI_ReadByte() << 8) | OWI_ReadByte(); OWI_WriteBit(0); // ACK OWI_Stop(); return data; }
- 초기화:
3. 추가 주의사항
- 오류 처리: 상태 바이트 비트 2(메모리 오류), 비트 1(연결 오류) 확인. B0HEX로 상세 진단.
- 동시 사용: 아날로그 출력과 OWI 공유 시 SSF2의 cont_ANAoutn=0, AOUT_setup 설정.
- 테스트: 오실로스코프로 AOUT 신호 확인. 스타트업 윈도우 내 초기화 실패 시 POR 재실행.
- 유사 IC 비교: ZSSC4151의 OWI는 CRC-8 보호와 스타트업 윈도우(50ms)가 유사하며, ZSSC3241에 적용 가능.
반응형
'아날로그회로(Analog Circuit) > ADC관련' 카테고리의 다른 글
[ZSSC3123]Command List and Encodings 상세 분석 (0) | 2025.08.13 |
---|---|
[ZSSC3123] Analog Front End 설정 방법 (0) | 2025.08.13 |
[ZSC31014] 아두이노 I2C로 센서 데이터 읽기 및 EEPROM 설정 코드 구현 (0) | 2025.08.12 |
[ZSSC3241] OWI 통신에서 사용할 수 있는 명령 모드 설명 (0) | 2025.08.12 |
[ZSSC3240]STM32 I2C 인터페이스 코드 구현 가이드 (0) | 2025.08.12 |
[ZSSC3240] Command List 한글 번역 및 추가 설명 (0) | 2025.08.11 |
[ZSSC3241] C#에서 calibrationL6.dll 사용법 (Using C/C++ DLL in C#: Implementing 7-Point Calibration with calibrationL6.dll) (0) | 2025.08.10 |
[ZSSC3241]OWI 통신 절차 및 코드 구현 (ZSSC3241 OWI Communication Procedure and Code Implementation) (0) | 2025.08.10 |