Страница 1 из 6 123 ... Последняя
Показано с 1 по 20 из 108

Тема: Плата I2S для Raspberry Pi на WM8804

  1. #1
    Частый гость
    Автор темы
    Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    330

    По умолчанию Плата I2S для Raspberry Pi на WM8804

    Плата предназначена для правильного подключения ЦАП к одноплатному компьютеру Raspberry Pi или подобному. Под правильным подключением подразумевается генератор мастерклока возле микросхемы ЦАП, работа компьютера в ведомом режиме и гальваническая изоляция ЦАП от компьютера.

    Нажмите на изображение для увеличения. 

Название:	Schematic.png 
Просмотров:	2605 
Размер:	82.6 Кб 
ID:	355906Нажмите на изображение для увеличения. 

Название:	pcba_1.jpg 
Просмотров:	1390 
Размер:	681.3 Кб 
ID:	355904Нажмите на изображение для увеличения. 

Название:	pcba_2.jpg 
Просмотров:	1109 
Размер:	529.9 Кб 
ID:	355905

    Для работы платы необходим генератор мастерклока 22,5792 и 24,576 МГц либо в составе ЦАП, либо отдельным устройством.

    Во вложении исходники в Eagle и герберы платы:
    rpi_i2s.zip

    Начало здесь:
    https://forum.vegalab.ru/showthread....05#post2662405

    За основу взята идея из Hifiberry Digi - использовать WM8804 для формирования сигналов PCM_CLK и PCM_FS из мастерклока.
    Вообще, сделать из мастерклока сигналы битклока и вордклока можно на ПЛИС (как в теме Цифровой транспорт с открытым кодом на NanoPI-Neo), на рассыпной логике, на микросхеме дешевого АЦП, как где-то советовал Alex.
    Но все портит необходимость поддерживать драйвер.
    В данном случае драйвер есть во всех основных дистрибутивах Linux для Raspberry Pi.

    Есть и недостатки у использования WM8804 - выводить можно только поддерживаемые ей форматы, т.е. только стерео PCM до 192/24.

    Примечания к схеме:

    Скрытый текст


    Из двух резисторов R14 и R15 устанавливается только один, в зависимости от того, как переключаются генераторы мастерклока. Если установить R14, то транзистор оптрона будет открыт при сетке частот в 48 кГц, если R15, то при сетке 44,1 кГц.

    OK1, OK3, R17 и R18 устанавливаются только если они вам нужны для каких-то своих целей.

    X1, R1, R2 и C4 устанавливаются если нужен SPDIF выход (для тестирования).

    X2 и C5 если планируется подавать внешнее питание на Raspberry Pi.

    Гальваноразвязку можно не устанавливать, для обхода предусмотрены перемычки J1-J5.
    [свернуть]

    Настройка:

    Скрытый текст


    1. Volumio
    При запуске ставим галочку «I2S DAC», затем из списка выбираем «Hifiberry Digi+ Pro» и все работает.

    2. Ручная настройка
    Включить загрузку драйвера, для чего:
    а) Подключить карту памяти к компьютеру и найти на ней файл config.txt
    б) На самом одноплатнике найти файл /boot/config.txt
    Отключить встроенный звук, для этого удалить (или закомментировать) строку dtparam=audio=on
    и добавить строку dtoverlay=hifiberry-digi-pro
    Код:
    #dtparam=audio=on
    dtoverlay=hifiberry-digi-pro
    Подробнее https://www.hifiberry.com/build/docu...-linux-3-18-x/
    [свернуть]

    Готовые решения:

    Скрытый текст


  2. #2
    Завсегдатай Аватар для hippo64
    Регистрация
    20.05.2010
    Адрес
    Москва
    Возраст
    60
    Сообщений
    4,429

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Огромное спасибо, коллега, иногда лень самому и слушаешь через 2706.

  3. #3
    Старый знакомый Аватар для Bobby_ii
    Регистрация
    16.03.2011
    Адрес
    Spb
    Сообщений
    835

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Зачем нужен ЕЕПРОм? Что в нём? Без него можно "обойтись"? И как?
    Что на сигналах:
    (5) SDA -> SDIn/HWMode (3)
    (3) SCL -> SLCK (1) (???SCLK???)
    и откуда куда они идут (направление)?

    Что делают GPIO_IR_IN/Out? И куда идут?

    Куда идут CLK44/48 ? А! Во! На др. схеме есть - GPIO_5/GPIO_6 - как понимаю, данными сигналами драйвер "рулит".
    "Лучше промолчать и показаться дураком, чем раскрыть рот и развеять все сомнения" Марк Твен.

  4. #4
    Частый гость
    Автор темы
    Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    330

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Принцип работы:

    В составе SoC (для Raspberry Pi 3 это BCM2835) есть аппаратный порт I2S.

    Нажмите на изображение для увеличения. 

Название:	BCM2835_pcm.png 
Просмотров:	487 
Размер:	19.8 Кб 
ID:	355917

    Как видим, порт I2S состоит из очереди отправки (FIFO, 64-е 32-х битных регистра) и схемы последовательной передачи данных (Serializer) из регистров очереди. Передача управляется двумя сигналами PCM_CLK и PCM_FS. Сами эти сигналы могут генерироваться портом I2S самостоятельно с помощью внутренних делителей, либо получаться снаружи.

    Вообще, все порты I2S в одноплатниках примерно одинаковые и все могут работать в ведомом режиме. Отличие только в том, можно ли завести внешний сигнал PCM_MCLK.
    В Raspberry Pi этого сделать нельзя, PCM_MCLK может получаться только из общего клока SoC (почему это плохо, можно почитать в статье Raspberry Pi B+ Digital Audio).

    Поэтому мы идем другим путем - не используем внутренний PCM_MCLK, а подаем снаружи сигналы PCM_CLK и PCM_FS - для чего их нужно самостоятельно сформировать из мастерклока ЦАПа.
    В данном устройстве для формирования сигналов используется WM8804 - это микросхема передатчика SPDIF, но здесь используется ее возможность генерировать сигналы PCM_CLK и PCM_FS из внешнего клока с помощью программируемых внутренних делителей.

    Нажмите на изображение для увеличения. 

Название:	ClockingScheme.png 
Просмотров:	450 
Размер:	25.5 Кб 
ID:	355918

    Для программирования WM8804 нужен драйвер: rpi-wm8804-soundcard.c.
    Драйвер при изменении частоты дискретизации или разрядности потока вычисляет и загружает в WM8804 нужные
    коэффициенты делителей.
    Также драйвер выдает сигнал на переключение частоты мастерклока между 22,5792 и 24,576 МГц.

    Таким образом, от WM8804 мы получаем сигналы PCM_CLK и PCM_FS, а от SoC данные PCM_DOUT,
    привязанные к внешнему мастерклоку.

    ---------- Сообщение добавлено 15:57 ---------- Предыдущее сообщение было 15:37 ----------

    Цитата Сообщение от Bobby_ii Посмотреть сообщение
    Зачем нужен ЕЕПРОм? Что в нём? Без него можно "обойтись"? И как?
    Что делают GPIO_IR_IN/Out? И куда идут?
    EEPROM нужен для того, чтобы соответствовать HAT requirements (носить гордое имя "шляпа"), и для автоматической установки драйверов при подключении "шляпы" к Raspberry Pi.
    Я от него решил отказаться, так как он мешал разводке земляного полигона, а пользы от него все равно нет.

    К разъему SV2, кроме оптрона переключения частоты мастерклока, еще могут подключаться энкодер с кнопкой, и вход/выход чего-либо. Это нужно если делать медиаплеер или что-то похожее.

  5. #5
    Старый знакомый Аватар для Bobby_ii
    Регистрация
    16.03.2011
    Адрес
    Spb
    Сообщений
    835

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Спасибо. Более-менее разобрался.
    "Лучше промолчать и показаться дураком, чем раскрыть рот и развеять все сомнения" Марк Твен.

  6. #6
    Частый гость
    Автор темы
    Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    330

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Собрал вторую плату, со всеми деталями/разъемами. Внешнее питание работает, SPDIF тоже.

    Нажмите на изображение для увеличения. 

Название:	pcba_3.jpg 
Просмотров:	740 
Размер:	686.7 Кб 
ID:	360222Нажмите на изображение для увеличения. 

Название:	pcba_4.jpg 
Просмотров:	1010 
Размер:	844.1 Кб 
ID:	360223

    Выявилась одна особенность: шлейф в том виде, как на фото, мешает встроенной в плату Raspberry Pi антенне WiFi, если проходит рядом с ней.
    В идеале шлейф нужно экранировать.

  7. #7
    Новичок Аватар для bnv123
    Регистрация
    19.01.2014
    Адрес
    Орел
    Возраст
    46
    Сообщений
    43

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Здравствуйте. Подскажите, а возможно здесь реализовать spdif или оптический вход. Ну то есть чтобы кроме воспроизведения с малинки можно ещё было подсоединить телевизор с spdif выходом. И кроме iso7741 что ещё можно поставить. Спасибо.

  8. #8
    Частый гость
    Автор темы
    Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    330

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Цитата Сообщение от bnv123 Посмотреть сообщение
    Подскажите, а возможно здесь реализовать spdif или оптический вход. Ну то есть чтобы кроме воспроизведения с малинки можно ещё было подсоединить телевизор с spdif выходом.
    Тоже думал об этом. Чтобы на один порт I2S данные принимались от приемника SPDIF, накапливались в ОЗУ (для решения проблемы с разницей в частотах клока), и затем отдавались во второй порт I2S.
    Для этого необходимы два порта I2S, и в SoC они есть, но на разъем GPIO выведен только один.
    Одноплатников с двумя портами I2S так и не нашел.

    Цитата Сообщение от bnv123 Посмотреть сообщение
    И кроме iso7741 что ещё можно поставить.
    Еще я ставил ISO7641, работает.
    Можно другие изоляторы на 3+1 канала, со скоростью выше 25 Мбит/сек.

  9. #9
    Новичок Аватар для bnv123
    Регистрация
    19.01.2014
    Адрес
    Орел
    Возраст
    46
    Сообщений
    43

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Не, я наверно не правильно выразился. Чтобы плата работала в двух режимах. Первый режим от малинки. Цап в режиме мастер. А второй режим - давать сигнал spdif на RX0 wm8804 и цап в режиме ведомого. Или проще две платы сделать, одну по вашей схеме, другую по стандартной схеме wm8804 и нужную выбирать за счёт включения выхода изолятора EN2. Ну и соответственно переключать режимы Цап.

  10. #10
    Частый гость
    Автор темы
    Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    330

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Цитата Сообщение от bnv123 Посмотреть сообщение
    Первый режим от малинки. Цап в режиме мастер. А второй режим - давать сигнал spdif на RX0 wm8804 и цап в режиме ведомого.
    Теоретически такое возможно. Для этого потребуется:
    1. ЦАП, который может работать и в ведущем, и в ведомом режиме.
    2. Чтобы один из генераторов мог работать, когда ЦАП в ведомом режиме, или отдельный генератор.
    3. Еще одну линию для передачи мастерклока от WM8804 в ЦАП.
    4. Переключать линию SDATA от Raspberry Pi к WM8804.
    5. Доработать драйвер, чтобы он при остановке воспроизведения (или по другой команде) переводил WM8804 в режим приема SPDIF, переключал ЦАП в ведомый режим, переключал линию SDATA.

    Это все сложно. Рекомендую посмотреть, есть ли у вашего телевизора Bluetooth. Тогда он мог бы передавать аудио поток на Raspberry Pi.

  11. #11
    Новичок Аватар для bnv123
    Регистрация
    19.01.2014
    Адрес
    Орел
    Возраст
    46
    Сообщений
    43

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Да, слишком сложно. Спасибо за ответ.

  12. #12
    Новичок Аватар для bnv123
    Регистрация
    19.01.2014
    Адрес
    Орел
    Возраст
    46
    Сообщений
    43

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Цитата Сообщение от Chaa Посмотреть сообщение
    Тоже думал об этом. Чтобы на один порт I2S данные принимались от приемника SPDIF, накапливались в ОЗУ (для решения проблемы с разницей в частотах клока), и затем отдавались во второй порт I2S.
    Для этого необходимы два порта I2S, и в SoC они есть, но на разъем GPIO выведен только один.
    Одноплатников с двумя портами I2S так и не нашел.


    Еще я ставил ISO7641, работает.
    Можно другие изоляторы на 3+1 канала, со скоростью выше 25 Мбит/сек.
    https://www.chipdip.ru/product/iso7241cdwr-2
    iso7241 эти должны подойти?

  13. #13
    Частый гость
    Автор темы
    Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    330

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Цитата Сообщение от bnv123 Посмотреть сообщение
    https://www.chipdip.ru/product/iso7241cdwr-2
    iso7241 эти должны подойти?
    Думаю подойдут.

  14. #14
    Новичок Аватар для bnv123
    Регистрация
    19.01.2014
    Адрес
    Орел
    Возраст
    46
    Сообщений
    43

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Chaa, спасибо.

  15. #15

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    @chaa добрый день, подскажите плз, если делать развязку по i2s от rpi, правильно ли я понимаю, что от wm8804 на rpi идут pcm_clk и pcm_fs,а от rpi к wm идет clk_select (44-48) и pcm_dout.?
    Так же есть вопрос касательно реклока pcm_dout... Имеет ли смысл?
    Последний раз редактировалось SIRCOLT; 17.04.2020 в 22:01.

  16. #16
    Частый гость
    Автор темы
    Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    330

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Цитата Сообщение от SIRCOLT Посмотреть сообщение
    правильно ли я понимаю, что от wm8804 на rpi идут pcm_clk и pcm_fs,а от rpi к wm идет clk_select (44-48) и pcm_dout.?
    Да, только clk_select (44-48) идет к схеме управления генераторами.

    Цитата Сообщение от SIRCOLT Посмотреть сообщение
    Так же есть вопрос касательно реклока pcm_dout... Имеет ли смысл?
    Нет. Для дельтасигм основным является мастерклок, поэтому генераторы стараются разместить возле микросхемы ЦАП. По сигналу мастерклока данные загружаются в конвейер цифрового фильтра, идет обработка и преобразование. Качество остальных сигналов непринципиально.
    Для старинных мультибитников по другому, там есть варианты, но тоже главный не pcm_dout.

  17. #17

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Спасибо Вам большое, про clk select я описался имел вмвиду просто направление сигнала) ну будем пробовать делать развязку с малиной на посмотрим, что получится)

  18. #18

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    А для чего в схеме установлен конденсатор с6?

  19. #19
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,622

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Цитата Сообщение от SIRCOLT Посмотреть сообщение
    А для чего в схеме установлен конденсатор с6?
    Если речь о схеме в начальном сообщении, то для сброса WM-ки при включении питания.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  20. #20

    По умолчанию Re: Плата I2S для Raspberry Pi на WM8804

    Посмотрите пожалуйста, правильно ли я в итоге сделал развязку с малинкой?
    Подтягивающие резисторы надо предусмотреть перед iso?
    Нажмите на изображение для увеличения. 

Название:	Безымянный.jpg 
Просмотров:	515 
Размер:	404.5 Кб 
ID:	369870
    Это плата спдиф выхода, там ниже двойной реклок-буфер-ну итд.

    ---------- Сообщение добавлено 17:13 ---------- Предыдущее сообщение было 17:08 ----------

    Цитата Сообщение от Alex Посмотреть сообщение
    Если речь о схеме в начальном сообщении, то для сброса WM-ки при включении питания.
    Спасибо за пояснения Alex.
    Последний раз редактировалось SIRCOLT; 19.04.2020 в 18:24.

Страница 1 из 6 123 ... Последняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •