반응형
ALSA (Advanced Linux Sound Architecture)
- 리눅스 운영체제에서 오디오 기능을 관리하고 제공하기 위한 디바이스 프레임워크
- User Space Library / Kernel Space Driver를 지칭
- Linux AUDIO
- 오픈 소스 / 라이센스 : GPL , LGPL
ALSA Kernel driver
- ALSA Kernel driver는 사용자 공간의 시스템 콜에 대응 (System call : open, ioctl, write, read, close)
- Device driver로 부터의 요청에 대응 (Register, Unregister, Update)
- ALSA Kernel driver는 사용자 공간과 사운드카드 디바이스 드라이버의 인터페이스를 담당하며, 오디오 버퍼 및 시그널을 관리 및 운용
ALSA Library
- 어플리케이션에게 공통된 API를 제공하여 ALSA Kernel driver를 사용할 수 있도록 함
- ALSA Library도 복잡한 구성으로 이루어져 있음
- ALSA Library가 /dev/snd/* 의 device file을 제어함으로 Application에서 device file을 open, close 할 필요가 없음
ALSA SoC
ALSA SoC layer (driver)
- ALSA는 x86의 사운드 카드 때문에 생겨남
- 임베디드 프로세서에 대응하기 위하여 ALSA SoC Layer가 생성됨
ASoC (ALSA SoC) 의 목표- Audio Codec Driver 독립적 및 재사용 가능 하도록 설계
- Audio Codec 과 I2S 및 PCM Audio interfac의 연결을 쉽도록 설계
- Dynamic Audio Power Management(DAPM) 설계 (Audio Codec 내 Power Block 자동 제어 알고리즘)
- Pop 및 Click 잡음 감소 (Audio Codec의 Power를 up/down 하면서 생겨나는 잡음을 줄임)
- Board 특정 컨트롤을 위해 설계. 예를들면 스피커 앰프를 위한 소리 제어
→ ASoC의 도움 없다면 Audio Function과 별개로 GPIO 제어로 스피커 앰프를 ON/OFF 시켜야 한다)
ASoC driver 구분
- Codec : Audio Codec Control을 제어
- Platform : SoC DMA 제어
- Machine : Audio 관련 Device 연결 상태 정의 및 제어
- Component (DAI) : I2S 및 I2C,PCM,PDM...( Audio Interface)을 제어
Embedded System Audio Circuit
Audio Circuit & ASoC Driver
ALSA Operation diagram
Playback , Capture
ALSA Buffer FIFO 동작 방식
# 그림의 데이터 쓰기 및 쓰기 순서 표현은 숫자로 표기한다.
1. 500ms 분량의 버퍼가 있고, 100ms 5개로 나눴다고 가정.
2. 앱에서 사용자가 100ms 데이터를 2번 쓰기를 했을 경우 그림은 아래와 같다.
3. 데이터가 버퍼에 다 채워졌을때는 아래와 같고 앱에서는 더이상 쓸 공간이 없기 때문에 슬립(Sleep) 상태로 변환된다.
4. 오디오 장치가 100ms 데이터를 출력하였을 때, 1번 데이터를 소진한 것이므로 버퍼에 여유 공간이 생긴다.
5. 기존에 슬립하고 있던 앱에서 깨어나서 데이터 출력으로 생겨난 여유 공간에 데이터를 다시 채운다.
(Sleep, Wakeup for write)이 반복된다.
ALSA Mixer
Audio Codec
ALSA는 사용자 공간(User Space)에서 오디오 코덱을 제어하기 위해서 Mixer(SND CONTROL)을 사용한다.
사용자 공간에서 오디오 코덱의 레지스터에 직접 접근하지 않는다.
계속 작성 진행 중
반응형
'임베디드 개발 노트' 카테고리의 다른 글
Basic #1 (0) | 2024.08.26 |
---|---|
SocketCAN (0) | 2024.04.22 |
Automotive SPICE (업데이트 中) (0) | 2023.06.20 |
CAN (업데이트 中) (0) | 2023.06.20 |
Analog /Digital Signal , Ground (0) | 2023.04.06 |