해결된 질문
작성
·
1.4K
2
안녕하세요.
I2C에 대해 공부를 하고 있던 와중에,
직렬 통신 방식으로 대표적인 2가지가 I2C와 SPI가 있는데 어떤 상황에서는 SPI가 유리하고, 어떤 상황에서는 I2C 유리한가요?
답변 1
1
보통은 상대편 IC의 인터페이스가 I2C, SPI로 정해져 있어서 거기에 맞게 프로그램을 합니다.
I2C, SPI 장단점을 보면
속도면에서는 SPI가 좀 더 빠릅니다. 아무래도 데이터 입력과 출력이 분리되어 있어서 고속으로 처리하는데 유리합니다. 고속으로 처리하는 ADC 칩들은 대부분 SPI 인터페이스를 지원합니다. 또한 SPI는 Standrad(1bit), Dual(2bits), Quad(4bits)까지 지원하고 있어 데이터 양이 많은 경우에 많이 사용됩니다. I2C는 주로 초기에 한번 세팅하는 용도로 많이 사용됩니다. 데이터 양이 상대적으로 적은 각종 센서류 등이 I2C를 많이 사용합니다. I2C는 라인수가 적다는 장점도 있습니다. I2C는 2라인만 있으면 되지만 SPI는 최소 4라인이 필요합니다.
Verilog 코드로 컨트롤러를 구현하는 경우에는 SPI가 상대적으로 난이도가 낮습니다. I2C가 난이도가 높다고 보시면 됩니다.
감사합니다.
추가 질문) i2c controller에서 sda를 inout port로 따로 verilog code로 설계하지 않고, input과 output으로 나눠놓은 이유가 있을까요? 선이 한개에서 두개로 늘어나며, i2c protocol에 위배되는 것 아닌가요?
sda input, sda output은 최종 Top Module에서 inout port로 묶이게 됩니다. FPGA에서는 inout port를 High impedance를 이용하여 구현하는데, 이는 항상 Top Module에서만 구현하도록 레퍼런스 되어 있습니다. 따라서 Top Module인 i2c_task 에서 sda_si, sda_so를 묶어서 sda_s(inout port)로 만들어 줍니다. sda_mi, sda_mo, sda_m 도 마찬가지 입니다.
감사합니다. 많은 도움이 되었습니다.