0.오늘의 목표
: OLED는 I2C 통신을 사용하기에 I2C에 대해 배워보자
1. 통신
: 시간 or 클럭(SPI, I2C)을 기준으로 통신
1-1. I2C 통신 특징
- 8bit씩 주고 받음
- 7bit의 주소 공간 사용 => I2C에 최대 연결할 수 있는 장치가 128개
- 400Khz의 전송속도
- Sleep 모드 일 때, 주소 인식으로 일어남
- 동기 방식(클럭 베이스)
- 선이 두가닥 필요
- 클럭과 데이터는 기본으로 High 상태
1-2. I2C 데이터 송신 (SDA, SCL은 모두 마스터의 데이터와 클럭선)
- 클럭을 발생하는 주체는 마스터
- START
: SCL(클럭) 선은 High 상태로 있다가 데이터를 보내고 싶을 때 SDA(마스터의 데이터)선이 High -> Low로 떨어짐 - 데이터 변화 구간1
: SCL(클럭) 선을 Low로 떨어트리고 그 위에 SDA에서 데이터 세팅하고 나면 SCL은 다시 High로 올려줌 - SDA 신호 읽는 구간
: SCL이 High로 올려진 구간에서 Slave는 SDA를 읽음 - 데이터 변화 구간2
: 또 데이터를 보내고 싶은 경우엔 다시 SCL을 Low로 내리고 0을 보내고 싶다면 SDA를 Low로 내림 - 데이터 세팅했으니 SCL은 다시 High로 올리고 이 구간에서 Slave는 SDA를 읽음
- 이와 같은 동작을 8번 반복하여 8bit를 전송
- ...
- 더이상 보내지 않고 싶을 땐, SDA를 Low로 떨어트리고 SCL은 계속 High로 유지
- STOP
: SCL이 계속 High 상태인 걸 확인하고 "이제 끝내고 싶구나"라고 판단하여 SDA도 High로 - 둘 다 High인 상태이므로 더이상 데이터 보내지 않는다는 걸 알림
1-3. I2C의 전체적인 통신흐름
(1) Master가 보내는 구간
- 아래 사진처럼 Slave의 주소 7bit를 클럭마다 1bit씩 전송 (<=> 이름 호명)
- Master는 1bit를 설정
: 이때, Master는 1bit를 LOW로 떨어트려서 Slave에게 "나 지금 너에게 데이터 쓸 거야"라고 보냄
=> 8bit = Slave의 주소 + Master의 Write or Read 신호
(2) Slave가 보내는 구간
- Slave는 Low로 떨어트려서 하나의 bit를 보내줌 (ACK : 잘 들었다는 응답)
(3) Master가 보내는 구간
- 보내고 싶은 데이터 8bit 단위로 전송
(4) Slave가 보내는 구간
- Slave는 Low로 떨어트려서 9번째 bit에 잘 받았다는 응답을 함
(5) 끝
- 끝내고 싶은 경우엔 SDA가 Low인 상태에서 SCL이 High로 바꾸고 계속 유지하면 끝났다는 걸 Slave가
* 사진2는 읽는 상황으로 Master가 Write하는 경우와 비슷
2. I2C 설정방법
- 직접 GPIO 제어하면서 통신
- 칩 자체에서 제공해주는 기능 사용 <- 우리의 pick
'임베디드' 카테고리의 다른 글
[오제이 튜브의 임베디드 강의] 35강. 내 로고는 내가 만든다! (0) | 2025.02.14 |
---|---|
[오제이 튜브의 임베디드 강의] 34강. I2C로 OLED를 제어해보자. (0) | 2025.02.14 |
[오제이 튜브의 임베디드 강의] 31강. 흉내낸 쓰레드 크리티컬 섹션 문제 해결! (0) | 2025.02.12 |
[오제이 튜브의 임베디드 강의] 30강. 쓰레드 흉내내기! (0) | 2025.02.12 |
[오제이 튜브의 임베디드 강의] 29강. 난방실 만들기(온도에 따른 드라이기 제어) (0) | 2025.02.11 |