본문 바로가기
아날로그회로(Analog Circuit)/ADC관련

[ZSSC3241] OWI 통신 사용 방법 및 사용 전 절차

by linuxgo 2025. 8. 12.
반응형

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에서 설명된 대로, 안정적인 통신을 보장합니다. 절차는 다음과 같습니다:

  1. 하드웨어 구성 및 연결:
    • 필수 구성 요소:
      • 풀업 저항(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 참조).
  2. 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으로 유지.
  3. 파워온 및 초기화:
    • VDD 공급 후 tSTA1(2ms) 대기 (표 4).
    • 스타트업 윈도우(owi_su_length 설정, 최대 50ms) 내 OWI 시작 조건(저 펄스 10μs 이상) 전송하여 인터페이스 고정.
    • D2HEX 명령(Startup OWI)으로 OWI 인터페이스 초기화. 모든 모드(Sleep/Command/Cyclic)에서 가능.
  4. 모드 선택:
    • 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).
  5. 캘리브레이션 및 진단 확인:
    • 센서 오프셋/감도/온도 보상 계수(0AHEX ~ 13HEX) 설정(섹션 7).
    • B0HEX(CHECK_DIAG)로 연결/메모리 오류 확인(표 18).
    • 설정 후 CRC(90HEX) 계산.

2. OWI 통신 사용 방법

OWI 프로토콜은 마스터-슬레이브 구조로, 데이터시트 섹션 6.4.3과 애플리케이션 노트에서 설명된 대로 다음과 같습니다.

  1. 프로토콜 개요:
    • 아이들 상태: OWI 라인 풀업(VDD).
    • 시작 조건: 저 펄스(tOWI,START ≥10μs) 후 고 복귀.
    • 데이터 전송: 바이트(8비트, MSB 먼저). 비트 값은 듀티 사이클로 결정: 0(1/83/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).
  2. 명령 전송(마스터 → 슬레이브):
    • 시작 조건 → 슬레이브 주소(7비트) + 쓰기 비트(0) → 명령 코드(예: AAHEX) → 데이터(필요 시) → 정지 조건.
    • 예: A2HEX(원시 센서 데이터 요청).
  3. 데이터 읽기(슬레이브 → 마스터):
    • 시작 조건 → 슬레이브 주소 + 읽기 비트(1) → 상태 바이트 → 데이터(24비트, 3바이트) → ACK(마스터 저 펄스) → 정지 조건.
    • 데이터 반복: 끝나면 상태 → 센서 데이터 → 온도 데이터 반복.
  4. 타이밍 파라미터(표 24):
    • tOWI,START: 10~100μs.
    • tOWI,STOP: 1~10μs.
    • tOWI,IDLE: ≥10μs.
    • tOWI,BIT: 20~3000μs (풀업/캐패시턴스에 따라).
    • 듀티: tOWI,0 = 0.1250.375 × tBIT, tOWI,1 = 0.6250.875 × tBIT.
  5. 코드 예시(슈도코드, 데이터시트 기반):
    • 초기화:
      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에 적용 가능.
반응형