๐ 1. I2C(Inter-Integrated Circuit)๋ ๋ฌด์์ธ๊ฐ?
I2C๋ ์๋ 1982๋
ํ๋ฆฝ์ค ๋ฐ๋์ฒด๊ฐ ๋ง๋ ์ง์ ํ๋ก ์ฌ์ด์ ์ฌ์ฉ๋๋ 2์ ์ง๋ ฌ ํต์ ์์คํ
์ด๋ค.
I2C๋ ๋ค์ค ๋ง์คํฐ, ๋ค์ค ์ฌ๋ ์ด๋ธ, ๋๊ธฐ์, ์๋ฐฉํฅ, ๋ฐ์ด์ค ์ง๋ ฌ ํต์ ๋ฒ์ค์ด๋ค.
- SDA(Serial Data)๋ ๋ง์คํฐ์ ์ฌ๋ ์ด๋ธ๊ฐ ์ ๋ณด(๋นํธ ์ํ์ค)๋ฅผ ์ ์กํ๊ฑฐ๋ ์์ ํ๋ ๋ผ์ธ์ด๋ค.
- SCL(Serial Clock)์ ๋ฐ์ดํฐ ํ๋ฆ ๋๊ธฐํ๋ฅผ ์ํ ํด๋ญ ์ ์ฉ ๋ผ์ธ์ด๋ค.
SDA ๋ฐ SCL ๋ผ์ธ์ ์ ํญ์ผ๋ก ๋์ด์ฌ๋ ค์ผ ํ๋ค. ์ด ์ ํญ์ ๊ฐ์ ๋ฒ์ค ๊ธธ์ด(๋ฒ์ค ์ปคํจ์ํด์ค)์ ์ ์ก ์๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ๋ณดํต 4.7K์ด์์ 10K์ด ์ฌ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์ I2C ํต์ ํ๋ก๋๋ฅผ ๋ณด๋ฉด, VDD(์ ์) ์ธก์ Rp(์ ํญ)์ด ํ์
์ผ๋ก ๋ฌ๋ ค์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋ IDLE ์ํ(ํต์ ์ ํ๊ณ ์์ง ์์ ๋)์์ ์ ํธ๊ฐ HIGH ๋ ๋ฒจ์ ์ ์งํ๊ณ ์์ผ๋ฉฐ, ํต์ ์ ๊ฐ์ํ๋ฉด ์ ํธ๊ฐ LOW ๋ ๋ฒจ๋ก ๋จ์ด์ง๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ํํธ์จ์ด ๊ตฌํํ๋ ๊ฒ๋ ์ค์ํ์ง๋ง I2C๋ ํ์
์ ํญ์ด ๊ต์ฅํ ์ค์ํ๋ฏ๋ก ์ด๋ฅผ ๊ฐ๊ณผํด์๋ ์๋๋ค.
โI2C๋ ์ธ๊ฐ์ง ๋ชจ๋๋ฅผ ์ง์ํ๋ค. ๋๋ถ๋ถ I2C๋ฅผ ์ง์ํ๋ MCU๋ Fast Mode๋ฅผ ์ง์ํ๋ค.
- ์ต๋ 100kbit/s์ ๋นํธ ์ ์ก๋ฅ ์ ๊ฐ์ง ํ์ค ๋ชจ๋(Standard mode)
- ์ต๋ 400kbit/s์ ๋นํธ ์ ์ก ์๋๋ฅผ ์ ๊ณตํ๋ Fm(Fast-Mode)
- ์ต๋ 1Mbit/s์ ๋นํธ ์ ์ก ์๋๋ฅผ ์ ๊ณตํ๋ Fm+(Fast-Mode Plus)
๐ 2. I2C ๋ฐ์ดํฐ ์ ์ก ํฌ๋งท
I2C ํต์ ์์๋ ํ๊ธฐ ์ ํธ๋ค์ ํตํด ๋ง์คํฐ์ ์ฌ๋ ์ด๋ธ๊ฐ ํต์ ์ ํ๋ค.
- Start Condition (S)
- Stop Condition (P)
- Repeated Start (Restart) Condition (Sr)
- Acknowledge ACK (A)
- Not Acknowledge NACK (/A)
โ๏ธ 1. Start Condition (S)
- Start Condition์ I2C ํต์ ์ด ์์๋ ๋ ์์ฑ๋๋ค.
- ๋ง์คํฐ ์ฅ์น๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์์ํ ๋ SCL์ด HIGH์ธ ๋์ SDA ๋ผ์ธ์ด HIGH์์ LOW๋ก ์ ํ๋๋ค.
- ์ด ์ ํธ๋ ๋ชจ๋ ์ฌ๋ ์ด๋ธ ์ฅ์น์๊ฒ ๋ฐ์ดํฐ ์ ์ก์ด ์์๋์์์ ์๋ฆฐ๋ค.
โ๏ธ 2. Stop Condition (P)
- Stop Condition์ I2C ํต์ ์ด ์ข ๋ฃ๋ ๋ ์์ฑ๋๋ค.
- ๋ง์คํฐ ์ฅ์น๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์ข ๋ฃํ ๋ SCL์ด HIGH์ธ ๋์ SDA ๋ผ์ธ์ด LOW์์ HIGH๋ก ์ ํ๋๋ค.
- ์ด ์ ํธ๋ ๋ชจ๋ ์ฌ๋ ์ด๋ธ ์ฅ์น์๊ฒ ๋ฐ์ดํฐ ์ ์ก์ด ๋๋ฌ์์ ์๋ฆฐ๋ค.
โ๏ธ 3. Repeated Start (Restart) Condition (Sr)
- Repeated Start Condition์ ํต์ ์ค์ ์ฐ์๋ ๋ฐ์ดํฐ ์ ์ก์ ์ํด ์ฌ์ฉ๋๋ค.
- ๋ง์คํฐ ์ฅ์น๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์ค๋จํ์ง ์๊ณ ๋ค์ ์ ์ก์ ์์ํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
- ์ด๋ ์ผ๋ฐ์ ์ธ Start Condition๊ณผ ๋์ผํ๊ฒ SCL์ด HIGH์ธ ๋์ SDA ๋ผ์ธ์ด HIGH์์ LOW๋ก ์ ํ๋๋ค.
- Repeated Start๋ ์ฌ๋ ์ด๋ธ ์ฅ์น์๊ฒ ํต์ ์ด ๊ณ์ ์งํ ์ค์์ ์๋ฆฌ๋ฉฐ, ์๋ก์ด ์ฃผ์๋ ๋ฐ์ดํฐ ์ ์ก์ ์์ํ ์ ์๊ฒ ํ๋ค.
โ๏ธ 4. Acknowledge ACK (A)
- Acknowledge๋ ์์ ์ฅ์น๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์์ ํ์์ ๋ํ๋ด๋ ์ ํธ์ด๋ค.
- ๋ฐ์ดํฐ ๋ฐ์ดํธ๊ฐ ์ ์ก๋ ํ ์์ ์ฅ์น๋ SCL์ HIGH ๋์ SDA ๋ผ์ธ์ LOW๋ก ์ ์งํ์ฌ ACK ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
- ์ด๋ ๋ง์คํฐ์๊ฒ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์ ๋์์์ ์๋ฆฐ๋ค.
โ๏ธ 5. Not Acknowledge NACK (/A)
- Not Acknowledge๋ ์์ ์ฅ์น๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์์ ํ์ง ๋ชปํ๊ฑฐ๋ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ค๋น๊ฐ ๋์ง ์์์์ ๋ํ๋ด๋ ์ ํธ์ด๋ค.
- ๋ฐ์ดํฐ ๋ฐ์ดํธ๊ฐ ์ ์ก๋ ํ ์์ ์ฅ์น๋ SCL์ HIGH ๋์ SDA ๋ผ์ธ์ HIGH๋ก ์ ์งํ์ฌ NACK ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
- ์ด๋ ๋ง์คํฐ์๊ฒ ๋ฐ์ดํฐ๊ฐ ์ ๋๋ก ์์ ๋์ง ์์์์ ์๋ฆฌ๊ฑฐ๋, ํต์ ์ ์ข ๋ฃํ๋๋ก ์์ฒญํ๋ ์ ํธ์ด๋ค.
๐ 3. I2C ๋ฐ์ดํฐ ์ ์ก ์ํ์ค
- ์์: Start Condition (S)
- ์ฃผ์ ์ ์ก: ์ฌ๋ ์ด๋ธ ์ฃผ์ (7๋นํธ) + R/W ๋นํธ (0: Wirte)
- 0x28u ์ฃผ์๋ฅผ ๊ฐ์ง๋ ์ฌ๋ ์ด๋ธ์๊ฒ Write๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด, ์๋์ ๊ฐ์ด ์ฃผ์๋ฅผ ์ฌํํธ ํ๋ฉด ๋๋ค.
- 0x28u << 1 = 0x50u
- 0x28u ์ฃผ์๋ฅผ ๊ฐ์ง๋ ์ฌ๋ ์ด๋ธ์๊ฒ Read๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด, ์๋์ ๊ฐ์ด ์ฃผ์๋ฅผ ์ฌํํธํ๊ณ LSB๋ฅผ 0x1๋ก OR ์ฐ์ฐ์ ํ๋ฉด ๋๋ค.
- (0x28u << 1) | 0x01u = 0x51u
- ์ฌ๋ ์ด๋ธ ACK: ์ฌ๋ ์ด๋ธ๊ฐ ACK ์ ์ก
- ๋ฐ์ดํฐ ์ ์ก: ๋ฐ์ดํฐ ๋ฐ์ดํธ (8๋นํธ)
- ์ฌ๋ ์ด๋ธ ACK: ์ฌ๋ ์ด๋ธ๊ฐ ACK ์ ์ก
- ์ถ๊ฐ ๋ฐ์ดํฐ ์ ์ก (ํ์ ์): ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ดํฐ ๋ฐ์ดํธ์ ACK ์ ์ก
- ์ข ๋ฃ: Stop Condition (P)
์ดํดํ๊ณ ๋๋ฉด ๋ณ๊ฑฐ ์๋ค. STM32๋ก ์ ์ ๋ณด๋ค์ ์ดํดํ ์ ์๋ค๋ฉด ์ถฉ๋ถํ MCU๋ก I2C ํต์ ์ ์ฌ์ฉํ๋ ์ผ์๋ค์ ์ถฉ๋ถํ ์ ์ดํ ์ ์๋ค. ๋ค์ ๊ธ์ I2C ํต์ ์ ์ฌ์ฉํ๋ ์ผ์ ํ๋๋ฅผ ์๊ฐํ๊ณ ์ ํ๋ค. ๋จ๋ค์ฒ๋ผ LCD ์ ์ด, RTC, EEPROM์ด ์๋ ์ฌ๋ฏธ๋๊ฑธ ์๊ฐํ๋ ค ํ๋ค.
'๐ง STM32' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[STM32] 17. I2C ํต์ ํจ์ ์ข ๋ฅ (0) | 2024.12.05 |
---|---|
[STM32] 16. I2C ์ผ์ ์๊ฐ (๋ฏธ์ธ๋จผ์ง/์ด์ฐํํ์ ๋ณตํฉ ๊ณต๊ธฐ์ง ์ผ์ CUBIC - AM1008W-K-P) (0) | 2024.12.04 |
[STM32] 14. ์ฝ๋ฐฑ ํจ์ ํธ์ถ ๊ณผ์ (0) | 2024.11.30 |
[STM32] 13. UART Interrupt ๊ตฌํ (0) | 2024.11.30 |
[STM32] 12. ์๋ฆฌ์ผ ๋ชจ๋ํฐ๋ฅผ ์ํ UART ํต์ ๊ตฌํ (2) (0) | 2024.11.22 |