ARM 프로세서 I2C, SPI 제어하기

2022. 12. 18. 11:26임베디드 시스템 설계/ARM

-      I2C 인터페이스

I2CSPI 인터페이스의 차이점

 

 

I2C의 특징

Inter Integrated Circuit 버스구조를 의미합니다.

마이크로프로세서와 저속 주변장치 사이의 통신을 목적으로 합니다.

Philips에서 개발한 규격입니다.

2개의 Line만으로 통신하기 때문에 TWI(Two Wire Interface)라고도 합니다.

양방향 오픈 드레인 선인 SCLSDA로 이루어져 있습니다.

(SCL : Serial Clock, SDA : Serial Data)

Master-Slave 형태로 동작합니다.

속도면에서는 다릉 방식에 비하여 현저히 느린 특징이 있습니다.(그러나 하드웨어적으로 간단한 구성으로 자주 활용됩니다.)

하나의 버스에 많은 수의 노드를 연결할 수 있다는 장점이 있습니다.

 

 

SCL, SDA

 

 

MasterSCL로 동기를 위한 클럭을 출력하고, SlaveSCL로 출력되는 클럭에 맞추어 SDA를 통해 데이터를 출력하거나 입력합니다.

 

 

MasterSCL로 동기를 위한 클럭을 출력합니다.

SlaveSCL 클럭에 맞추어 SDA를 통해 데이터를 출력하거나 입력 받습니다.

SDA는 한 선으로만 데이터를 주고 받기 때문에 I2C 버스는 반이중(Half Duplex)통신만 가능합니다.

SCL선과 SDA선은 모두 오픈 드레인이므로 두 선에는 각각 풀업 저항을 연결해주어야 합니다.

 

 

I2C 통신방식

MasterSlave를 개별적으로 지정하기 위한 방법

(모든 I2C MasterSlaveSCL, SDA는 서로 연결되고 공유됩니다.)

 

한 순간에는 오직 하나의 Master와 하나의 Slave만이 통신합니다.

모든 장치의 SCLSDA는 각각 wired AND로 연결됩니다.

(만일 어떤 한 장치가 0을 출력하면, 그 신호의 상태는 1로 만들 방법이 없습니다.)

(I2C 버스에 연결되어 있지만 현재 통신에 참여하지 않고 있는 장치들은 모두 자신의 출력을 Floating 상태로 유지해야 합니다.)

 

 

버스 소유권과 시작 부호

(버스의 사용을 원하는 MasterSCLSDA로 시작 조건을 출력하여 버스 소유권을 주장하고 통신을 시작할 수 있습니다.)

 

두 신호의 상태가 모두 논리 1이 아니라면 현재 다른 Master가 버스 소유권을 가지고 통신을 진행 중에 있다는 의미입니다.

(Master가 버스 소유권을 반납할 때까지는 새로운 통신이 시작될 수 없습니다.)

 

 

I2C에서는 데이터를 전달하기 위해 아래 형식을 따릅니다.

MasterSlave에 전송을 시작한다는 표현 - Start(1bit)

데이터 목적지 주소 - Address(7bit)

전송 목적 - R/W(읽기 또는 쓰기)(1bit)

전송 데이터 – Data(8bit)

Slave가 정상적으로 데이터를 수신했다는 응답 – Ack(1bit)

전송 종료 – Stop(1bit)

 

 

Waveform

 

 

모든 I2C Slave 장치는 7비트의 고유 주소를 가지며, Master는 이 주소를 사용하여 상대 Slave 장치를 지정합니다.

Master는 시작조건 이후 통신상대 Slave를 지정하는 7bit 주소 출력합니다.

 

 

버스에 연결된 모든 SlaveMaster가 출력한 주소가 자신의 주소와 일치하는지 검사합니다.

 

 

만일 Master가 출력한 주소가 자신의 주소와 같으면 그 SlaveACK 비트에 0을 출력하여 Master에게 응답합니다.

(일치하는 Slave가 없다면 아무도 ACK 비트로 0을 출력하지 않으므로 1 상태를 유지합니다. NACK)

 

I2C 관련 유틸리티 (i2c-tools : i2cdetect, i2cset, i2cget)

 

Slave 주소 7비트 다음에 오는 8번째 비트는 다음 동작이 Master의 읽기(1)인지 쓰기(0)인지 결정합니다.

 

I2C 활용 사례

PCF8574AP

 

 

PCF8574AP

 

 

PCF8574AP

 

PCF8574AP

 

 

 

-      SPI 인터페이스

SPI(Serial Peripheral Interface)

Serial Peripheral Interface 버스입니다.

마이크로 프로세서와 저속 주변장치 사이의 통신을 목적으로 합니다.

Motorola에서 개발한 규격입니다.

SCK, SS, MOSI, MISO로 이루어져 있습니다.

(SCK : Serial Clock, MOSI, MISO : Serial Data)

Master-Slave 형태로 동작하게 됩니다.

하나의 Master와 하나 또는 다수의 Slave Device 간 통신 가능합니다.

(기본적으로 4개의 Signal Pin을 제공합니다.)

 

 

SPI 주변 장치 종류

Converter(ADC, DAC)

메모리(EEPROM )

센서(온도, 습도, 기압 등)

TI-DSP

EEPROM read 동작 사례입니다.

SPI의 동작

 

 

 

MCP3208

 

MCP3208ADC 구조와 외부 연결

 

 

SPI 통신

MasterARM 프로세서가 SlaveMCP3208에게 정해진 명령으로 날려주면 그에 해당되는 값을 전송해주는 시스템입니다.

센서 값을 ADC 하여 ARM 프로세서가 받아야 하므로, 정해진 규칙으로 데이터를 전송합니다.

센서 값은 테스트 목적으로 가변저항을 사용합니다.

 

 

 

SPI 통신 사례

데이터 전송 규칙 : Master 노드가 총 3개의 바이트를 날려줍니다.

1첫째 바이트 : 0 0 0 0 0 Start SGL D2

2번째 바이트 : D1 D0 x x x x x x

3번째 바이트 : x x x x x x x x

(D2, 1, 0ADC 채널을 의미합니다. Xdon’t care bit를 의미합니다.)

 

Master 노드가 3 바이트의 데이터를 보냄과 동시에 MCP3208로부터 3바이트의 데이터를 받습니다.

비트 쉬프트 연산으로 하위 12비트를 적절한 데이터 값으로 변환합니다.

 

 

 

MCP3208ARM board 연결

 

 

 

SPI 활용