DIY를 위한 AI

2022년 9월 9일 금요일

SPI 통신(SPI Communication)

1. SPI 통신에 대해

기본적으로 쓰이던 직렬 통신 USART11로만 쓰인다. 그러므로 여러 장치와 연결하려면 그에 대응하는 여러 개의 송수신기가 필요하므로 하드웨어에서 제약이 있다. 이를 개선하도록 송신, 수신, 클럭 각각의 회선에서 분기하여 또 다른 장치를 연결하는 통신이 1980년대에 모토로라(Motorola)사에 의해 개발되는데 이것을 SPI(Serial Peripheral Interface : 직렬 주변기기 인터페이스)라고 부른다. SPI 통신에 대해 알아본다.

 

2. SPI 통신 결선도

 

 

그림과 같이 SPI 통신의 결선도는 MOSI(Master Out, Slave In)끼리, MISO(Master In, Slave Out)끼리, SCLK(Serial Clock)끼리, SS#(Slave Select)끼리 연결한다. 장치가 마스터(Master, 주 장치)인지 슬레이브(Slave, 부하 장치)인지에 따라 MOSIMISO에 대한 송신 또는 수신의 방향이 결정되는 동기식 전이중 통신이다.
  SS’
는 저 레벨 활성(Low Level Active) 방식으로 평상시에는 고 레벨을 유지해야 한다. SCLK은 이 중 마스터만이 관리하고 클럭과 함께 MOSI로 데이터를 송신한다. 슬레이브는 받은 클럭에 맞춰 MISO로 송신한다. 통신속도는 정해져 있지 않으나 슬레이브의 동작 상한 이내로만 정하면 동작하는데 보통 1 Mbps 수준에서 50 Mbps이상까지 범위가 넓다.

 

 

그림과 같이 통신을 11에서 1N으로 변경되도록 슬레이브를 추가한다. 슬레이브 장치가 2대로 될 때 마스터에서 SS2#로 연결하는 회선을 추가하고 1번과 통신할 때 SS1#, 2번과 통신할 때 SS2#에 저 레벨 신호를 주어 통신하는 대상을 결정한다. 3대째가 추가될 때도 마스터에서 추가된 SS3#이 슬레이브의 SS#와 연결된다. 같은 방식으로 계속 추가할 경우 통신 자체에는 개수 제한이 없으나 마스터가 SS#를 제어할 개별회선의 개수에 제약을 받는다. 이에 SS#회선의 개수를 줄이는 대신 마스터의 명령과 슬레이브의 응답을 반드시 순서대로 하게 되는 데이지 체인(Daisy-chain) 결선방식도 존재하나 여기서는 생략한다.

 

3. SPI 통신의 동작 모드

 

SPI 통신은 다른 통신과 다르게 데이터를 인식할 시점을 클럭을 기준으로 정해야 한다. 그림과 같이 두 개의 값을 읽는 샘플링 위치는 각 데이터의 가운데가 기준이 된다. 이 때 클럭의 에지(Edge)가 첫 번째인지 두 번째인지, 클럭의 위상이 정상인지 반전인지에 따라 다르다. CLK0CLK1의 경우 둘 다 정상위상이지만 CLK0은 첫 번째 에지에서, CLK1은 두 번째 에지에서 읽는다. CLK2CLK3은 반전위상에서 CLK2는 첫 번째, CLK3은 두 번째 에지에서 읽는다. 이렇게 조합하여 선택할 수 있는 4가지를 SPI 모드로 정하고 이 중 하나를 마스터와 슬레이브가 동일하게 선택해야 통신이 가능하다. 4가지의 모드를 정리하면 다음과 같다.

 

SPI 모드

위상반전(CPOL)

위상지연(CPHA)

0

정상(0)

즉시(0)

1

정상(0)

지연(1)

2

반전(1)

즉시(0)

3

반전(1)

지연(1)

 

위의 그림과 비교하면 클럭을 기준으로 정상위상이 CPOL(Clock Polarity)0, 반전위상이 CPOL1, 샘플링 기준 첫 번째 에지가 CPHA(Clock Phase)0, 두 번째 에지가 CPHA1이라고 볼 수 있다. 제조사마다 표의 표현 방식과 다를 수 있으므로 파형과 모드 번호를 확인하는 것이 좋다.

 

4. SPI 통신 데이터 프레임

 

SPI 통신에서는 사실상 정해진 데이터 프레임이 없다. 활성상태(Active)와 비활성상태(Inactive)SS#의 레벨로 구분하고, 신호의 하강에지 시점부터 상승에지 까지가 송수신하는 데이터 프레임이 되는데 그 데이터 비트의 양이 정해져 있지 않기 때문이다. 그림과 같이 활성상태에서의 클럭(SPI 모드 0)에 대해서만 데이터로 간주하고 그 외에는 인식하지 않는다. 연결된 장치에 따라 대기상태(Idle)에서 ‘0’일수도 있고 ‘1’일수도 있지만 모두 무시하게 된다.
  
그림에서는 8비트에 대해 MSB(Most Significant Bit : 최상위 비트)부터 전송하는 것을 보여주고 있으나 필요에 따라 LSB(Least Significant Bit : 최하위 비트) 우선으로 변경할 수도 있다. 그리고 SS#의 길이에 따라 더 많은 양의 전송도 가능한데 보통 짧게는 8 비트부터 길게는 100 비트가 넘는 하나의 프레임을 처리할 수도 있다.
 
참고로 8 비트로 100회 통신하는 것과 800 비트 1회 통신을 비교한다 할 때 데이터의 양은 동일하더라도 프레임단위 전송을 반복하는 쪽이 오래 걸린다. 전송을 전송할 때마다 전환에 따른 지연과 대기상태의 시간도 누적되기 때문이다. 그렇기에 가급적 한 번에 보내는 것이 유리하지만 너무 많은 양은 수신부에서 처리하기 어려운 경우도 있으므로 통신 주기와 주변환경을 고려하여 데이터 프레임의 크기를 결정하도록 한다. 아래는 16비트 연속전송의 예시이다.

 

5. DSPI, QSPI 통신

 

SPI 통신 중 마스터가 요청한 후 슬레이브가 응답하는 구조처럼 송신과 수신이 동시에 이루어지지 않는 것을 전제로 두 회선을 모두 송수신이 가능하도록 변경된 하드웨어가 있다. 이것을 DSPI(Dual Serial Peripheral Interface : 2 SPI)로 부르고 반이중 방식의 두 회선으로 송신과 수신 속도 모두를 2배로 증가시킨다. MOSIIO0되어 짝수 비트를, MISOIO1이 되어 홀수비트를 담당하면 클럭 4개째에 1 바이트의 전송이 가능하다.

 

 

DSPI에 다시 IO2 IO3을 추가하고 IO0 0 4번 비트를, IO1 1 5번 비트를, IO2 2 6번 비트를, IO3 3 7번비트를 맡아 송수신 하도록 한다. 이렇게 클럭 2개째에 1 바이트 전송이 끝나는 QSPI(Quad Serial Peripheral Interface : 4 SPI)도 있다. 이 통신들은 빠른 읽기와 쓰기가 필요한 고속 메모리 회로에서 자주 볼 수 있다.

 

6. 결론

RAM계열의 메모리나 다중채널 ADC/DAC, 컬러LCD와 같이 빠른 직렬통신이 필요할 때 SPI 통신을 검토하도록 한다.

댓글 없음:

댓글 쓰기