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

ZSC31014 Sensor Signal Conditioner IC I2C 인터페이스로 센서 데이터 읽기 절차

by linuxgo 2025. 8. 2.

ZSC31014에서 **센서 데이터(브리지 데이터)**와 온도 데이터를 읽으려면 Normal Operation Mode(Start_NOM으로 진입)에서 동작해야 합니다. Normal Operation Mode에는 Update Mode와 Sleep Mode가 포함되며, 이 모드에서 I²C 또는 SPI를 통해 데이터를 읽을 수 있습니다. Command Mode에서는 센서 데이터와 온도 데이터를 읽을 수 없으며, 주로 EEPROM 읽기/쓰기 및 캘리브레이션 용도로 사용됩니다. 아래는 데이터시트(REN_ZSC31014_DST_20160120_1.pdf, 페이지 26~37)를 기반으로 한 상세 설명입니다.

ZSC31014 general working mode

1. Normal Operation Mode로 진입

  • 명령: Start_NOM (명령 코드: 80HEX, 데이터: 0000HEX)
  • 기능:
    • Command Mode에서 Normal Operation Mode로 전환.
    • EEPROM 서명(워드 12HEX)을 업데이트하여 무결성을 보장.
    • Normal Operation Mode에서는 Update Mode 또는 Sleep Mode로 동작하며, 센서 데이터(브리지)와 온도 데이터를 읽을 수 있음.
  • I²C 전송 형식 (페이지 36, Figure 3.9):
    1. 마스터: 슬레이브 주소(기본값: 28HEX, EEPROM 워드 02HEX 비트 [9:3]) + WRITE 비트(0).
    2. 슬레이브: ACK 응답.
    3. 마스터: 명령 코드 80HEX 전송.
    4. 슬레이브: ACK 응답.
    5. 마스터: 데이터 00HEX (상위 바이트) 전송.
    6. 슬레이브: ACK 응답.
    7. 마스터: 데이터 00HEX (하위 바이트) 전송.
    8. 슬레이브: ACK 응답 후 Normal Operation Mode로 전환.
  • 실행 시간:
    • 일반: 약 10μs.
    • EEPROM 서명 업데이트 포함 시: 약 15ms (페이지 37, Table 3.6).
  • 참고:
    • 전원 켜짐(POR) 후 디바이스는 기본적으로 Normal Operation Mode로 시작하므로, Command Mode를 사용하지 않았다면 Start_NOM 명령 없이 바로 데이터 읽기 가능.
    • Command Mode에서 작업(예: EEPROM 쓰기) 후에는 반드시 Start_NOM을 실행해야 센서/온도 데이터 읽기가 가능.

2. 센서 데이터와 온도 데이터 읽기

Normal Operation Mode에서 센서 데이터(브리지 데이터, 14비트)와 온도 데이터(8비트 또는 11비트)를 읽는 방법은 동작 모드(Update Mode 또는 Sleep Mode)에 따라 다릅니다.

2.1. Update Mode에서 데이터 읽기

  • 설명:
    •    Update Mode에서는 ZSC31014가 설정된 주기(Update Rate, EEPROM 워드 01HEX 비트 [5:4])에 따라 자동으로 브리지와 온도 데이터를 측정하고 보정.
    •    데이터는 I²C 또는 SPI를 통해 Read_DF 명령으로 읽음.
  • EEPROM 설정:
    • 워드 01HEX:
      •    Update_Rate (비트 [5:4]): 업데이트 주기 설정.
        •    1MHz 클럭: 1.6ms, 5ms, 25ms, 125ms (페이지 29, Table 3.2).
        •    4MHz 클럭: 0.5ms, 1.5ms, 6.5ms, 32ms.
      •    Temp_Res (비트 2): 온도 데이터 해상도(0 = 8비트, 1 = 11비트).
  • I²C로 읽기 (페이지 33~34, Figure 3.6):
    1. 마스터: 슬레이브 주소 + READ 비트(1).
    2. 슬레이브: ACK 후 데이터 패킷 전송:
      •    Read_DF2: 2바이트 (브리지 데이터 14비트).
      •    Read_DF3: 3바이트 (브리지 데이터 + 온도 데이터 8비트).
      •    Read_DF4: 4바이트 (브리지 데이터 + 온도 데이터 11비트).
    3. 데이터 구조:
      •    1바이트: {S[1:0], B[13:8]} (상태 비트 + 브리지 상위 6비트).
      •    2바이트: {B[7:0]} (브리지 하위 8비트).
      •    3바이트: {T[10:3]} (온도 상위 8비트).
      •    4바이트: {T[2:0], xxxxx} (온도 하위 3비트 + 5비트 무시).
    4. 마스터: 각 바이트 수신 후 ACK, 마지막 바이트 후 NACK + Stop 조건.
  • SPI로 읽기 (페이지 35, Figure 3.8):
    1. 마스터: SS 핀을 낮춘 후 SCLK으로 데이터 요청.
    2. 슬레이브: 4바이트 데이터 패킷 전송 (구조는 I²C와 동일).
    3. 마스터: 2바이트(브리지), 3바이트(8비트 온도), 또는 4바이트(11비트 온도) 읽기.
  • 상태 비트 (페이지 24, Table 2.9):
    •    00: 정상 데이터.
    •    10: Stale 데이터(이미 읽은 데이터).
    •    11: 진단 오류(예: EEPROM 무결성 오류, 센서 단락).

2.2. Sleep Mode에서 데이터 읽기

  • 설명:
    •    Sleep Mode에서는 디바이스가 저전력 상태로 대기하며, Read_MR 또는 Write_MR 명령으로 측정을 시작한 후 데이터를 읽음.
    •    전형적인 전류 소모: 25°C에서 <2μA (페이지 10).
  • EEPROM 설정:
    •    워드 01HEX에서 Update_Rate 설정은 Sleep Mode에서는 무시됨.
    •    워드 0FHEX (B_Config): Bsink (비트 9)를 활성화(1)하면 저전력 모드에서 브리지 전원 주기적 끄기/켜기 지원(페이지 18).
  • I²C로 읽기 (페이지 33~36):
    1. Read_MR (페이지 34, Figure 3.7):
      •    마스터: 슬레이브 주소 + READ 비트(1).
      •    슬레이브: ACK 후 측정 시작.
      •    응답 시간: 1MHz 클럭에서 4.5ms, 4MHz 클럭에서 1.5ms (페이지 31, Table 3.4).
      •    데이터는 즉시 반환되지만 "stale"일 수 있음(상태 비트 10).
    2. Write_MR (페이지 36, Figure 3.9):
      •    마스터: 슬레이브 주소 + WRITE 비트(0).
      •    슬레이브: ACK 후 브리지 측정 시작.
      •    응답 시간: 1MHz 클럭에서 1.5ms, 4MHz 클럭에서 0.5ms.
    3. Read_DF:
      •    Write_MR 후 Read_DF2/3/4로 데이터 읽기 (구조는 Update Mode와 동일).
      •    첫 번째 Write_MR은 초기화되지 않은 온도/AZ 데이터로 인해 유효하지 않을 수 있음(페이지 31).
  • SPI로 읽기 (페이지 34~35):
    1. Read_MR:
      •    마스터: SS 핀을 최소 8μs 동안 낮춘 후 올림.
      •    측정 시작 (응답 시간 동일).
    2. Read_DF:
      •    SCLK으로 4바이트 데이터 패킷 읽기 (구조는 I²C와 동일).
  • 참고:
    •    Sleep Mode에서는 Read_MR 또는 Write_MR로 측정을 요청해야 하며, INT/SS 핀이 데이터 준비 시 상승(페이지 34).

3. 주의사항

  • Command Mode에서는 데이터 읽기 불가:
    •    Command Mode(명령 코드 A0HEX)에서는 EEPROM 읽기/쓰기 및 캘리브레이션 명령만 가능하며, 센서/온도 데이터는 읽을 수 없음(페이지 26, Table 3.1).
    •    데이터 읽기를 위해 반드시 Start_NOM(80HEX)으로 Normal Operation Mode로 복귀.
  • EEPROM 설정 확인:
    •   워드 01HEX:
      •    Output_Mode (비트 0): 0 = I²C, 1 = SPI.
      •    Temp_Res (비트 2): 온도 데이터 해상도 설정.
      •    ClkSpeed (비트 3): 1MHz(저전력) 또는 4MHz(고속).
    •   워드 0FHEX (B_Config): PreAmp_Gain, A2D_Offset 등으로 센서 신호 범위 조정(페이지 14~16).
  • 첫 번째 데이터 유효성:
    •    Sleep Mode에서 첫 번째 Write_MR 후 데이터는 초기화되지 않은 Auto-Zero/온도 값으로 인해 부정확할 수 있음. 두 번째 Write_MR부터 유효 데이터 확인(페이지 31).
  • 진단 상태:
    •    데이터 패킷의 상태 비트(S[1:0] = 11)가 설정되면 EEPROM 무결성 오류 또는 센서 단락 가능(페이지 24). 이 경우 Start_NOM으로 서명 업데이트 후 재시도.

4. 예시: Sleep Mode에서 I²C로 센서/온도 데이터 읽기

  1. EEPROM 설정 확인:
    •    워드 01HEX: Output_Mode = 0 (I²C), ClkSpeed = 0 (1MHz), Temp_Res = 1 (11비트 온도).
    •    워드 02HEX: Slave_Addr = 28HEX.
    •    워드 0FHEX: PreAmp_Gain = 010 (6), A2D_Offset = 1000 (-1/2 ~ 1/2).
  2. Command Mode에서 Normal Operation Mode로 전환 (필요한 경우):
    •    I²C 전송: [Slave_Addr, W], 80HEX, 00HEX, 00HEX.
    •    대기: 15ms (서명 업데이트 포함).
  3. Sleep Mode에서 데이터 읽기:
    •    Write_MR: [Slave_Addr, W] 전송, 1.5ms 대기.
    •    Read_DF4: [Slave_Addr, R], [S[1:0], B[13:8]], [B[7:0]], [T[10:3]], [T[2:0], xxxxx].
    •    상태 비트 확인: S[1:0] = 00 (정상 데이터).
  4. 결과: 브리지 데이터(14비트)와 온도 데이터(11비트) 수신.

5. 추가 참고

  • Update Mode vs. Sleep Mode:
    •    Update Mode: 연속 측정, 높은 전력 소모(70μA~2.5mA, 페이지 7).
    •    Sleep Mode: 저전력(<2μA), 요청 시 측정.
    •    응용에 따라 적절한 모드 선택(예: 배터리 구동 장치 → Sleep Mode).
  • 캘리브레이션:
    •    센서/온도 데이터가 정확하지 않으면 EEPROM 워드 03HEX~09HEX (Gain_B, Offset_B, Tcg, Tco 등) 재설정 필요(페이지 44~48).
    •    IDT 제공 소프트웨어로 계수 계산(페이지 45).
  • 문서: ZSC31014 Technical Note-Detailed Equations for Calibration Math 요청(페이지 56).