[이전 회차]
[STM32F7] SAI(Serial audio interface) 학습하기 (2)
[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입니다. 만약, 오정보가 있다면 댓글로 알려주시면 감
starlighton.com
Frame 동기화
FS 신호는 오디오 프레임에서 프레임 동기화 신호로 동작하며, 프레임의 시작을 알리는 역할을 합니다.
프레임 동기화 동작에 있어 다양한 오디오 프로토콜마다 요구하는 고유한 특성에 맞춰, 이 FS 신호의 파형은 완전히 유연하게 구성할 수 있도록 되어 있습니다. FS 신호의 이런 재구성 가능성은 SAI_xFRCR 레지스터를 통해 설정하며, 아래 그림은 이 신호 형태의 유연성과 재구성 가능성을 시각적으로 보여줍니다.
- 전체 프레임 동기화 신호(FS) 길이가 최대 256비트까지이다.
- 그 중 활성화 구간은 최대 128비트까지다. FS의 폴링 엣지는 이 활성 구간 내에서 발생 할 수 있다. (폴링 엣지는 프레임 시작으로 인식된다.)
- 오디오 프레임은 여러 개의 슬롯(Slot) 으로 구성된다 (예: 채널 1, 채널 2 등)
- FS 신호는 프레임의 경계를 알리는 역할을 한다.
AC’97 모드 또는 SPDIF 모드(SAI_xCR1 레지스터의 PRTCFG[1:0] 비트가 10 또는 01로 설정된 경우)에서는 프레임 동기화 신호(FS)의 형상이 AC’97 프로토콜에 강제로 일치되도록 고정됩니다. 따라서 이 경우에는 SAI_xFRCR 레지스터 값은 무시됩니다. 또한, 각 오디오 블록은 독립적으로 동작하므로, 각 블록마다 별도의 설정이 필요합니다.
프레임 길이 (Frame Length)
SAI에서 하나의 오디오 프레임은 최소 8비트로 구성되며, 프레임의 총 비트 수는 FRL[7:0] + 1로 계산됩니다. 즉, FRL이 31이라면 한 프레임은 32비트로 구성됩니다.
Master Mode
오디오 프레임의 길이는 SAI_xFRCR 레지스터의 FRL[7:0] 필드를 설정함으로써 최대 256비트 클럭 사이클까지 구성할 수 있습니다.
프레임의 길이가 해당 프레임에 선언된 슬롯(slot) 수보다 클 경우, 남는 비트는 SAI_xCR2 레지스터의 TRIS 비트 상태에 따라 두 가지 방식 중 하나로 처리됩니다.
- 0으로 채워서 전송 처리.
- SD 라인을 high-Z(하이 임피던스) 상태로 해제하여 처리.
수신 모드에서는, 이 남은 비트는 무시됩니다.
NODIV 비트가 0인 경우, 내부 MCLK 분주기 활성화하는 모드로써, 오디오 프레임의 길이 (FRL + 1)은 8에서 256 사이의 2의 거듭제곱 값이어야 합니다. 왜냐하면 내부 클럭 생성기가 MCLK를 I2S/SCK로 정수 배수로 맞추기 위해 정확히 나눌 수 있는 프레임 길이가 필요하기 때문입니다.
반대로 NODIV 비트가 1이면, (FRL + 1) MCLK를 직접 입력으로 사용하거나 외부에서 주도하는 모드로써. 이 경우, 프레임 길이 (FRL + 1)은 8에서 256까지의 값으로 자유롭게 구성이 가능합니다.
Slave Mode
오디오 프레임 길이는, 외부 마스터가 보내는 오디오 프레임당 비트 클럭 주기의 수를 슬레이브에게 지정하는 데 사용됩니다. SAI 슬레이브 모드에서의 프레임 길이는 마스터가 보내는 오디오 프레임의 구조를 이해하는 기준이 되는데, 이 설정을 기반으로 슬레이브는 프레임 동기화 신호(FS)가 예상보다 빠르거나 늦게 도착했는지를 감지하고, 이러한 시점 오류는 에러로 처리됩니다.
다만 슬레이브는 클럭을 생성하지 않기 때문에, SAI_xFRCR 레지스터의 FRL[7:0] 설정에 제한이 없습니다.
프레임 동기화 극성(Frame synchronization polarity)
SAI_xFRCR 레지스터의 FSPOL 비트는 프레임 시작을 알리는 FS 핀의 유효(active) 극성을 설정합니다. 프레임의 시작은 FS 신호의 Edge를 기준으로 감지됩니다.
Slave Mode
슬레이브 모드에서 오디오 블록은 유효한 프레임 동기화 신호(FS)가 입력될 때까지 데이터 송신 또는 수신을 대기합니다.
프레임의 시작은 이 FS 신호에 동기화되어 발생합니다. 단, 이 FS 신호가 현재 진행 중인 통신 도중에 감지되면 예상보다 빠른(anticipated) 프레임 시작으로 간주되어, 에러로 처리됩니다.
Master Mode
마스터 모드에서는 오디오 프레임이 끝날 때마다 프레임 동기화 신호(FS)가 지속적으로 출력됩니다. 이 동작은 SAI_xCR1의 SAIEN 비트가 클리어될 때까지 계속됩니다. 이전 프레임이 끝났을 때 FIFO에 전송할 데이터가 없다면, 언더런(underrun) 상태가 발생하지만, 오디오 통신 흐름은 중단되지 않습니다.
프레임 동기화 신호 활성 구간 길이 (Frame synchronization active level length)
프레임 동기화 신호(FS)의 ‘활성 구간(active level)’ 길이를 SAI_xFRCR 레지스터의 FSALL[6:0] 비트를 통해 설정할 수 있습니다. 이 길이는 1비트부터 최대 128비트 클럭 사이클까지 지정할 수 있습니다. 참고로 활성 구간이란 FS 신호가 High(또는 Low)로 유지되는 시간으로써 이 시간 동안 해당 오디오 프레임이 유효하다는 뜻입니다.
- 예를 들어:
- I2S, LSB-정렬, MSB-정렬 모드에서는 프레임 길이의 절반으로 설정할 수 있고,
- PCM/DSP 또는 TDM 모드에서는 1비트 폭으로 설정할 수 있습니다.
프레임 동기화 오프셋 (Frame synchronization offset)
애플리케이션에서 목표로 하는 오디오 프로토콜에 따라, FSOFF 비트를 통해 FS 신호가 오디오 프레임의 첫 번째 비트 또는 마지막 비트에 동기화되도록 설정할 수 있습니다. 이는 I2S나 MSB-Justified 같은 프로토콜의 요구사항에 따라 적절히 선택이 가능합니다.
- 예를 들어:
- I2S 표준 프로토콜에서는 마지막 비트 시점에 FS가 발생하고
- MSB-정렬(MSB-Justified) 프로토콜에서는 첫 번째 비트 시점에 FS가 발생합니다.
FS 신호 역할 (FS signal role)
FS(Frame Sync) 신호는 사용되는 오디오 프로토콜에 따라 그 의미가 달라질 수 있습니다.
SAI_xFRCR 레지스터의 FSDEF 비트를 통해 FS 신호의 역할을 다음 중 하나로 설정할 수 있습니다:
- FSDEF = 0:
프레임 시작을 알리는 신호로 동작합니다.
→ 대표적인 예: PCM/DSP, TDM, AC’97 등 - FSDEF = 1:
프레임의 시작 신호이면서 동시에 오디오 프레임 내에서 좌/우 채널 구분 정보를 함께 포함합니다.
→ 대표적인 예: I2S, MSB/LSB 우선 프로토콜
FS 신호가 프레임의 시작 신호이자 채널 방향(Left/Right) 식별 신호로 사용되는 경우, 선언된 슬롯 수는 좌/우 채널 각각 절반씩 할당된 것으로 간주해야 합니다.
만약, 한 채널에 해당하는 오디오 프레임 절반에서 비트 클럭 수가 해당 채널에 할당된 슬롯 수보다 많고, TRIS = 0이면, 남은 비트 클럭 구간에서는 0이 전송됩니다. (SAI_xCR2 레지스터 설정에 따름)
반대로 TRIS = 1인 경우에는, SD 라인이 high-Z(하이 임피던스) 상태로 해제됩니다.
수신 모드에서는, 채널 방향(Left ↔ Right)이 전환되기 전까지 남은 비트 클럭 구간은 무시됩니다.
만약, SAI_xFRCR의 FSDEF 비트가 클리어된 상태 (즉, FS 신호가 단순한 프레임 시작 신호로 사용됨)이고, SAI_xSLOTR의 NBSLOT[3:0] (슬롯 개수) × SLOTSZ[1:0] (슬롯당 비트 수)가 SAI_xFRCR의 프레임 길이 (FRL[7:0])보다 작은 경우, 다음과 같은 동작이 발생합니다:
- SAI_xCR2의 TRIS = 0이면, 마지막 슬롯 이후의 남은 비트 클럭 구간은 0으로 채워져 전송됩니다 (송신기 기준)
- TRIS = 1이면, 남은 구간 동안 SD 라인은 하이 임피던스(high-Z)로 해제됩니다, 수신기에서는, 이 남은 비트 구간은 무시(discard) 합니다.
SAI를 SPDIF 출력 모드로 사용할 경우, 프레임 동기화 신호(FS)는 사용되지 않습니다.
이때 FS 핀은 해제되어 다른 용도로 자유롭게 활용할 수 있으며, SPDIF 데이터는 SD 라인을 통해 연속적으로 전송됩니다.
오디오 데이터 크기(Audio data size)
SAI 오디오 전송에서는 데이터 크기와 비트 전송 순서를 유연하게 설정할 수 있습니다.
예를 들어, 오디오 샘플 해상도에 따라 SAI_xCR1 레지스터의 DS[2:0] 비트를 설정하면 오디오 프레임의 데이터 크기를 지정 할 수 있고,전송 순서 또한 LSBFIRST 비트를 통해 MSB 또는 LSB부터 전송되도록 조절할 수 있습니다.
이러한 설정은 외부 DAC, ADC, 또는 DSP와의 호환성과 직접적으로 연결되며, 통신 안정성과 데이터 정합성을 확보하는 데 핵심적인 요소입니다.
[다음 회차]
[STM32F7] SAI(Serial audio interface) 학습하기 (4)
[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataShee
starlighton.com
'Embedded > ST Series' 카테고리의 다른 글
[STM32F7] SAI(Serial audio interface) 학습하기 (4) (0) | 2025.05.18 |
---|---|
[STM32F7] SAI(Serial audio interface) 학습하기 (2) (0) | 2025.05.17 |
[STM32F7] SAI(Serial audio interface) 학습하기 (1) (1) | 2025.05.16 |
[STM32F7] I2S(integrated interchip sound) 학습하기 (6) (0) | 2025.05.14 |
[STM32F7] I2S(integrated interchip sound) 학습하기 (5) (0) | 2025.05.14 |