들어가기 앞서
이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입니다.
만약, 오정보가 있다면 댓글로 알려주시면 감사하겠습니다.
그럼 STM32에서의 I2S 구조를 파악함에 앞서 I2S Protocol이란 무엇인지 간략하게 정리한 내용을 읽어 보시길 바랍니다.
[통신 프로토콜] I2S(integrated interchip sound)
쓰기에 앞서 이번에 처음으로 오디오 관련 제품을 개발하게 되어, i2S interface를 사용하게 되었습니다.한번도 사용하지 않은 기능인데 이제야 써보네요.그래서 공부하면서 제 블로그에 나름대로
starlighton.com
STM32F7에서의 I2S 구조
STM32 데이터시트를 보면 아래 그림과 같이 I2S에 대한 블록다이어그램이 나옵니다.
I2S는 왜 SPI와 함께 설명될까?
MOSI와 MISO, NSS와 같이 SPI 통신에서 사용하는 명칭이 나오는 이유는 STM32 데이터시트에서 SPI와 I2S를 같은 챕터에서 설명하고 있기 때문입니다. 두 프로토콜이 같은 하드웨어 블록을 공유하고 있기 때문이기도 합니다.
따라서 SPI를 사용할지, I2S를 사용할지를 정해야 하는데, 이때 쓰는 레지스터가 SPIx_I2S configuration register (SPIx_I2SCFGR)이며, I2SMOD 비트에 의해 결정됩니다.
I2S 인터페이스는 SPI와 동일한 핀, 클럭, 인터럽트를 공유합니다. 따라서 해당 비트만 바꾸면 SPI로 사용하던 것을 I2S로 사용할 수 있게 됩니다.
MCK 와 Master Clock
상단의 블록 다이어그램을 보면 MCK라는 익숙하지 않은 핀이 등장합니다. 이는 Master Clock Output으로, 마스터 모드일 때만 사용 가능한 별도의 클럭 출력핀입니다.
이를 설정하는 레지스터는 SPIx_I2S prescaler register (SPIx_I2SPR)이며, MCKOE 비트를 설정하면 SPI의 MISO 핀으로 마스터 클럭이 출력됩니다.
<참고>
1) STM32에서 Audio I2C로 SCK를 공급해야할 경우 STM32는 마스터 모드로 동작해야 합니다. 즉, 마스터 모드란 클록을 제공하는 주체입니다.
I2S는 모드에 따라 요구되는 마스터 클럭 주파수가 달라지며, I2S 모드에서는 Fs의 256배, PCM 모드에서는 128배의 클럭이 사용됩니다.
MCK 출력은 STM32가 I2S 마스터로 동작할 때, 오디오 DAC 등 외부 장치에 프레임 클럭(SCK) 외에 더 정밀한 마스터 클럭이 필요할 경우에 사용됩니다. 이때 마스터 클럭은 STM32 내부 클럭을 분주하여 생성되며, SPIx_I2S prescaler register (SPIx_I2SPR)와 SPIx_I2S configuration register(SPIx_I2SCFGR)입니다.
STM32가 오디오 시스템의 마스터 클럭 소스로 동작해야 하고, 외부 장치가 MCK 입력을 요구하는 경우, MCK 핀을 통해 마스터 클럭을 출력해야 합니다.
I2S와 SPI 설정 사항들의 관계
I2S 모드에서는 SPI 모드 전용 설정 값들은 무시됩니다. 예를 들면 SPIx_CR1 레지스터의 CRC, SSM, DFF 등의 설정은 전혀 영향이 없습니다.
데이터 전송시에는 SPI와 동일하게 SPI data register (SPIx_DR)를 그대로 사용하여 송수신합니다.
I2S 를 Full-duplex로 사용하는 방법
Full-Duplex 구성 방법
I2S는 기본적으로 Hlaf-Duplex 구조로써 동시에 한방향으로만 통신이 가능합니다.
STM32에서는 위와 같이 Half-Duplex의 구조만을 기본적으로 지원하고 있는데, 이것을 Full-Duplex 로 사용 할 수 있는 방법이 존재합니다.
I2S 2개를 사용하면 되면, TX와 RX를 동시에 처리 할 수 있습니다. 이때 SCK와 WS를 주는 Master가 누구냐에 따라 구성이 달라지게 되는데, 어떤 구성이든간에 SCK와 WS는 Master와 Slave들의 핀이 서로 연결되도록 하드웨어적으로 설계해야합니다.
<주의 사항>
STM32에서 Full-Duplex 통신은 다양한 오디오 포맷(I²S , PCM, MSB, LSB 정렬 방식 등)에서도 사용 가능합니다.
하지만 TX용 SPI/I2S와 RX용 SPI/I2S 인스턴스를 분리해서 사용하기 때문에, 양쪽 설정이 완전히 동일하지 않으면 타이밍이나 데이터 해석에 오류가 생길 수 있습니다.
이때 동일하게 설정해야하는 주요 설정값들은 I2SMOD, I2SSTD, CKPOL, PCMSYNC, DATLEN, CHLEN입니다.
I2SMOD SPI ↔ I2S 모드 선택 I2SSTD I2S 표준 종류 선택 (Philips, MSB-justified, 등) CKPOL 클럭 극성 (클럭이 rising edge 기준인지 falling edge 기준인지) PCMSYNC PCM 프레임 동기화 방식 DATLEN 데이터 길이 (16bit, 24bit, 32bit 등) CHLEN 채널 길이 (프레임당 비트 수, 16bit or 32bit)
[다음 회차]
[STM32F7] I2S(integrated interchip sound) 학습하기 (2)
[이전 회차] [STM32F7] STM32의 I2S(integrated interchip sound) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입니다. 만약, 오정보가 있다면 댓글로 알려
starlighton.com
'Embedded > ST Series' 카테고리의 다른 글
[STM32F7] I2S(integrated interchip sound) 학습하기 (3) (0) | 2025.05.13 |
---|---|
[STM32F7] I2S(integrated interchip sound) 학습하기 (2) (0) | 2025.05.13 |
[STM32] STM32H7B3I-DK를 사용하여 LVGL 예제 프로젝트 설정하기. (0) | 2023.10.18 |
STM32을 개발하려면 필요한 Reference 자료.. (0) | 2016.11.22 |