[STM32] 시리얼 통신_I2C란?

이채윤·2022년 4월 15일
0

임베디드

목록 보기
15/70

[I2C란?]

  • 칩간의 통신을 의미한다.
  • I2C 통신은 2개의 선을 이용하는 통신 방식
  • 하나의 마스터와 여러개의 슬레이브 기기가 물려 통신이 가능
  • 클럭 신호를 사용하는 동기식 통신 방식이라 시간에 자유로움
  • 슬레이브 선택을 위해 항상 주소 데이터가 붙기에 긴 데이터를 전송 하기엔 부적합
  • Inter-Integrated Circut(I2C)는 IC 사이 통신 링크를 제공하는 양방향 2와이어 직렬 버스이다.
  • 즉, 두가닥으로 직렬 통신을 하는 통신프로토콜 이다.

  • 첫번째 가닥은 SDA 선이다. 이는 데이터를 주고 받기 위한 선이다.
  • 두번째 가닥은 SCL 선이다. 이는 타이밍을 동기화 하기 위한 클럭 선이다.
  • 하나의 마스터와, 다른 하나의 슬레이브로 구성이 된다. 그리고 슬레이브는 127개까지 구성이 가능하다.
  • 즉, 메인 ECU가 있으면, 그 외 여러가지 디바이스들이 묶여 통신이 가능 하다는 이야기 이다.

  • I2C 사용 시에 주의 해야 할 점은 '풀업 저항이다. 위 그림의 Rp 두개가 저항이다.
  • 이 저항을 다는 이유는 I2C 통신을 위해 SDA선과 SCL 선이 모두 기본으로 High 상태가 되어야 하는데, 풀업 저항은 이를 High 상태로 만들어 준다.
  • 또한, 한가닥의 선우로 Tx, Rx를 하기 때문에 Floating 현상이 발생 함을 방지 하기 위해 풀업 저항을 달기도 한다. (Tx = 송신, Rx = 수신)
  • 데이터를 전송 또는 수신 할건지는 마스터에서 주도한다. 그리고 데이터를 송/수신 할때 반드시 슬레이브 주소를 마스터에 명시 해 두어야 통신이 된다.

<동기(synchronous)란?>

  • 동기는 말 그대로 동시에 일어난다는 뜻
  • 요청과 그 결과가 동시에 일어난다는 약속인데, 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 합니다.

<마스터와 슬레이브란?>

  • I2C 통신에는 마스터와 슬레이브라는 개념이 존재합니다. 통신이라는 것 자체가 2개 이상의 장치가 데이터를 주고 받는건데 I2C 통신은 어떤 장치가 다른 장치에게 명령을 하며(Master) 명령을 받은 장치(Slave)는 명령어에 따라 응답을 해주기 때문입니다.
  • 슬레이브 장치는 어떠한 데이터를 먼저 전송할 수 없으며 항상 마스터의 신호에 따라 응답합니다.
  • 마스터 장치에는 여러개의 슬레이브 장치를 연결할 수 있는데 이때 슬레이브 장치를 구분하는 것은 슬레이브 장치의 고유 주소로 구분합니다.

[데이터 통신]

  • 위의 SDA와 SCL은 위에서 잠깐 언급한거와 마찬가지로 풀업저항에 의해 기본 High 이다.
  • 그러다 SCA신호가 LOW로 떨어질때가 시작 신호(S)라고 판단한다.
  • 그 후 SCL선으로 클럭 신호가 만드어지는데, 클럭 신호가 LOW일때가 SDA 신호를 비트 신호로 바꾸는 시간이다.
  • 클럭 신호가 High 일때가 SDA 신호를 읽는 시간이다. (다시 SCL 신호가 Low가 되면 비트신호로 바꾸고 다시 High가 되면 다시 읽고, 이렇게 반복 한다.)
  • 한 클럭당 한 비트 데이터 신호를 만든다. 모든 비트의 전송이 끝난 후 SCL 신호가 High가 되면 SDA 신호 역시 High로 되어 정지 신호를 만든다.
  • 시작 신호 뒤 나오는 첫 7비트는 슬레이브의 주소값이다. 8번째 비트는 데이터를 읽어올지 또는 쓸지를 나타내는 신호 비트이다.

<쓰기/읽기>

  • 슬레이브의 주소 값과 읽기/쓰기 비트는 마스터에서 생성 가능하다.
  • 쓰기의 경우엔 마스터에서 데이터를 생성 해야 한다.
  • 읽기의 경우엔 슬레이브에서 데이터를 생성 해야 한다. 8비트 데이터 전송 후 슬레이브에서 응답신호(ACK)를 만들어 수신을 확인해준다.
  • 응답 신호는 기본적으로 LOW여야 하며 만일 슬레이브가 데이터를 전송 하는 상태에서 모든 데이터의 전송이 끝났다면, High 상태로 바뀐다. 이를 NACK 라고 한다. 그 외 NACK가 생기면 통신 에러 또는 데이터의 에러이다.
  • 위 신호들을 다 구현 해야 하는 것은 아니다. 대부분 칩에서 I2C 통신은 하드웨어 기능으로 구성 되어 있으므로 우리는 I2C 관련 레지스터의 비트를 설정 하는 것 만으로도 구현이 가능하다.

0개의 댓글