2 posts tagged

I2S

I2S slave на mainline ядре OrangePi

Для качественного аудио интерфейса требуется перевести I2S в слэйв-режим и подать сформированные на базе внешнего, стабильного клока, сигналы BCLK и LRCLK.

BCLK (Bit Serial Clock) — тактовые импульсы, по срезам которых происходит распознавание нужных пакетов данных.
LRCK (Left/Right Clock) — сигнал разделения левого и правого каналов – по нему ЦАП распознает, когда данные обрабатывать в левом, а когда в правом канале.
DATA — поток данных левого и правого каналов – то, что потом волшебным образом радует наш слух.
При использовании цифрового транспорта на базе OrangePi с подключением к ЦАП по I2S в слэйв-режиме, качество этого самого транспорта перестаёт иметь определяющее значение для конечного звука и дальше всё зависит от реализации самого ЦАП, усилителя, АС.
Используется патч драйвера I2S автор – Nikkov тема на веге и плата формирователя :
Цифровой транспорт с открытым кодом на NanoPI-Neo*
схема подключения к гребёнке :

собирал armbian на Win10 с VirtualBox + Ubuntu 16.04 x64 Developer-Guide_Build-Preparation

копируем файл:
sunxi-opipc-patch-I2S.patch в директорию /build/patch/kernel/sunxi-next

./compile.sh BOARD=orangepipc BRANCH=next RELEASE=jessie BUILD_DESKTOP=no KERNEL_ONLY=on KERNEL_CONFIGURE=yes

make linux-menuconfig (by buildroot)

Device Drivers
<*> -->Sound card support
<*>  -->Advanced Linux Sound Archtecture
<*>   -->ALSA for Soc audio support
          -->Allwinner Soc Audio support
             <*> Allwinner A10 Codec Support
             <*> Allwinner SUN8I audio codec
             <*> Allwinner sun8i Codec Analog Controls Suppor  
             <*> Allwinner A10 I2S Support
             <M> Allwinner A10 SPDIF Support
             <*> Allwinner sun8i I2S Support

Вот собранный имидж для OrangepiPC Armbian_5.35_Orangepipc_Debian_jessie_next_4.13.16.7z
На Opi:

armbian-config --> System --> Hardware

cat /proc/asound/cards

0 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                      H3 Audio Codec
 1 [sndsun8ii2sdac ]: snd-sun8i-i2s-d - snd-sun8i-i2s-dac
                      snd-sun8i-i2s-dac
 2 [allwinnerhdmi  ]: allwinner_hdmi - allwinner,hdmi
                      allwinner,hdmi
2017   armbian   I2S   OrangePI PC

I2S Аудио на mainline ядре OrangePi

Включение I2S аудио на armbian для Allwinner H2 & H3 на mainline ядре 4.13.

собирал armbian на Win10 с VirtualBox + Ubuntu 16.04 x64 Developer-Guide_Build-Preparation

./compile.sh BOARD=orangepipc BRANCH=next RELEASE=jessie BUILD_DESKTOP=no KERNEL_ONLY=on KERNEL_CONFIGURE=yes

make linux-menuconfig (by buildroot)

Device Drivers
<*>-->Sound card support
<*> -->Advanced Linux Sound Archtecture
<*>  -->ALSA for Soc audio support
        -->Allwinner Soc Audio support
             <*> Allwinner A10 Codec Support
             <*> Allwinner SUN8I audio codec
             <*> Allwinner sun8i Codec Analog Controls Suppor  
             <*> Allwinner A10 I2S Support
             <M> Allwinner A10 SPDIF Support

На Opi: cat /proc/asound/cards

0 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                      H3 Audio Codec
 1 [allwinnerhdmi  ]: allwinner_hdmi - allwinner,hdmi
                      allwinner,hdmi

Включение “Line Out”  – линейный выход на Opi (по умолчанию выключен)

amixer -c 0 -q set "Line Out"  100%+ unmute
amixer -c 0 -q set "DAC"  100%+ unmute
speaker-test -twav -c2

ставим headers(нужный пакет ищем после сборки имиджа в build/output/debs)
в моём случае:

dpkg -i linux-headers-next-sunxi_5.35_armhf.deb

Get the source & Build:

git clone https://github.com/ua3nbw-cf/ak4554.git
cd ak4554
make all install
armbian-add-overlay sun8i-h3-I2S.dts
reboot

в файле /boot/armbianEnv.txt появится строка:

user_overlays=sun8i-h3-I2S
проверка:

root@orangepipc:~# cat /proc/asound/cards
 0 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                      H3 Audio Codec
 1 [i2S            ]: i2S - i2S
                      i2S
 2 [allwinnerhdmi  ]: allwinner_hdmi - allwinner,hdmi
                      allwinner,hdmi
root@orangepipc:~# speaker-test -twav -c2 -Dhw:1
root@orangepipc:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: i2S [i2S], device 0: 1c22000.i2s-ak4554-hifi ak4554-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: allwinnerhdmi [allwinner,hdmi], device 0: 1c22800.i2s-i2s-hifi i2s-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Ну и запись по I2S

root@orangepipc:~# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: i2S [i2S], device 0: 1c22000.i2s-ak4554-hifi ak4554-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
2017   armbian   I2S   OrangePI PC