Pifi dac+ v2.0 pcm5122

Тема в разделе "Raspberry Pi", создана пользователем Mihay, 7 авг 2021.

  1. Mihay

    Mihay Гик

    Здравствуйте!
    Купил звуковую плату расширения PiFi DAC+ v2.0. Поставил ее, настраивал по инструкции: https://compacttool.ru/pifi-dac-v20-pcm5122 . Информации по настройке этой платы на OS Raspbian больше не нашел (у меня стоит Raspbian от Амперки). Сделал все по инструкции. Но OS не видит плату расширения: На команду
    Код (C++):
    aplay -l
    отвечает:
    Код (C++):
    aplay: device_list:272: no soundcards found...
     
    Может мне кто-нибудь помочь?
     
  2. Un_ka

    Un_ka Гуру

    Покажите вывод команд:
    Код (Bash):
    cat /boot/config.txt
    cat /etc/modules
     
    Перезагрузку делали?
     
  3. Mihay

    Mihay Гик

    Вывод 1-ой команды: (#=========My================ мои изменения)

    Код (C++):
    pi@raspberrypi:~ $ cat /boot/config.txt
    # For more options and information see
    # http://www.raspberrypi.org/documentation/configuration/config-txt.md
    # Some settings may impact device functionality. See link above for details
    # uncomment if you get no picture on HDMI for a default "safe" mode
    #hdmi_safe=1
    # uncomment this if your display has a black border of unused pixels visible
    # and your display can output without overscan
    #disable_overscan=1
    # uncomment the following to adjust overscan. Use positive numbers if console
    # goes off screen, and negative if there is too much border
    #overscan_left=16
    #overscan_right=16
    #overscan_top=16
    #overscan_bottom=16
    # uncomment to force a console size. By default it will be display's size minus
    # overscan.
    #framebuffer_width=1280
    #framebuffer_height=720
    # uncomment if hdmi display is not detected and composite is being output
    #hdmi_force_hotplug=1
    # uncomment to force a specific HDMI mode (this will force VGA)
    #hdmi_group=1
    #hdmi_mode=1
    # uncomment to force a HDMI mode rather than DVI. This can make audio work in
    # DMT (computer monitor) modes
    #hdmi_drive=2
    # uncomment to increase signal to HDMI, if you have interference, blanking, or
    # no display
    #config_hdmi_boost=4
    # uncomment for composite PAL
    #sdtv_mode=2
    #uncomment to overclock the arm. 700 MHz is the default.
    #arm_freq=800
    # Uncomment some or all of these to enable the optional hardware interfaces
    # ==================================== My ==============================================
    dtparam=i2c_arm=on
    dtparam=i2s=on
    dtoverlay=iqaudio-dacplus
    #======================================================================================
    #dtparam=spi=on
    enable_uart=1
    # Uncomment this to enable the lirc-rpi module
    #dtoverlay=lirc-rpi
    # Additional overlays and parameters are documented /boot/overlays/README
    # Enable audio (loads snd_bcm2835)
    # ==================================== My ==============================================
    dtparam=audio=off
    #======================================================================================
    dtoverlay=waveshare32b:rotate=270
    #dtoverlay=ads7846,cs=1,penirq=17,penirq_pull=2,speed=1000000,keep_vref_on=1,swapxy=0,pmax=255,xohms=60,xmin=200,xmax=3900,ymin=200,ymax=3900
    #hdmi_force_hotplug=1
    #max_usb_current=1

    #hdmi_group=2
    #hdmi_mode=1
    #hdmi_mode=87
    #hdmi_cvt 480 320 60 6 0 0 0
    #hdmi_drive=2
    start_x=1
    gpu_mem=128
    dtoverlay=w1-gpio
    #dtparam=audio=on
    #hdmi_ignore_edid_audio=1
    #hdmi_force_edid_audio=0

    Вывод 2-ой команды: (#=========My================ мои изменения)

    Код (C++):
    pi@raspberrypi:~ $ cat /etc/modules
    # /etc/modules: kernel modules to load at boot time.
    #
    # This file contains the names of kernel modules that should be loaded
    # at boot time, one per line. Lines beginning with "#" are ignored.

    i2c-dev
    #=========================================== My ========================================
    bcm2708_dmaengine
    snd_soc_pcm512x
    snd_soc_hifiberry_dacplus
    snd_soc_bcm2708_i2s
    #snd-bcm2835
    #=======================================================================================
     
    Перезагрузку делал!
     
  4. Un_ka

    Un_ka Гуру

    Хотя Дельфийский оракул всё ещё в отпуске, вот что могу посоветовать:
    1. Заменить '_' на '-' в /etc/modules в изменениях, после чего перезагрузка.
    2. поискать кое-что в логах загрузки ядра:
      Код (Bash):
      dmseg | grep pcm512
      и показать, что выдало. Сначала нужно выполнить этот пункт.
     
  5. Mihay

    Mihay Гик

    Заменил в /etc/modules "_" на "-" - после перезагрузки ничего не изменилось
    Но я порылся в англоязычных сайтах, нашел кое-что и по совету оттуда:
    В
    Код (C++):
    /boot/config.txt
    добавил:
    Код (C++):
    dtoverlay=vc4-fkms-v3d
    max_framebuffers=2
    dtoverlay=hifiberry-dac
    dtdebug=1
     
    И теперь на команду
    Код (C++):
    aplay -l
    Отвечает:
    Код (C++):
    **** List of PLAYBACK Hardware Devices ****
    card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
     
    Не знаю правильно ли система определила устройство, т.к. если верить мануалу по ссылке в самом первом моем сообщении, устройство должно было определиться так:
    Код (C++):
    card 0: sndrpihifiberry [snd_rpi_hifiberry_dacplus], device 0: HiFiBerry DAC+ HiFi pcm512x-hifi-0  [HifiBerry DAC+ HiFi pcm5102x-hifi-0]
      Subdevices: 0/1
      Subdevice #0: subdevice #0
    По команде в логах загрузки ядра:
    Код (C++):
     pi@raspberrypi:~ $ dmesg | grep pcm512
    [   11.122856] pcm512x 1-004c: Failed to reset device: -121
    [   11.123317] pcm512x: probe of 1-004c failed with error -121
     
    В загруженной ОС значок звука перечеркнут с сообщением; No volume control on this device
    Т.е. как бы устройство нашлось, но воспроизводить звуки не хочет!
     
    Последнее редактирование: 7 авг 2021
  6. Un_ka

    Un_ka Гуру

    Это когда в config.txt дефисы или нижние подчёркивания?
     
  7. Mihay

    Mihay Гик

    Добавил в config.txt строку

    dtoverlay=hifiberry-dacplus

    ЦАП стал включаться.
    В VLC media player приходиться выбирать Audio Device:

    snd_rpi_hifiberry_dacplus, HiFiBerry DAC+ HiFI pcm512x-hifi 0 Direct sample mixing device.

    Только при этой выборке идет звук, но плохой (хрипит и свистит). Я бы грешил на колонки, но в системе LibreELECT (Kodi) колонки работают нормально! Кто-то скажет что используй Kodi, но там программировать на Python-е невозможно. Поэтому пытаюсь заставить Raspbian (от Амперки) включать HiFi-модуль.

    При выборе устройств в VLC там есть устройство:

    snd_rpi_hifiberry_dacplus, HiFiBerry DAC+ HiFI pcm512x-hifi 0 Default Audio Device.

    При выборе его ЦАП включается (зеленый светодиод загорается), но звука нет. По идее именно оно должно работать нормально, а не mixing device, что описан выше.

    Еще хотелось бы чтоб HiFI-устройство выбиралось автоматически. По умолчанию Audio выставляется в default (без HiFi-модуля).
     
  8. Un_ka

    Un_ka Гуру

    А вывод команды
    Код (Bash):
    aplay -l
    поменялся?
    В файле всё как в инструкции?
    Код (Bash):
    cat /etc/asound.conf
     
  9. Mihay

    Mihay Гик

    Команда:
    Код (C++):
    aplay -l
    вроде стала правильное устройство выдавать:
    Код (C++):
    **** List of PLAYBACK Hardware Devices ****
    card 0: sndrpihifiberry [snd_rpi_hifiberry_dacplus], device 0: HiFiBerry DAC+ HiFi pcm512x-hifi-0 [HiFiBerry DAC+ HiFi pcm512x-hifi-0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
     
    А вот
    Код (C++):
    cat /etc/asound.conf
    Код (C++):
    pcm.!default  {
    type hw card 0
    }
    ctl.!default {
    type hw card 0
    }
     
     
  10. Mihay

    Mihay Гик

    А вот команда:
    Код (C++):
     dmesg | grep pcm512
    выдает ошибки:
    Код (C++):

    [   11.056598] pcm512x 1-004c: Failed to reset device: -121
    [   11.057294] pcm512x: probe of 1-004c failed with error -121
     
     
  11. Un_ka

    Un_ka Гуру

    Это видели?
    Какая у вас модель Raspberry pi и вывод команды
    Код (Bash):
    uname -a
     
  12. Mihay

    Mihay Гик

    Модель: Raspberry Pi 3 Model B

    Код (C++):
    pi@raspberrypi:~ $ uname -a
    Linux raspberrypi 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l GNU/Linux
     
     
  13. Mihay

    Mihay Гик

    Это видел, но там из всего разговора я понял что надо попробовать в
    /boot/config.txt добавить:
    Код (C++):
    kernel=vmlinuz-3.18.0-trunk-rpi
    initramfs initrd.img-3.18.0-trunk-rpi followkernel
    # to enable DeviceTree, comment out the next line
    device_tree=
    gpu_mem=16

    arm_freq=950
    core_freq=450
    sdram_freq=450
    over_voltage=6

    arm_freq_min=700
    core_freq_min=250
    sdram_freq_min=400
    over_voltage_min=0

    force_turbo=0
    Попробую!
     
  14. Mihay

    Mihay Гик

    Экспериментировал над настройками. Ничего не помогло! Вернее помогло что при команде:
    Код (C++):

    dmesg | grep pcm512
     
    стала выдаваться другое сообщение:
    Код (C++):

    pcm512x 1-004d: No SCLK, using BCLK: -2
     
    Это сообщение выдается тогда когда я проигрываю аудио! Звука нет!

    Я думаю это лучше, чем не обнаруживать плату:
    Код (C++):
    pcm512x 1-004c: Failed to reset device: -121
    pcm512x: probe of 1-004c failed with error -121
     
    На этом я застрял. Куда двигаться дальше - не знаю!
     
  15. Mihay

    Mihay Гик

    Еще я заметил вот это: устройство bcm2835 в конфигурации отключено, но оно по прежнему аппаратно подключено. На команду:
    Код (C++):

    i2cdetect -l
    выдает
    Код (C++):

    i2c-1   i2c     bcm2835 (i2c@7e804000)           I2C adapter
     
    Хотя по идее должно было что-то вроде hifi dac+
     
  16. Un_ka

    Un_ka Гуру

    Модуль по i²C должен определяться.
    В выводе должен быть хотя бы один адрес:
    Код (Bash):
    i2cdetect -y 1
    Может вам это в конфиге /boot/config.txt мешает?
    Попробуйте закоментировать данные строки и привести конфиги к виду как в инструкции.
     
  17. Mihay

    Mihay Гик

    Комментировал данные строки и привел конфиги так как в инструкции.
    После танцев с бубном по инструкциям в англоязычных инструкций у меня получилось следующее.
    1. Файла блеклиста
    Код (C++):
    /etc/modprobe.d/blacklist
    в системе не было, но я его создал, добавил в блэклист родной драйвер snd_bcm2835.
    2. Команда
    Код (C++):
    dmesg| grep pcm512
    после загрузки ничего не выводит.
    3. При проигрывании аудиофайла включается ЦАП (зеленый светодиод на плате), звука нет. Но команда
    Код (C++):
    dmesg| grep pcm512
    дает следующий ответ:
    Код (C++):
    pcm512x 1-004d: No SCLK, using BCLK: -2
    4. Пытался гуглить эту ошибку, но ответа не нашел.
    Жду ваших рекомендаций по колдовству над PiFi DAC+ 2.0 :)
     
  18. Un_ka

    Un_ka Гуру

    А вывод адресов I²C
    Код (Bash):
    i2cdetect -y 1
    Значит что-то его использовало или в каких-то других конфигах он был упомянут.
    Мне вот интересно на что-нибудь из этого в логах загрузки ядра ругани нет?
    Код (Bash):
    dmseg | grep bcm2708
     
    Или вообще:
    Код (Bash):
    dmseg | grep bcm2708 | grep Fail
    Код (Bash):
    dmseg | grep hifiberry
     
  19. Mihay

    Mihay Гик

    Команда
    Код (C++):
    dmseg | grep bcm2708
    возвращает ответ:
    Код (C++):
    [    0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=1184 bcm2708_fb.fbheight=624 bcm2708_fb.fbswap=1 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo
    [    1.959249] bcm2708_fb soc:fb: FB found 1 display(s)
    [    1.999445] bcm2708_fb soc:fb: Registered framebuffer for display 0, size 118
    На команды
    Код (C++):
    dmesg | grep bcm2708 | grep Fail
    dmesg | grep hifiberry
    ответа нет.
    К сожаленью я пока не знаю, что это все значит!
     
  20. Un_ka

    Un_ka Гуру

    Код (Bash):
    dmesg | grep bcm2708 | grep Fail
    Эта команда ищет в выводе команды
    Код (Bash):
    dmesg
    Текст "bcm2708", а потом в найдено ищет текст "Fail".