MCUS

제목[I2C] SDA 락업 해결2026-09-01 15:33
작성자 Level 10
첨부파일stm32_i2c_recover.zip (1.5KB)
  • I2C 버스에서 슬레이브 장치나 SDA 라인에 Lock-Up 이 발생했을 때,  마스터가 Clock (SCL) 을 최소 9번 이상 강제로 Toggle 하여 슬레이브가 남은 데이터를 모두 내보내고 버스를 해제 하도록 유도해야 함.

 

  • Field 에서 EOS (Electric Over Stress) 로 인해 슬레이브 Device 에서 SDA를 잡고 있을 경우 통신에 문제가 생기면 마스터는 이를 감지하여 반드시 복구 루틴을 가동해야 한다.

 

  • I2C 버스 복구 방법
    • SCL 9번 클럭 생성 (Clock Generation)
      • SDA 라인이 LOW 상태로 묶여 있으면, 마스터는 SCL 핀을 GPIO 출력으로 전환해 최소 9개의 클럭 펄스를 생성
      • 슬레이브는 8개의 클럭과 1개의 ACK/NACK 클럭을 받고 전송 상태를 초기화하여 SDA 라일을 Release 하게 됩니다.
    • STOP 조건 생성
      • 9개의 클럭 펄스 이후 마스터는 정상적인 I2C STOP 조건을 만들어 통신 버스를 완전히 리셋 합니다.
    • 하드웨어/소프트웨어 리셋
      • 위 방법으로 해결 되지 않으면, 슬레이브 장치의 전원을 껏다 켜거나 전용 리셋 핀이 있는 경우 펄스를 주어 하드웨어 적으로 재 부팅 합니다.

*** 첨부 코드는 stm32 에서 사용할 수 있는 recover 코드입니다.

#I2C
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)