Страница 53 из 60 Первая ... 435152535455 ... Последняя
Показано с 1,041 по 1,060 из 1187

Тема: Цифровой транспорт с открытым кодом на NanoPI-Neo*

  1. #1 Показать/скрыть первое сообщение.
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Цифровой транспорт с открытым кодом на NanoPI-Neo*

    В этой ветке планирую собирать информацию про создание аудиоплеера на базе серии NanoPi-Neo от FriendlyArm.
    Готовые образы можно найти по адресу: https://drive.google.com/drive/folde...zA?usp=sharing

    На данный момент реализованы:
    1. Драйвер I2S в ядре 4.11 с поддержкой вывода 16-24 бит, 44.1-192 кГц, в мастере и в слэйве. Исходные тексты ядра.
    2. Собран экспериментальный образ системы с Volumio2 для платы NanoPi NEO2 с 64-битным armv8 ядром и 32-битным userspace для armv7. В этом образе, по умолчанию, I2S сконфигурирован в мастере, для конфигурации в слэйве необходимо переименовать файлы sun50i-h5-nanopi-neo2.dtb в sun50i-h5-nanopi-neo2-master.dtb, а sun50i-h5-nanopi-neo2-slave.dtb в sun50i-h5-nanopi-neo2.dtb соответственно. Образ также проверил с USB DAC-ом - работает и 44х16, и 192х24.
    3. Собран образ системы с Volumio2 для плат NanoPi NEO и NanoPi NEO-AIR архитектуры armv7. В этом образе, по умолчанию, I2S сконфигурирован в мастере, для конфигурации в слэйве необходимо переименовать файлы sun8i-h3-nanopi-neo.dtb в sun8i-h3-nanopi-neo-master.dtb, а sun8i-h3-nanopi-neo(-air)-slave.dtb в sun8i-h3-nanopi-neo(-air).dtb соответственно.
    4. Разработана плата формирователя/изолятора для семейства NanoPi-Neo, платы которого совместимы по выводам друг с другом. На плате есть возможность установить собственные генераторы или завести их через гальваническую развязку из ЦАП-а. Возможна работа платы и когда SOC I2S в мастере, тогда она просто обеспечивает гальваническую развязку. За основу платы взята схема и проект для ПЛИС аналогичной платы для cubietruck-а от Анатолия (Wired), за публикацию которых ему огромное спасибо.

    Фото платы NanoPi-Neo2 с установленной платой формирователя:
    Нажмите на изображение для увеличения. 

Название:	clock.jpg 
Просмотров:	3314 
Размер:	488.2 Кб 
ID:	303657
    Схема платы формирователя:
    neoclock - Project.pdf
    Проект ПЛИС:
    CPLD.ZIP
    Проект схема + печатная плата в DesignSpark + архив с герберами
    pcb_arch.zip

    Так как периодически в личке спрашивают про платы, то напишу здесь: платами я не торгую, вся необходимая информация по их самостоятельному изготовлению выложена здесь.
    Последний раз редактировалось Nikkov; 21.07.2018 в 17:18.
    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  2. #1041
    Новичок Аватар для kvnik
    Регистрация
    23.11.2005
    Адрес
    Донецк
    Сообщений
    57

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от Nikkov Посмотреть сообщение
    simple-audio-card,mclk-fs
    А для чего он, вроде все делится в i2s драйвере. Может лишний вопрос.

  3. #1042
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от kvnik Посмотреть сообщение
    А для чего он, вроде все делится в i2s драйвере. Может лишний вопрос.
    Насколько я понял по исходникам и логам, драйвер simple-audio-card определяет требуемую частоту MCLK с учетом заданного делителя mclk-fs и требуемой частоты дискретизации, а i2s драйвер уже прописывает делитель для этой MCLK.
    Поэтому получается так: для частоты 44100 и mclk-fs=256 simple-audio-card запрашивает MCLK=11,2896М, а у меня сейчас именно такой - все ОК, выбираем частоту 88200, simple-audio-card запрашивает MCLK=22,5792‬М - мой фиксированный генератор уже не подходит. В случае выбора клока от PLL, при запросе MCLK подстраиваются делители/умножители для этих клоков, а для внешнего клока их нет.‬
    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  4. #1043
    Новичок Аватар для kvnik
    Регистрация
    23.11.2005
    Адрес
    Донецк
    Сообщений
    57

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Там же 2 делителя в I2S_CKR: mclk divider и Transmit sclk divider. Они устанавливаются в i2s драйвере под Fs и 16/32 бита. Внешний клок один. У меня из коробки так. Только пришлось поправить, 16 бит он тоже давал в 32.

  5. #1044
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от kvnik Посмотреть сообщение
    Там же 2 делителя в I2S_CKR: mclk divider и Transmit sclk divider. Они устанавливаются в i2s драйвере под Fs и 16/32 бита. Внешний клок один. У меня из коробки так. Только пришлось поправить, 16 бит он тоже давал в 32.
    Да, mclk divider определяет частоту битклока, при заданной MCLK, а sclk divider определяет частоту дискретизации, при заданной частоте битклока, т.е. частоту lr-клок. Т.е. проблема в том, что когда определяются значения этих делителей в драйвере i2s, значение MCLK уже определено в драйвере simple-audio-card с учетом требуемого коэффициента mclk-fs и по факту mclk divider является константой. По крайней мере такое поведение я увидел при проведении экспериментов.
    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  6. #1045
    Новичок Аватар для kvnik
    Регистрация
    23.11.2005
    Адрес
    Донецк
    Сообщений
    57

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Сейчас покрутил. Оба дивайдера меняются правильно. У нас разные i2s драйверы, может в этом причина.
    А ты mux в cru вручную устанавливаешь, или вызываешь set-parent? Если mux, тогда ясно, драйвер не знает частоты парент клока. Все равно править ядро, проще наверное в CRU назначить метку клоку, меньше правок выйдет

  7. #1046
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от kvnik Посмотреть сообщение
    Сейчас покрутил. Оба дивайдера меняются правильно. У нас разные i2s драйверы, может в этом причина.
    А ты mux в cru вручную устанавливаешь, или вызываешь set-parent? Если mux, тогда ясно, драйвер не знает частоты парент клока. Все равно править ядро, проще наверное в CRU назначить метку клоку, меньше правок выйдет
    А у тебя тоже simple-audio-card? mclk-fs в DTS задан? Возможно да, причина именно в разных драйверах i2s, так как в rockchip_i2s.c реализована установка только той частоты, которую ему указал драйвер карты, т.е. simple-audio-card, а у того все просто: mclk = params_rate(params) * mclk_fs, поэтому метка клока тоже проблем не решит. Самое простое - поправить драйвер i2s, этого делать пока не хочется, но, возможно, придется. Я хотел, чтобы не менять существующий код ядра, логику выбора clkin в mux-е вынести в драйвер своего "кодека", там я и делаю set-parent.

    PS У меня clkin объявлен в DTS как "gpio-mux-clock" с двумя родителями для сеток 44 и для 48. И эта часть работает, генераторы переключаются.
    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  8. #1047
    Новичок Аватар для kvnik
    Регистрация
    23.11.2005
    Адрес
    Донецк
    Сообщений
    57

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от Nikkov Посмотреть сообщение
    rockchip_i2s.c
    можешь мне скинуть, а то я в armbiane заблудился, я им не пользуюсь.

  9. #1048
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от kvnik Посмотреть сообщение
    можешь мне скинуть, а то я в armbiane заблудился, я им не пользуюсь.
    Так там же mainline: rockchip_i2s.c
    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  10. #1049
    Новичок Аватар для kvnik
    Регистрация
    23.11.2005
    Адрес
    Донецк
    Сообщений
    57

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Может так красиво: поправить CRU, клок прописать в DT и поправить i2s.
    rk3328-i2s.c.txt

    А у меня не получается температуру померять.

  11. #1050
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от kvnik Посмотреть сообщение
    Может так красиво: поправить CRU, клок прописать в DT и поправить i2s.
    Да, спасибо, я именно такой вариант и держу в уме. Мне пока в нем не нравится то, что нарушается возможная совместимость i2s драйвера с другими устройствам.
    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  12. #1051
    Новичок Аватар для Adson
    Регистрация
    07.11.2007
    Адрес
    Москва
    Возраст
    57
    Сообщений
    45

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    А что-то подобное с Firefly ROC-RK3328-CC можно устроить? В нём выведены на гребёнку и мастерклок и четыре пина данных для 8 каналов I2S

  13. #1052
    Новичок Аватар для kvnik
    Регистрация
    23.11.2005
    Адрес
    Донецк
    Сообщений
    57

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Да там вроде и PCM не реализовано, или просмотрел. Наверное ? будет ли clock-mux переключаться при таком решении.

  14. #1053
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    40
    Сообщений
    1,995

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от DmitriyCh Посмотреть сообщение
    STM32MP1
    Довольно специфический чип. Намекаете, что можно поизвращаться с ядром Cortex-M?
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

  15. #1054
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    В общем какое-никакое решение нашел. Все удалось сделать в драйвере кодека + оверлей.
    Кстати, метка/идентификатор для клока и назначение родительского клока в DTS никак не помогла - родителя мы назначили, но при запросе нужной частоты, он(родитель) выбирается заново, соответственно, выбирается PLL.
    Мое решение тоже не очень красивое, так как сначала выбирается своя частота для i2s, равная (частота дискретизации * mclk-fs) и строится иерархия от PLL, а затем код в кодеке переопределяет иерархию от внешнего клока, затем i2s драйвер берет установленную кодеком частоту mclk и считает для нее делители для бит- и ворд-клоков. В итоге все работает, сетки и делители переключаются.
    Теперь надо будет настроить сборку ядра/образа для Armbian и Volumio.
    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  16. #1055
    Новичок Аватар для DmitriyCh
    Регистрация
    08.02.2022
    Адрес
    Казань
    Возраст
    47
    Сообщений
    38

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от Meta|_ Посмотреть сообщение
    Довольно специфический чип. Намекаете, что можно поизвращаться с ядром Cortex-M?
    У него есть вход внешнего тактирования для I2S.
    I2S audio class accuracy via internal audio PLL or external clock
    Нажмите на изображение для увеличения. 

Название:	I2S_clock.JPG 
Просмотров:	41 
Размер:	85.1 Кб 
ID:	439480

  17. #1056
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    40
    Сообщений
    1,995

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*


    Offтопик:
    Цитата Сообщение от DmitriyCh Посмотреть сообщение
    У него есть вход внешнего тактирования для I2S.
    Действительно. Я с ним работал не по аудио тематике. Главный минус - SDK на базе Yocto, он тяжеловат для DIY (и в плане порога вхождения и в плане длительности сборки на среднем ПК). Ну и ресурсов по нынешним временам немного.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

  18. #1057
    Новичок Аватар для kvnik
    Регистрация
    23.11.2005
    Адрес
    Донецк
    Сообщений
    57

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от Nikkov Посмотреть сообщение
    Все удалось сделать в драйвере кодека

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


    Offтопик:
    Интересно, set_rate для clock_mux не поддерживается (в их коде написано). У меня получилось так (в твоих определениях): передаю в i2s_tdm clkin_i2s1, osc44m, osc48m, в hw_params по сетке делаю clk_set_parent(clkin_i2s1,osc4?m), mclk_fs не использую. Работает.
    Если использовать только один fixed-clock, код вообще не надо править (для rk3308). (Я и не планировал два гена, только 44.1).
    По хорошему, веточку для Rockchip отдельную

    [свернуть]

  19. #1058
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от kvnik Посмотреть сообщение

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


    Offтопик:
    Интересно, set_rate для clock_mux не поддерживается (в их коде написано). У меня получилось так (в твоих определениях): передаю в i2s_tdm clkin_i2s1, osc44m, osc48m, в hw_params по сетке делаю clk_set_parent(clkin_i2s1,osc4?m), mclk_fs не использую. Работает.
    Если использовать только один fixed-clock, код вообще не надо править (для rk3308). (Я и не планировал два гена, только 44.1).
    По хорошему, веточку для Rockchip отдельную

    [свернуть]

    Offтопик:
    set_rate, в глубине, для MUX вызывает функцию clk_mux_determine_rate_flags, в ней перебирает родителей, которые могут обеспечить заданную частоту и определяет наиболее подходящего. В моем случае нужную частоту обеспечивал либо clk_i2s1_div, либо clk_i2s1_frac, поэтому претендент всегда находился до проверки clkin_i2s1.
    Такая штука как clk_set_parent(clkin_i2s1,osc4?m) не пройдет, так как между ними в иерархии стоит i2s1_pre, поэтому у меня и стоит что-то типа: clk_set_parent(get_parent(clkin_i2s1),osc4?m).
    То, что у меня две сетки с переключением по GPIO, никак не меняет ситуации, с одной на 44100 было ровно так же. На rk3308 я не смотрел, может там есть какие-то отличия, что позволяют сделать так, как у тебя.

    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  20. #1059
    Новичок Аватар для kvnik
    Регистрация
    23.11.2005
    Адрес
    Донецк
    Сообщений
    57

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от Nikkov Посмотреть сообщение
    clkin_i2s1

    Offтопик:
    Это же clock_mux? Ну да, по разному сделаны i2s и i2s_tdm. Главное внешний mclk работает.

  21. #1060
    Завсегдатай
    Автор темы
    Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    51
    Сообщений
    1,364

    По умолчанию Re: Цифровой транспорт с открытым кодом на NanoPI-Neo*

    Цитата Сообщение от kvnik Посмотреть сообщение
    Offтопик:
    Это же clock_mux? Ну да, по разному сделаны i2s и i2s_tdm. Главное внешний mclk работает.

    Offтопик:
    clkin_i2s1 это один из четырех клоков, которые выбираются MUX-ом, который называется i2s1_pre. Такая вот структура.
    А так да, главное, что в итоге заработало и информация подтвердилась

    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

Страница 53 из 60 Первая ... 435152535455 ... Последняя

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

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

Ваши права

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