들어가기 앞서
이것은 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
'Embedded > ST Series' 카테고리의 다른 글
[STM32F7] SAI(Serial audio interface) 학습하기 (2) (0) | 2025.05.17 |
---|---|
[STM32F7] I2S(integrated interchip sound) 학습하기 (6) (0) | 2025.05.14 |
[STM32F7] I2S(integrated interchip sound) 학습하기 (5) (0) | 2025.05.14 |
[STM32F7] I2S(integrated interchip sound) 학습하기 (4) (0) | 2025.05.14 |
[STM32F7] I2S(integrated interchip sound) 학습하기 (3) (0) | 2025.05.13 |