← 글 목록으로개발/ST Series

[STM32F7] SAI(Serial audio interface) 구조

별빛의온기2025. 5. 16.
반응형

들어가기 앞서

 

이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입니다. 

만약, 오정보가 있다면 댓글로 알려주시면 감사하겠습니다.

 

SAI(Serial audio interface)란?

 

아래 링크박스를 클릭하시면 SAI에 대해 설명합니다.

 

 

[통신 프로토콜] SAI(Serial Audio Interface)

SAI란 무엇인가 SAI(Serial Audio Interface)는 STM32에서 제공하는 오디오 전용 시리얼 통신 인터페이스입니다. 기존의 SPI 기반 I2S보다 더 유연하고 확장성 있는 구조로 설계되어 있어서, 스피커, 마이크,

starlighton.com

 

SAI 구조

 

 

STM32 데이터시트를 보면 아래 그림과 같이 SAI에 대한 블록다이어그램이 나옵니다.

 

 

 

SAI는 일반적으로 자체 클럭 생성기를 갖춘 두 개의 독립적인 오디오 서브 블록으로 구성됩니다.
각 블록은 기능 상태 머신(FSM) 에 의해 제어되는 32비트 시프트 레지스터를 포함하고 있으며, 데이터는 전용 FIFO에 저장되거나 읽혀집니다. 이 FIFO는 CPU 또는 DMA를 통해 접근할 수 있으며, 이를 통해 통신 중에도 CPU는 다른 작업을 수행할 수 있는 유연성을 확보할 수 있습니다. 각 오디오 블록은 독립적으로 동작하지만, 서로 동기화된 상태로 구성할 수도 있습니다.

 

SAI의 I/O 라인 컨트롤러는 각 오디오 블록에 대해 SD(Serial Data), SCK(Bit Clock), FS(Frame Sync), MCLK(Master Clock) 총 4개의 전용 핀 세트를 관리합니다.

 

두 블록이 동기식(Synchronous) 모드로 설정되면, 이들 핀 중 일부를 공유하여 남는 핀을 범용 I/O(GPIO) 로 활용할 수 있습니다. 또한, MCLK 핀의 출력 여부는 애플리케이션의 요구사항, 디코더의 조건, 그리고 해당 블록이 마스터로 구성되었는지에 따라 달라질 수 있습니다.

 

만약 하나의 SAI가 다른 SAI와 동기화된 방식으로 작동하도록 설정되면, SD 핀을 제외한 나머지 핀들을 더 많이 공유함으로써
더 많은 I/O 자원을 확보할 수 있게 됩니다.

 

SAI의 기능 상태 머신(FSM: Functional State Machine) 은 다양한 오디오 프로토콜을 처리할 수 있도록 구성할 수 있으며, 이를 위한 전용 설정 레지스터를 통해 원하는 프로토콜(즉, 오디오 프레임 파형 생성기)을 선택할 수 있습니다.

 

각 SAI 서브 블록(SAI_x)은 마스터 또는 슬레이브 모드에서, 송신기(TX) 또는 수신기(RX) 역할로 구성될 수 있습니다.

  • 마스터 모드에서는 SCK_x (비트 클럭) 및 프레임 동기화 신호(FS_x)가 SAI 내부에서 생성한다.
  • 슬레이브 모드에서는 해당 클럭 및 동기 신호가 외부 또는 내부의 다른 마스터로부터 입력된다.

 

단, 일부 특수한 경우에는 FS(Frame Sync) 신호의 방향이 항상 마스터/슬레이브 모드와 일치하지 않을 수도 있습니다.

예를 들어, AC’97 프로토콜에서는 SAI가 클럭(SCK_x)을 외부 마스터로부터 입력받는 슬레이브 모드로 설정되어 있더라도, 프레임 동기 신호(FS_x)는 SAI가 출력하도록 구성될 수도 있습니다.

 

즉, 일부 특수한 프로토콜에서는 클럭 소스에 따라 모드를 정의하더라도 FS의 방향은 독립적으로 설정될 수 있습니다.

 

<참고>
SAI_x 표기는 SAI_A 또는 SAI_B 블록을 의미하며, 여기서 'x'는 해당 블록이 A인지 B인지를 구분하는 자리입니다.
간단히 표기하기 위해 위와 같이 표기하였습니다.

 

SAI 내부 및 외부의 입/출력 핀

 

 

해석하면 아래와 같습니다.

 

[내부]

이름 타입 설명
sai_a_gbl_it / sai_b_gbl_it Output 오디오 블록 A / B의 글로벌 인터럽트 신호
sai_a_dma / sai_b_dma Input/Output 오디오 블록 A / B의 DMA 요청 및 수락 신호
sai_sync_out_sck, sai_sync_out_fs Output 다른 SAI 블록들과 공유하는 내부 클럭 및 프레임 동기화 출력
sai_sync_in_sck, sai_sync_in_fs Input 다른 SAI 블록에서 받아오는 내부 클럭 및 프레임 동기화 입력
sai_a_ker_ck / sai_b_ker_ck Input 오디오 블록 A / B의 kernel clock (핵심 클럭)
sai_pclk Input APB 버스 클럭 입력 (SAI 전체 레지스터 제어용)

 

[외부]

 

이름 타입 설명
SAI_SCK_A/B Input/Output 오디오 블록 A/B용 비트 클럭 
SAI_MCLK_A/B Output 오디오 블록 A/B용 마스터 클럭 
SAI_SD_A/B Input/Output A/B 블록용 직렬 데이터 전송 라인 
SAI_FS_A/B Input/Output A/B 블록용 프레임 동기화 신호 라인

 

 

다이어그램과 함께보면 모든 신호는 A/B 블록별로 구분되어, 독립적인 설정이 가능함을 볼 수 있습니다.

 

 


[다음 회차]

 

 

[STM32F7] SAI(Serial audio interface) 학습하기 (2)

[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입니다. 만약, 오정보가 있다면 댓글로 알려주시면 감

starlighton.com

 

 

 

 

 

 

반응형