통신 프로토콜

[통신 프로토콜] I2S(integrated interchip sound)

별빛의온기 2025. 5. 9. 15:38
반응형

 



쓰기에 앞서

 

이번에 처음으로 오디오 관련 제품을 개발하게 되어, i2S interface를 사용하게 되었습니다.

한번도 사용하지 않은 기능인데 이제야 써보네요.

그래서 공부하면서 제 블로그에 나름대로 정리해보았습니다.

 

I2S란 무엇인가.

 I2S(integrated interchip sound)는 마이크로 컨트롤러, 디지털 오디오 장치와 같은 사운드 처리 장치간에 고음질 PCM 오디오 데이터를 교환하기 위해 만들어진 동기식 직렬 통신 프로토콜입니다. 클록 신호를 활용하여 장치간의 데이터 전송을 동기화하는 방식이죠. 

 이 기술은 1986년 2월에 필립스(Philips)가 정의한 표준입니다. 그리고 현재는 필립스가 반도체 부분을 분리하게 되면서 분사한 NXP에서 이 인터페이스 사양을 유지,배포하고 있습니다.

 

 

I2S 프로토콜 구조.

1) I2S 구조 간략 설명

 

 I2S 프로토콜은 버스에 있는 장치간에 3개의 연결 pin이 필요합니다. 장치간에 동기화 하기 위한 SCK, 좌/우 오디오 채널을 전환하기 위한 WS, 오디오 데이터를 비트단위로 전송하기 위한 SD 입니다.

 

I2S는 오직 오디오 데이터를 전송하며 만약 나머지 제어 신호가 필요한 경우에는 다른 신호 라인으로 구성하여 전송해야합니다. 즉, I2S는 오직 오디오 데이터만을 전송한다는 뜻이죠. I2S는 Pin 개수를 줄이고 배선을 단순하게 하기위해 앞서 말했듯이 3개의 Pin을 사용하도록 설계된 프로토콜입니다.

 

위 그림을 간략하게 설명하면

 

(1) Transmitter가 Controller일 경우(예를들면 STM32 MCU) 일 경우 Receiver로 데이터를 전송하는것을 볼 수 있습니다. MCU에서 오디오 데이터를 Audio IC로 전송하면서 스피커를 통해 출력하는 구조로 보셔도 됩니다.

 

 

(2) Receiver가 Controller일 경우(예를들면 STM32 MCU) 일 경우 Controller에서 Transmitter로 SCK과 WS를 전송하면 Transmitter가 데이터를 Controller로 전송함을 볼 수 있습니다. Audio IC가 MCU로 녹음데이터를 전송하는 구조로 보셔도 됩니다. 

 

 

(3) 컨트롤러(MCU)의 개입은 최소화하면서 데이터는 IC간에 바로 다이렉트로 전송하는 방식을 설명합니다. 

 

(4) 인터페이스 타이밍으로써 같이 WS에 따라 SD의 데이터가 LEFT 채널로 갈지 RIGHT 채널로 갈지 결정되는 구조로 이루어져있음을 볼 수 있습니다.

 

 

 


 

I2S 프로토콜은 컨트롤러/디바이스(이전에는 마스터/슬레이브라고 함) 아키텍처를 사용합니다. 간단한 시스템에서는 하나의 IC가 단일 컨트롤러 역할을 하고 나머지 IC는 디바이스 역할을 합니다. 이 경우, 컨트롤러는 공유 SCK 및 WS 신호를 생성하며, 데이터 회선에 비트를 배타적으로 배치할 수 있는 유일한 송신기 역할을 합니다. 그러나 더 복잡한 시스템에서는 외부 컨트롤러를 사용하여 여러 송신기와 수신기가 데이터 회선을 통해 비트를 전송할 수 있도록 할 수 있습니다. 이 경우 모든 송신기와 수신기는 디바이스 역할을 합니다.

I2S 데이터 버스 설명

 

SD(Serial data)

 

I2S의 직렬 데이터는 2의 보수 형식(two’s complement)으로 MSB(최상위 비트)가 먼저 전송됩니다. 이는 송신기와 수신기의 워드 길이가 다를 수 있기 때문이죠. 이렇게 하면 송신기는 수신기가 처리할 수 있는 비트 수를 알 필요가 없으며, 수신기도 전송 중인 비트 수를 알 필요가 없습니다.

 

예를 들어 송신기가 24bit고 수신기가 16bit 일경우 MSB가 항상 앞쪽에 오면 수신기는 앞에서 부터 필요한만큼 잘라 쓰게 됩니다. 이 경우 비트수가 달라서 데이터 손실이 일어나지만, LSB 데이터쪽의 손실이 났을뿐, MSB 데이터가 살아있기때문에 정확도를 유지 할 수 있는것이죠. 따라서 최상위 비트를 먼저 전송하게 됩니다.

 

만약 반대로 송신기가 16bit고 수신기가 24bit라면, 누락된 데이터 비트는 내부적으로 0으로 설정됩니다. 따라서 MSB 데이터는 고정된 위치를 가지기에 이 경우 손실이 이뤄지지 않습니다.

 

[워드 길이 불일치 시 처리 방식 요약]

송신기(16bit) <  수신기(24bit)   부족한 LSB 부분은 0으로 채움
송신기(24bit) < 수신기(16bit)   넘친 비트(Lower side)는 무시

 

 

시스템 워드 길이가 송신기 워드 길이보다 길면, 데이터 전송을 위해 워드가 잘립니다(최하위 데이터 비트는 '0'으로 설정됨). 수신기에 워드 길이보다 많은 비트가 전송되면 LSB 이후의 비트는 무시됩니다. 반면, 수신기에 워드 길이보다 적은 비트가 전송되면 누락된 비트는 내부적으로 0으로 설정됩니다. 따라서 MSB는 고정된 위치를 가지지만, LSB의 위치는 워드 길이에 따라 달라집니다. 송신기는 항상 WS가 변경된 후 한 클록 주기 후에 다음 워드의 MSB를 전송합니다.

 

WS(Word Select)

 

WS는 '왼쪽/오른쪽 채널'을 구분해주는 신호입니다.


• WS = 0(Low) : channel 1(왼쪽).
• WS = 1(High) : channel 2(오른쪽).

 

그럼 수신기(target)에서는 언제 WS 신호를 받아들일까요?

 

그것은 WS 신호를 SCK가 상승엣지일때 받아들입니다. 클럭이 상승할 때, WS가 0이면 왼쪽채널, 1이면 오른쪽채널이라고 인식하는것이죠. 이 WS 신호는 MSB가 전송되기 딱 1 Clock 전에 먼저 바뀝니다. 이 타이밍에 송신기는 다음 데이터를 준비하고, 수신기는 채널을 변경하여 데이터를 저장하기 위한 준비를 하죠.

 

WS(Word Select) 신호는 SCK 클럭의 상승엣지(leading edge) 또는 하강엣지(trailing edge) 중 어느 타이밍에 바뀌어도 괜찮습니다. 즉,정확하게 대칭일 필요는 없다는 뜻이죠. WS의 변화는 정확히 대칭일 필요 없고, 미리 변경되는것이 중요합니다.

 

 

위 그림에 보이듯, MSB가 전송되기 1 Clock전에 WS가 먼저 바뀌는것을 확인 할 수 있습니다. 

I2S의 통신 Timing

 

I2S 통신시 타이밍은 Transmitter와 Receiver 가 있습니다. 전송만 간략하게 다루면 아래와 같습니다.

 

2.5Mhz 기준 오차율 10% 이내 범위의 전송 속도를 가진 송신기 

 

(1) T(Clock Period) =  클럭 주기 T는 최소 360ns 이상, 최대 440ns 이하여야 한다. (2.5Mh이니 즉, I²S SCK 주파수는 약 2.27MHz ~ 2.78MHz 범위 내여야 한다는 의미.

(2) Thc(Clock High) = 클럭이 HIGH 상태를 유지하는 시간 최소 160ns 이상이어야 하며, 동시에 전체 주기의 35% 이상도 만족해야 한다.

(3) Tlc(Clock Low) = 클럭이 LOW 상태를 유지하는 시간을 최소 160ns 이상이어야 하며, 전체 주기의 35% 이상도 만족해야 한다.

(4) Delay Tdtr = SCK 상승 엣지 이후 데이터(SD)와 워드 셀렉트(WS)가 안정화되는 데까지의 시간이며, 최대 300ns를 초과하면 안 된다. 또한, 전체 클럭 주기의 80% (0.8T) 이하여야 한다

(5) Hold time Thtr = 데이터가 클럭 엣지 이후 유지되어야 하는 최소 시간이며, 100ns 이상 유지되어야 한다. min > 0이기에 이론상으로는 없어도 되지만, 여유를 두는게 안정적이다. 

(6) clock rese-time Trc = 클럭 상승 시간으로써 60ns를 넘지말아야하고 이 비중은 T의 15% 이내여야 한다. 

 

 

수신에 관한 내용은 아래에 나와있는 참고 자료들을 직접 찾아서 읽어 보시면 됩니다.

 

 

참고 자료

 

1. I2S bus specification - version 3.0 (NXP 제공. 문서번호 UM11732) 

2. STM32F7 Reference manual (ST 제공. 문서번호 RM0385)

 

반응형