Raspberry Pi + codec audio na I2S

Próbuję w tej chwili podłączyć Raspberry Pi Zero do modułu z układem wm8731. System wykrywa chip na magistrali i2c. Pierwotnie posługiwałem się tym opisem:

formatting link
Pominąłem jedynie opis poświęcony kompilowaniu jądra, bo AFAIK od jakiegoś czasu niezbędne moduły są już standardowo dołączane do Rapbiana Jessie. Niestety stosowanie się do tej instrukcji nie przynosiło żadnych efektów - w systemie nie pojawiała się żadna nowa karta dźwiękowa.

Trochę doczytałem i wygląda na to, że w nowszych wersjach systemu ładowanie modułów odbywa się przez wpisy w /boot/config.txt

Dodałem więc następujące wpisy: dtparam=i2s=on dtoverlay=i2s-mmap dtoverlay=rpi-proto

Po restarcie nastąpił połowiczny sukces "aplay -l" pokazuje kartę dźwiękową, jednak dmesg pokazuje następujące błędy podczas startu systemu:

[ 9.949830] snd-rpi-proto soc:sound: ASoC: CPU DAI (null) not registered [ 9.949873] snd-rpi-proto soc:sound: snd_soc_register_card() failed: -517 [ 10.033350] snd-rpi-proto soc:sound: ASoC: CODEC DAI wm8731-hifi not registered [ 10.033391] snd-rpi-proto soc:sound: snd_soc_register_card() failed: -517

Nie jestem też w stanie niczego odtworzyć za pośrednictwem tej karty - w głośnikach cisza, a w dmesg kolejne błędy:

[ 175.093402] bcm2835-i2s 20203000.i2s: I2S SYNC error! [ 176.125304] bcm2835-dma 20007000.dma: DMA transfer could not be terminated [ 176.126270] bcm2835-i2s 20203000.i2s: I2S SYNC error! [ 176.265806] bcm2835-dma 20007000.dma: DMA transfer could not be terminated

Ktoś ma jakiś pomysł? problem prawie na pewno nie jest sprzętowy. Próbowałem na dwóch różnych Raspberry Pi i wielokrotnie sprawdzałem połączenia.

Reply to
Atlantis
Loading thread data ...

W dniu 2016-08-22 o 20:29, Atlantis pisze:

[...]

z I2S kiedyś walczyłem, niestety nie na Raspie, tylko na DSP TI, ale... sam I2S ma kilka trybów (podobnie jak SPI) rózniących się polaryzacją zegara, liczbą bitów, kodowaniem kanałów itp. Jak się format nadawania nie zgadza z wymaganym przez kodek - nie zadziała. Polecam DOKŁADNĄ lekturę datasheetów.

a.

Reply to
Artur Miller

W dniu 2016-08-22 o 21:40, Artur Miller pisze:

Tylko co mi dadzą datasheety, jeśli używam Raspberry Pi? Nie znam się na Linuksie na tyle, żeby myśleć o napisaniu własnego sterownika. Mogę jedynie operować na tym, co już jest w systemie i zastanawiać się, dlaczego nie działa.

Reply to
Atlantis

W dniu 2016-08-22 o 22:02, Atlantis pisze:

dadzą to, że zapewne da się jakoś konfigurowac I2S w tym Linuxie. I warto go tak skonfigurować, jak potrzebuje tego kodek.

a.

Reply to
Artur Miller

W dniu 2016-08-22 o 22:05, Artur Miller pisze:

Takimi niskopoziomowymi operacjami raczej zajmuje się steronik. Wątpię, żeby użtykownik miał coś do powiedzenia.

Reply to
Atlantis

W dniu 2016-08-23 o 06:09, Atlantis pisze:

na niechęć do posiadania wiedzy ja już nic nie poradzę :)

a.

Reply to
Artur Miller

na początek sprawdź czy cokolwiek masz na linii i2s, zegar, jakieś dane, cokolwiek (oscyloskopem).

Potem możesz się bawić w ustawianie i2s..

formatting link

Reply to
wchpikus

W dniu 2016-08-23 o 08:03, Artur Miller pisze:

Jaką niechęć? Przeczytałem dokumentację poświęconą konfiguracji interfejsu i2s w Raspberry Pi oraz poszczególnych kart audio (w moim przypadku układ ma byś software'owo kompatybilny z rpi-proto). Nie było tam ani słowa o konfiguracji interfejsu. W ogólne nie było wyszczególnionych żadnych opcji konfiguracyjnych. Zakładam więc, że są one hardkodowane w driverze. Bo niby czemu miałoby być inaczej? Wiadomo jaki układ zastosowano w danej karcie, więc wystarczy raz podać odpowiadające mu parametry. Ingerencja użytkownika jest całkowicie zbędna.

Reply to
Atlantis

W dniu 2016-08-23 o 08:37, wchpikus pisze:

Niestety mój jedyny oscyloskop to zabytek, który nadaje się właściwie tylko do pracy z układami analogowymi. Nie ma wyzwalania zboczem ani pamięci.

Prosty analizator stanów logicznych wystarczy? Mam go podpiąć do magistrali i2s zamiast karty dźwiękowej, czy podłączyć go równolegle, jako kolejne urządzenie na magistrali?

Rozumiem, że po i2s lecą tylko próbki dźwięku, a sterowanie odbywa się poprzez i2c?

Reply to
Atlantis

Analizator starczy Zobacz czy Pi cokolwiek wysyla do ukladu. Jesli jest jako master, bedzie zegar WS i linie danych. Jesli nie ma nic, to trzeba go zmusic do tego.

Co do kodeka, nie wiem jak jest sterowany z Pi, nie znam tej plyty, moze byc i2c lub spi, ale samo ustawienie karty to tez troche zabawy.

Ustawienie powinno byc takie pi (master, wystawia zegar) , kodek(slave), bez zegara. Ustawienie ramek tez powinno być zgodne w obu urządzeniach (próbkowanie itp).

Jeśli sygnały fizycznie są i sa zgodne, to zadziała. Nie wiem czy kodek nie potrzebuje tez master-clock,warto sprawdzić czy jest

Reply to
wchpikus

W dniu 2016-08-23 o 09:58, wchpikus pisze:

Ok, czyli jeśli podłączę analizator do linii interfejsu i2s po stronie RasPi (pozostawiając połączenie i2c pomiędzy komputerkiem i kodekiem) to system nie zorientuje się, że po drugiej stronie interfejsu i2s brakuje układu i będzie próbował wysyłać dane do analizatora? Oczywiście zakładając, że jest skonfigurowany jako master...

Sterowanie jest po i2c, co do tego mam pewność. ;) Pytałem tylko o to, czy po i2s nie są też przypadkiem przesyłane jakieś dane sterujące. Jeśli chodzi o i2c, to system z całą pewnością wykrywa ten układ. Po pierwsze i2cdetect pokazuje urządzenie pod adresem 1A, po drugie rozłączenie magistrali i2c skutkuje niewykrywaniem karty dźwiękowej podczas startu systemu.

Reply to
Atlantis

W dniu 23.08.2016 o 10:11, Atlantis pisze:

Wiec wiesz ze driver do karty działa poprawnie. sprawdź co masz na liniach i2s, analizator nie będzie w niczym przeszkadzał.

Reply to
wchpikus

Am 22.08.2016 um 20:29 schrieb Atlantis:

Wyłącz device tree. Jesse ma problemy z I2C, między innymi. Sam przy tym nie dłubię, jak na razie, ale kolega z naprzeciwka stołu wczoraj walczył z Jessie i tak właśnie rozwiązał sprawę. Nie z audio tylko z wagą, ale też I2C device. Z SPI jest podobnie.

Waldek

Reply to
Waldemar

W dniu 2016-08-23 o 10:21, Waldemar pisze:

Tego się obawiałem i prawdę mówiąc bardzo chciałem uniknąć. Mam już parę skonfigurowanych urządzeń przez device tree (m.in ENC28J60) i działają one be żadnego problemu. Wyłączenie tej funkcjonalności będzie wiązało się z koniecznością konfigurowania tego wszystkiego od nowa, wedle starego sposobu. ;)

Reply to
Atlantis

W dniu 2016-08-23 o 10:13, wchpikus pisze:

Czyli mogę podpiąć do magistrali i2s analizator ZAMIAST karty dźwiękowej (zostawiając po staremu połączenie i2c)? RPi nie zorientuje się, że wysyła próbki do innego urządzenia? Chciałbym uniknąć robienia specjalnych, "potrójnych" kabelków albo podpinania się przez płytkę stykową.

Reply to
Atlantis

W dniu 23.08.2016 o 12:17, Atlantis pisze:

Możesz się wpiąć bezpośrednio, ale musisz miec i2c podłączone.. Nie wiem czy da się odłączyć same linie i2s, jak nie, możesz się podłączyć bezpośrednio (nie odłączając kodeka).

Reply to
wchpikus

W dniu 2016-08-23 o 12:20, wchpikus pisze:

to jeszcze zależy która strona wystawia zegar. jesli kodek, to nic nie zobaczy z odłączonym i2s

a.

Reply to
Artur Miller

W dniu 23.08.2016 o 13:18, Artur Miller pisze:

Dlatego niech najpierw sprawdzi jak sa ustawione:) Stawiam ze master to Pi:)

Reply to
wchpikus

Am 23.08.2016 um 12:13 schrieb Atlantis:

No to rzeczywiście lepiej spróbować. Tutaj paru chłopaków coś próbowało:

formatting link
Tylko diagonalnie przeczytałem, ale może coś tam znajdziesz.

Waldek

Reply to
Waldemar

W dniu 2016-08-23 o 14:51, wchpikus pisze:

Ok. Zrobiłem kilka kabelków z potrójnymi złaczami do goldpinów i połączyłem nimi kartę dźwiękową z Raspberry Pi Zero, w środku między nimi wpinając analizator stanów logicznych.

Okazuje się, że nie ma absolutnie żadnego ruchu na magistrali i2s. Analizator nie był w stanie wykryć niczego podczas próby odtwarzania pliku wav za pośrednictwem tej karty. Próbowałem na wszystkich liniach, zarówno przy wyzwalaniu zboczem narastającym, jak i opadającym.

W tym samym czasie było widać niewielką ilość danych na i2c.

Co robić dalej? Ewentualnie jest jakiś problem z magistralą i2s. Można wykluczyć jej fizyczne uszkodzenie w którymś z urządzeń (w końcu próbowałem na dwóch różnych egzemplarzach komputerka i karty dźwiękowej). Coś ewidentnie jest nie tak z konfiguracją.

Czego powinienem spróbować w następnej kolejności?

Reply to
Atlantis

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.