Ich versuche eine Adafruit I2S 3W Stereo-Lautsprecherhaube für Raspberry Pi - Mini Kit , die auf zwei MAX98357 (Datenblatt: Adafruit , Maxim ) basiert , auf einem Raspberry Pi Zero W mit Raspbian Stretch (gestern aktualisiert).
Das Problem ist, dass ich beim Starten / Ändern von Tracks "Pops" habe, selbst bei gleicher Audiorate. Ihre Anweisungen, um diese zu "reparieren", fügen den alsa-Konfigurationsdateien /etc/asound.conf
und meistens redundante Einstellungen hinzu ~/.asoundrc
.
Ich habe derzeit nur asound.conf, wie folgt:
$ cat /etc/asound.conf
pcm.speakerbonnet {
type hw card 0
}
pcm.dmixer {
type dmix
ipc_key 1024
ipc_perm 0666
slave {
pcm "speakerbonnet"
period_time 0
period_size 1024
buffer_size 8192
rate 44100
channels 2
}
}
ctl.dmixer {
type hw card 0
}
pcm.softvol {
type softvol
slave.pcm "dmixer"
control.name "PCM"
control.card 0
}
ctl.softvol {
type hw card 0
}
pcm.!default {
type plug
slave.pcm "softvol"
# slave.pcm "dmixer"
}
softvol
existiert, um die Lautstärke global steuern zu können (in Software, Verschwendung von Auflösung), da der DAC keine Hardwaresteuerung hat. Aber anscheinend können einige Spieler dies auch selbst tun, also sollte beides ausreichen.
In Bezug auf den Fahrer, die Anweisungen hinzufügen , dtoverlay=hifiberry-dac
zu /boot/config.txt
, aber die Hifiberry DAC (veraltet) auf einem (einzigen) anderen Chip, die PCM5102 basieren.
pi@raspberry:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
Hifiberry listet die Konfiguration für ihre Produkte unter https://www.hifiberry.com/build/documentation/configuring-linux-3-18-x/ auf .
Ich würde gerne wissen, was die Unterschiede sind und ob der Vorschlag zum IC passt. Könnte der Treiber zusätzliche Daten senden, die ein "Knallen" oder "Knistern" verursachen?
Interessanterweise scheint der Lautsprechertest bei der Wiedergabe niemals das anfängliche Rauschen zu erzeugen
$ speaker-test -c2 --test=wav -w /usr/share/sounds/alsa/Front_Center.wav
, während mpg123 dies tut (mit einem 16-kHz-Mono-MP3), auch zwischen Tracks:
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
version 1.23.8; written and copyright by Michael Hipp and others
free software (LGPL) without any warranty but with best wishes
Decoder: generic
Trying output module: alsa, device: <nil>
Using default module dir: /usr/lib/arm-linux-gnueabihf/mpg123
Module dir: /usr/lib/arm-linux-gnueabihf/mpg123
Module path: ./output_alsa.so
Chosen output module: alsa
...
Audio driver: alsa
Audio device: (null)
Audio capabilities:
(matrix of [S]tereo or [M]ono support for sample format and rate in Hz)
| s16 | u16 | s32 | u32 | s24 | u24 | f32 | s8 | u8 | ulaw | alaw |
------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
8000 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
11025 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
12000 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
16000 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
22050 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
24000 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
32000 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
44100 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
48000 | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S | M/S |
(Die Angabe von alsa funktioniert, die Angabe des Geräteindex schlägt fehl.)
Es ist nicht in der Datei, habe ich überprüft. Außerdem beginnt mplayer mit der Wiedergabe der identischen Datei in Ordnung, weist jedoch "Pops" zwischen den Titeln auf, obwohl die Angabe der Audioausgabe des mplayers das Knallen beim Wechseln der Titel fast zu eliminieren scheint.
mplayer -msglevel all=6 -ao alsa file.mp3
MPlayer 1.3.0 (Debian), built with gcc-6.2.1 (C) 2000-2016 MPlayer Team
CPU: ARM
AUDIO: 16000 Hz, 2 ch, s16le, 24.0 kbit/4.69% (ratio: 3000->64000)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)
==========================================================================
Building audio filter chain for 16000Hz/2ch/s16le -> 0Hz/0ch/??...
[libaf] Adding filter dummy
[dummy] Was reinitialized: 16000Hz/2ch/s16le
[dummy] Was reinitialized: 16000Hz/2ch/s16le
Trying preferred audio driver 'alsa', options '[none]'
alsa-init: requested format: 16000 Hz, 2 channels, 9
alsa-init: using ALSA 1.1.3
alsa-init: setup for 1/2 channel(s)
alsa-init: using device default
alsa-init: opening device in blocking mode
alsa-init: device reopened in blocking mode
alsa-init: got buffersize=32768
alsa-init: got period size 1024
alsa: 44100 Hz/2 channels/4 bpf/32768 bytes buffer/Signed 16 bit Little Endian
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)
AO: Description: ALSA-0.9.x-1.x audio output
AO: Author: Alex Beregszaszi, Zsolt Barat <joy@***.de>
AO: Comment: under development
Building audio filter chain for 16000Hz/2ch/s16le -> 44100Hz/2ch/s16le...
[dummy] Was reinitialized: 16000Hz/2ch/s16le
[libaf] Adding filter lavcresample
[SWR @ 0xb6841020]Using s16p internally between filters
[dummy] Was reinitialized: 44100Hz/2ch/s16le
[dummy] Was reinitialized: 44100Hz/2ch/s16le
Video: no video
Freeing 0 unused video chunks.
Starting playback...
Alsa Puffergröße stimmt nicht mit der Konfiguration überein.
MPD (gesteuert von mpc) klickt / knallt einmal, wenn die Wiedergabe beginnt, "strömt" dann aber anscheinend kontinuierlich, sodass das Wechseln der Titel kein Rauschen verursacht.
Unabhängig davon, was die Pops verursacht (Hardware? Treiber?), Können einige Spieler diese Situation besser vermeiden (Öffnen / Neukonfigurieren des Geräts).
Jede Eingabe, wie man zur Grundursache kommt und sie behebt, wird sehr geschätzt!
Weiter graben
Wenn Sie die ALSA-Plugins im Order-Plug -> dmix -> softvol -> pcm konfigurieren, wird im mplayer ein Fehler angezeigt:
[AO_ALSA] alsa-lib: pcm_dmix.c:1057:(snd_pcm_dmix_open) dmix plugin can be only connected to hw plugin
Also zurück zu: plug -> softvol -> dmix -> I2S DAC (Kernel PCM).
Die Konfigurationsdatei kann wie folgt hierarchisch geschrieben werden:
pcm.!default
{
type plug
slave
{
pcm
{
type softvol
slave
{
pcm
{
type dmix
ipc_key 1024
ipc_perm 0666
slave
{
pcm
{
type hw
card 0
}
#format "S16"
rate 32000
channels 2
period_size 2048 # bytes
buffer_size 32768 # usec
}
bindings
{
0 0
1 1
}
}
}
control
{
name "PCM"
card 0
}
}
}
}
Softvol's control
ist das, was als Mischgerät in z alsamixer
. Ich bin mir immer noch nicht sicher, was CTLs tun. Alsa speichert seine Konfiguration / Einstellungen normalerweise dauerhaft. Dies kann dazu führen, dass veraltete Mischgeräte angezeigt werden.
Dies funktionierte, um sie zu entfernen (verwenden Sie sudo):
rm /var/lib/alsa/asound.state # remove the state file
chmod -x /usr/sbin/alsactl # make alsactl non-executable to prevent settings being written on shutdown
<REBOOT>
chmod +x /usr/sbin/alsactl
Mit mplayer und 32kHz Audio knallt nur gelegentlich, wenn Titel gewechselt werden. Das Erhöhen der Puffergröße scheint die gelegentliche Wiedergabe von "Stottern / Echo" gelöst zu haben.
dmix ist das Plugin, das die meisten Pops beim Abspielen / Stoppen entfernt. Es macht keinen merklichen Unterschied, ob die Quellen oder die Standardrate in der Rate des dmix-Slaves eingestellt sind.
Gerätebaum-Overlays (Link zur Dokumentation unten):
$ ls /boot/overlays
adau1977-adc.dtbo fe-pi-audio.dtbo iqaudio-dacplus.dtbo pitft28-capacitive.dtbo sdtweak.dtbo
adau7002-simple.dtbo goodix.dtbo iqaudio-digi-wm8804-audio.dtbo pitft28-resistive.dtbo smi-dev.dtbo
ads1015.dtbo googlevoicehat-soundcard.dtbo justboom-dac.dtbo pitft35-resistive.dtbo smi.dtbo
ads1115.dtbo gpio-ir.dtbo justboom-digi.dtbo pps-gpio.dtbo smi-nand.dtbo
ads7846.dtbo gpio-poweroff.dtbo lirc-rpi.dtbo pwm-2chan.dtbo spi0-cs.dtbo
akkordion-iqdacplus.dtbo gpio-shutdown.dtbo mcp23017.dtbo pwm.dtbo spi0-hw-cs.dtbo
allo-boss-dac-pcm512x-audio.dtbo hifiberry-amp.dtbo mcp23s17.dtbo qca7000.dtbo spi1-1cs.dtbo
allo-digione.dtbo hifiberry-dac.dtbo mcp2515-can0.dtbo raspidac3.dtbo spi1-2cs.dtbo
allo-piano-dac-pcm512x-audio.dtbo hifiberry-dacplus.dtbo mcp2515-can1.dtbo README spi1-3cs.dtbo
allo-piano-dac-plus-pcm512x-audio.dtbo hifiberry-digi.dtbo mcp3008.dtbo rotary-encoder.dtbo spi2-1cs.dtbo
at86rf233.dtbo hifiberry-digi-pro.dtbo midi-uart0.dtbo rpi-backlight.dtbo spi2-2cs.dtbo
audioinjector-addons.dtbo hy28a.dtbo midi-uart1.dtbo rpi-cirrus-wm5102.dtbo spi2-3cs.dtbo
audioinjector-wm8731-audio.dtbo hy28b.dtbo mmc.dtbo rpi-dac.dtbo spi-gpio35-39.dtbo
audremap.dtbo i2c0-bcm2708.dtbo mpu6050.dtbo rpi-display.dtbo spi-rtc.dtbo
bmp085_i2c-sensor.dtbo i2c1-bcm2708.dtbo mz61581.dtbo rpi-ft5406.dtbo tinylcd35.dtbo
dht11.dtbo i2c-bcm2708.dtbo papirus.dtbo rpi-proto.dtbo uart1.dtbo
dionaudio-loco.dtbo i2c-gpio.dtbo pi3-act-led.dtbo rpi-sense.dtbo vc4-fkms-v3d.dtbo
dionaudio-loco-v2.dtbo i2c-mux.dtbo pi3-disable-bt.dtbo rpi-tv.dtbo vc4-kms-v3d.dtbo
dpi18.dtbo i2c-pwm-pca9685a.dtbo pi3-disable-wifi.dtbo rra-digidac1-wm8741-audio.dtbo vga666.dtbo
dpi24.dtbo i2c-rtc.dtbo pi3-miniuart-bt.dtbo sc16is750-i2c.dtbo w1-gpio.dtbo
dwc2.dtbo i2c-rtc-gpio.dtbo piscreen2r.dtbo sc16is752-spi1.dtbo w1-gpio-pullup.dtbo
dwc-otg.dtbo i2c-sensor.dtbo piscreen.dtbo sdhost.dtbo wittypi.dtbo
enc28j60.dtbo i2s-gpio28-31.dtbo pisound.dtbo sdio-1bit.dtbo
enc28j60-spi2.dtbo iqaudio-dac.dtbo pitft22.dtbo sdio.dtbo
Die Overlay-Dateien sind binär, durchsuchen jedoch die Quellen unter https://github.com/raspberrypi/linux/search?utf8=%E2%9C%93&q=hifiberry&type=
führt zu ein paar Treffern:
- https://github.com/raspberrypi/linux/tree/rpi-4.9.y/arch/arm/boot/dts/overlays
- https://github.com/raspberrypi/linux/blob/rpi-4.9.y/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
und weiter
- https://github.com/raspberrypi/linux/search?utf8=%E2%9C%93&q=pcm5102a&type=
- https://github.com/raspberrypi/linux/tree/rpi-4.9.y/Documentation/devicetree/bindings/sound
- https://github.com/raspberrypi/linux/search?utf8=%E2%9C%93&q=MAX98357A+&type=
- https://github.com/raspberrypi/linux/blob/rpi-4.9.y/sound/soc/codecs/max98357a.c
- https://github.com/raspberrypi/linux/blob/rpi-4.9.y/sound/soc/codecs/pcm5102a.c
Es existiert also ein bestimmter Treiber. Ist es in Raspbian verfügbar?
$ find /lib/modules/$(uname -r) -type f -name \*.ko | grep sound
/lib/modules/4.9.59+/kernel/sound/ac97_bus.ko
/lib/modules/4.9.59+/kernel/sound/drivers/mpu401/snd-mpu401.ko
/lib/modules/4.9.59+/kernel/sound/drivers/mpu401/snd-mpu401-uart.ko
/lib/modules/4.9.59+/kernel/sound/drivers/snd-virmidi.ko
/lib/modules/4.9.59+/kernel/sound/drivers/snd-dummy.ko
/lib/modules/4.9.59+/kernel/sound/drivers/snd-aloop.ko
/lib/modules/4.9.59+/kernel/sound/drivers/snd-mtpav.ko
/lib/modules/4.9.59+/kernel/sound/drivers/snd-serial-u16550.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-wm5102.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-pcm512x-i2c.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-adau7002.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-spdif-tx.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-sigmadsp-i2c.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-spdif-rx.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-wm8731.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-adau1701.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-cs42xx8-i2c.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-adau1977-i2c.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-ak4554.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-wm8804-i2c.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-pcm512x.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-sgtl5000.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-wm8741.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-pcm1794a.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-wm8804.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-arizona.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-tas5713.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-sigmadsp.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-adau1977.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-tpa6130a2.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-wm-adsp.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-cs42xx8.ko
/lib/modules/4.9.59+/kernel/sound/soc/codecs/snd-soc-pcm5102a.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-googlevoicehat-soundcard.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-rpi-cirrus.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-hifiberry-dacplus.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-hifiberry-amp.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-hifiberry-dac.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-allo-piano-dac-plus.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-raspidac3.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-digidac1-soundcard.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-adau1977-adc.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-rpi-dac.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-audioinjector-pi-soundcard.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-allo-piano-dac.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-fe-pi-audio.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-allo-digione.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-dionaudio-loco.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-bcm2835-i2s.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-rpi-proto.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-allo-boss-dac.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-hifiberry-digi.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-iqaudio-digi.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-pisound.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-iqaudio-dac.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-justboom-digi.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-audioinjector-octo-soundcard.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-dionaudio-loco-v2.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-justboom-dac.ko
/lib/modules/4.9.59+/kernel/sound/soc/bcm/snd-soc-googlevoicehat-codec.ko
/lib/modules/4.9.59+/kernel/sound/soc/snd-soc-core.ko
/lib/modules/4.9.59+/kernel/sound/soc/generic/snd-soc-simple-card.ko
/lib/modules/4.9.59+/kernel/sound/soc/generic/snd-soc-simple-card-utils.ko
/lib/modules/4.9.59+/kernel/sound/core/snd-hwdep.ko
/lib/modules/4.9.59+/kernel/sound/core/oss/snd-mixer-oss.ko
/lib/modules/4.9.59+/kernel/sound/core/oss/snd-pcm-oss.ko
/lib/modules/4.9.59+/kernel/sound/core/snd-pcm.ko
/lib/modules/4.9.59+/kernel/sound/core/snd-compress.ko
/lib/modules/4.9.59+/kernel/sound/core/snd-timer.ko
/lib/modules/4.9.59+/kernel/sound/core/snd-rawmidi.ko
/lib/modules/4.9.59+/kernel/sound/core/snd-hrtimer.ko
/lib/modules/4.9.59+/kernel/sound/core/seq/snd-seq-virmidi.ko
/lib/modules/4.9.59+/kernel/sound/core/seq/oss/snd-seq-oss.ko
/lib/modules/4.9.59+/kernel/sound/core/seq/snd-seq-midi-event.ko
/lib/modules/4.9.59+/kernel/sound/core/seq/snd-seq-device.ko
/lib/modules/4.9.59+/kernel/sound/core/seq/snd-seq.ko
/lib/modules/4.9.59+/kernel/sound/core/seq/snd-seq-midi.ko
/lib/modules/4.9.59+/kernel/sound/core/seq/snd-seq-dummy.ko
/lib/modules/4.9.59+/kernel/sound/core/snd.ko
/lib/modules/4.9.59+/kernel/sound/core/snd-pcm-dmaengine.ko
/lib/modules/4.9.59+/kernel/sound/arm/snd-bcm2835.ko
/lib/modules/4.9.59+/kernel/sound/usb/snd-usb-audio.ko
/lib/modules/4.9.59+/kernel/sound/usb/caiaq/snd-usb-caiaq.ko
/lib/modules/4.9.59+/kernel/sound/usb/misc/snd-ua101.ko
/lib/modules/4.9.59+/kernel/sound/usb/6fire/snd-usb-6fire.ko
/lib/modules/4.9.59+/kernel/sound/usb/snd-usbmidi-lib.ko
/lib/modules/4.9.59+/kernel/sound/pci/ac97/snd-ac97-codec.ko
Nee.
Ältere Bemühungen, den Fahrer für ein anderes Board zu begeistern : http://community.onion.io/topic/1761/resolved-attaching-pcm5102-to-omega2-i2s/13
Dies zeigt möglicherweise, wie eine passende Gerätebaumüberlagerung erstellt und der Treiber angegeben wird (muss kompiliert werden?):
https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=8496&start=750#p1216305
Update 2
Dies muss durch (erneutes) Öffnen des Geräts verursacht werden. Mit $ aplay -D default -c 2 -f S16 -r 48000 /dev/zero &
den Pops sind mit jedem Spieler weg. Das Spielen von Nullen und das Mischen von Software scheint jedoch etwas CPU-intensiv zu sein:
$ w
18:21:38 up 1:17, 1 user, load average: 0.11, 0.15, 0.12
...
Töte es mit
pi@raspberry:~ $ ps | grep aplay
16697 pts/0 00:00:28 aplay
pi@raspberry:~ $ ps aux | grep aplay
pi 16697 2.6 0.6 5828 2996 pts/0 SL 18:08 0:29 aplay -D default -c 2 -f S16 -r 48000 /dev/zero
pi 21159 0.0 0.3 4364 1764 pts/0 S+ 18:26 0:00 grep --color=auto aplay
pi@raspberry:~ $ kill 16697
pi@raspberry:~ $ Aborted by signal Terminated...
aplay: pcm_write:2011: write error: Interrupted system call
^C
[1]+ Exit 1 aplay -D default -c 2 -f S16 -r 48000 /dev/zero
pi@raspberry:~ $
(Man könnte dies über einen Eintrag in /etc/rc.local " automatisch starten" .)
Update 3
MPD scheint die Option zu haben, "diese Audioausgabe immer offen zu halten": https://www.musicpd.org/doc/user/config_audio_outputs.html Aber es scheint nur für das Streaming zu sein, da es keine Auswirkungen auf die Wiedergabe hat Start:
sudo nano /etc/mpd.conf
audio_output {
type "alsa"
name "default"
# device "hw:0,0" # optional
# mixer_type "hardware" # optional
# mixer_device "default" # optional
mixer_control "PCM" # optional
# mixer_index "0" # optional
always_on "yes"
}
sudo service mpd restart
mpc play
mpc stop
Weitere Messungen und Vergleiche mit Audioaufnahmen zeigen:
- Wenn der hörbare Fehler / Knall / Riss zu Beginn der Wiedergabe auftritt (I2S-Start), ist er an beiden Lautsprecherausgängen als positive Spitze sichtbar
- Ich vermute, es könnte durch das LRCLK verursacht werden, das ca. 500 uns nach BCLK
- Datenblatt zeigt unterschiedliche Reihenfolge in "EINSCHALTEN DER ANTWORT (STANDBY-MODUS)"
Also zurück zur I2S-Schnittstelle und zum Treiber
- https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/README.md
- https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf
- https://elinux.org/BCM2835_datasheet_errata
- https://github.com/arisena-com/rpi_src
Erstellen und Ausführen (Warnung: Das Stoppen des Programms auch über desetup_io () stoppt das I2S nicht) ...
~ $ git clone https://github.com/arisena-com/rpi_src
...
~/rpi_src/apps/i2s_test/src $ make
...
~/rpi_src/apps/i2s_test/src $ sudo ./i2s_test -t 2
Startet das LRCLK an der dritten ansteigenden Flanke von BCLK und führt zu einem schönen Hochlauf, wie im Datenblatt gezeigt, obwohl BLCK zuerst startet.
Mit _i2s_test_ . Die Uhr (gelb) startet zwei Impulse vor LRCLK (cyan). Audioausgang-Hochlauf auf beiden Kanälen sichtbar ( kein Knacken oder Knistern):
Audio abspielen. Beachten Sie die Störung / Lücke in der Uhr (gelb, ungefähr 30 us Uhr, gefolgt von 150 us hoch). Die Ausgabe (pink / blau) scheint undefiniert zu sein, bevor Pop auftritt (am Trigger), wenn LRCLK startet, etwa 30 ms vor dem Start der Daten (nicht gezeigt):
Manchmal fällt der Pop nicht auf, aber die Spur sieht sehr ähnlich aus.
Ist es also der BLCK-Fehler (was verursacht dies, es ist wahrscheinlich nicht beabsichtigt) oder die Polarität (i2s_test beginnt bei niedrigem Pegel), während der reguläre Betrieb einen hohen Pegel hat?
Versuchen wir also, den entsprechenden Treiber zu verwenden, wie unter https://raspberrypi.stackexchange.com/a/74804/75483 beschrieben
[Das Erstellen des Kernels dauert wahrscheinlich einen Tag oder so, es lohnt sich wahrscheinlich, sich mit Cross-Compiling zu befassen.]
Obwohl es in Ordnung zu sein scheint (sound / soc / codecs / snd-soc-max98357a.ko), scheint das pi0w danach nicht richtig zu booten, zumindest stellt es keine Verbindung zu WLAN her. Ich muss es an ein Display anschließen und verstecken.
Ich konnte auch keine Tastatur zum Laufen bringen, und das liegt nicht daran, dass ich zuerst einen einfachen A-Micro B-Adapter anstelle eines richtigen OTG-Adapters verwendet habe.
Jetzt könnte ich es wahrscheinlich über die serielle Schnittstelle anschließen ...
Das Ende der funktionierenden (Stretch Lite-Standardkernel) Bootprozessausgabe auf seriell sieht aus
[ 0.000000] Linux version 4.9.41+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #1023 Tue Aug 8 15:47:12 BST 2017
[ OK ] Started Configure Bluetooth Modems connected by UART.
[ OK ] Started Load/Save RF Kill Switch Status.
[ OK ] Started LSB: Resize the root filesystem to fill partition.
[ OK ] Started dhcpcd on all interfaces.
[ OK ] Reached target Network.
[ OK ] Reached target Network is Online.
[ OK ] Started Daily apt download activities.
[ OK ] Started Daily apt upgrade and clean activities.
[ OK ] Reached target Timers.
Starting OpenBSD Secure Shell server...
Starting Permit User Sessions...
Starting /etc/rc.local Compatibility...
My IP address is xxxx:xx:xxxx:xxxx:xxxx:xxxx:xxx:xxxx
[ OK ] Started OpenBSD Secure Shell server.
[ OK ] Started Permit User Sessions.
[ OK ] Started /etc/rc.local Compatibility.
Starting Daily apt download activities...
Starting Hold until boot process finishes up...
Starting Terminate Plymouth Boot Screen...
Das Bild mit benutzerdefiniertem Kernel (kein WLAN, keine Tastatur) ergibt
[ 0.000000] Linux version 4.9.61+ (pi@raspberry) (gcc version 6.3.0 20170516 (Raspbian 6.3.0-18+rpi1) ) #1 Mon Nov 13 03:14:02 CET 2017
[FAILED] Failed to start Configure Bluetooth Modems connected by UART.
See 'systemctl status hciuart.service' for details.
[ OK ] Started dhcpcd on all interfaces.
[ OK ] Reached target Network.
Starting OpenBSD Secure Shell server...
[ OK ] Reached target Network is Online.
Starting LSB: Start NTP daemon...
[ OK ] Started Music Player Daemon.
Starting Permit User Sessions...
Starting /etc/rc.local Compatibility...
[ OK ] Started /etc/rc.local Compatibility.
[ OK ] Started Permit User Sessions.
Starting Terminate Plymouth Boot Screen...
Starting Hold until boot process finishes up...
[ OK ] Created slice User Slice of root.
[ OK ] Started Session c1 of user root.
Starting User Manager for UID 0...
Befinden sich WIFI und Bluetooth nicht auf demselben Chip? Keine Hardware-Informationen oder aktuellen Schaltpläne von RPi Foundation erhältlich.
pi@raspberry:~$ ifconfig wlan0
wlan0: error fetching interface information: Device not found
Also habe ich das Wifi kaputt gemacht. Gibt es eine Chance, zum funktionierenden Kernel / zur funktionierenden Konfiguration zurückzukehren, ohne meine Änderungen / Dateien zu verlieren? Kerneldateien von funktionierenden SD ersetzen? Nein , das Ersetzen von allem in / boot / außer config.txt führt zu einem hängenden Start bei
[ 2.930955] mmc1: new high speed SDIO card at address 0001
[ 22.411095] random: crng init done
Jetzt muss ich wirklich neu anfangen. Möglicherweise kann ich meine Daten von zu Hause aus lesen, indem ich das beschädigte System über USB OTG und Kartenleser anschließe
sudo mkdir /media/usb
sudo chown -R pi:pi /media/usb
sudo mount /dev/sda2 /media/usb
/media/usb/home/pi$ cp -r * ~
Vielleicht hätte ich zuerst aktualisieren sollen:
pi@raspberrypi:~ $ sudo rpi-update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
...
*** Backing up modules 4.9.41+
...
*** depmod 4.9.62-v7+
*** depmod 4.9.62+
...
*** If no errors appeared, your firmware was successfully updated to 23b1614bb794dfce586f1300da75198befa4951d
*** A reboot is needed to activate the new firmware
pi@raspberrypi:~ $ sudo reboot
- Ich könnte es morgen erneut versuchen (nachdem ich ein Backup erstellt habe).
Kein Wifi / IP nach dem Update (aber wlan0 in gezeigt
ifconfig
)- setze WLAN-Land mit
sudp raspi-config
(4> I4)
- setze WLAN-Land mit
Das Overlay muss
i2s-mmap
weder aktiviert noch automatisch aktiviert werdeni2s
,hifiberry-dac
und mmap ist seit 4.9 (April 2017) implizit verfügbar .
Informationen zu genau diesen Problemen und einigen Details zum I2S-Treiber finden Sie unter https://github.com/raspberrypi/linux/issues/2212
Ressourcen:
Antworten:
Ja, es ist verfügbar, indem Sie es als Modul angeben und den Kernel neu kompilieren . Eine Möglichkeit zur Konfiguration für max98357a besteht darin,
sound/soc/bcm/Kconfig
die folgende Zeile zu bearbeiten :direkt unter der Leitung mit PCM5102A, und fügen
CONFIG_SND_SOC_MAX98357A=m
Sie dann Ihre.config
vor dem Wiederaufbau hinzu.Mir wurde gesagt, dass diese Art der direkten Bearbeitung
.config
verpönt ist, aber so wie es jetzt aussieht, erscheint dieses Modul nicht in der Menükonfiguration.Wenn ich das Modul über
sudo modprobe snd-soc-max98357a
meinen Pi Zero W lade, werden in dmesg keine Fehler angezeigt, was es wert ist. Wenn dies Sie Ihrem Ziel näher bringen oder zumindest etwas ausschließen könnte, stellen Sie Ihnen diese kompilierten Binärdateien gerne zur Verfügung.Richtig, Sie könnten versuchen
hifiberry-dac-overlay.dts
, pcm5102a durch max98357a zu bearbeiten und zu ersetzen. Gerätebaum-Overlays werden automatisch mit demdtbs
Ziel im Standard-Kernel-Build-Flow neu erstellt.quelle
Sie müssen ein leistungsfähigeres RPi ausprobieren. Die Mischung aus der Zero W Single Core CPU und Linux ergibt ein System, das in einigen Fällen nicht so reaktionsschnell ist. Eine "Pause" von einigen Millisekunden im falschen Moment ist ein Riss oder ein Knall.
Die Tatsache, dass ein größerer Puffer etwas geholfen hat, ist ein wichtiges Symptom. Vielleicht ist es nicht möglich, Ihr Problem zu lösen.
quelle
nice -20
? Wenn diese Befehle Laich Subprozesse können Sie sich auchtop
undrenice
die untergeordneten Prozesse. Dies ist ein Softwareansatz zum Testen der Erklärung von @ nicolap8. Der Hardware-Ansatz besteht je nach Schwierigkeit beim Wiederherstellen Ihres Setups darin, mit einem Pi 3 zu testen.Wenn ich Ihre Frage wirklich richtig verstehe: Dies sollte Ihnen helfen: Wenn nicht, werde ich sie löschen:
Quelle
quelle
Update (2013-03-07): According to a comment on the Raspberry Pi bug tracker, this problem has now been fixed.
Bei der Fehlerbehebung bei einem anderen I2S-Problem bin ich auf dieses Problem gestoßen. Es hat in der Tat oben mit dem Öffnen und Schließen des Geräts zu tun.
Es gibt eine Option für den "Auto Sleep" -Sound. Wenn Sie das deaktivieren möchten, bedeutet dies, dass das Audiogerät mit mehr Strom, aber ohne Knaller offen gehalten wird
quelle