Страница 10 из 14 Первая ... 89101112 ... Последняя
Показано с 181 по 200 из 261

Тема: Open-Source USB транспорт на PIC32MZ

  1. #1 Показать/скрыть первое сообщение.
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,224

    По умолчанию Open-Source USB транспорт на PIC32MZ

    Проект делался для личных нужд, поэтому публикуется как есть, в том виде как сейчас зашит в моем транспорте.

    Причина разработки своего транспорта - отсутствие в продаже USB транспортов с I2S входом для использования АЦП. Кроме того, те транспорты что есть в продаже не устраивали по тем или иным причинам (либо плохо сделана плата, либо большое потребление).
    Раньше сдерживающим фактором было отсутствие uac2 драйверов. Однако с переходом на win10 с нативным драйвером данная проблема была решена.
    Ну и вообще, т.к. на дворе 21-ый век, то для меня не понятно - почему uac2 еще не перекочевал в открытый доступ. Данная публикация призвана исправить такое досадное упущение.

    Почему PIC32MZ: Преимущество перед ARM процессорами - встроенный USB HS мост и одновременно удобный компактный корпус с удобной распиновкой. А по сравнению с кмосом - низкое потребление: порядка 70..80мА максимум.

    Изначально планировал использовать фреймворк (harmony configurator), однако по ходу выяснилось, что данный фреймворк генерирует только USB AUDIO приложение для формата Class 1.
    Кроме того по форумам полно отзывов по касякам в фреймворке. Дорабатывать фреймворк оказалось крайне контр-продуктивно из-за жесточайшей инкапсуляции, громоздкого стека и отсутствия его описания.

    Намаявшись с фреймворком принял решение писать свой код с нуля. Но очень скоро обломался, т.к. выяснилось что для PIC32 процессоров описание USB моста полностью отсутствует! Т.е. микрочип предлагает только пользоваться их кривыми фреймворками.
    Однако на форуме микрочипа нашлись добрые люди, которые поделились исходниками своих проектов USB девайсов на PIC32MZ: https://www.microchip.com/forums/m1083508.aspx
    Пользуясь данными примерами, а так же методом тыка, удалось написать свой достаточно эффективный код (итоговый размер с оптимизацией gcc компилятора уровня 2 - менее 16кБт).
    Конечно код не такой красивый как в фреймворках, слабовата инкапсуляция. Зато, разобраться в нем и доработать под свои нужды гораздо проще. А главное проще обходить касяки периферии, которые как оказалось имеют место быть.
    В частности есть не описанные в эррате проблемы с DMA модулями.

    Что в итоге удалось реализовать на самом чипе, без обвеса дополнительными микросхемами:
    1. Вывод стандартного стерео: 32bit 768kHz (Правда драйвер не отображает частоты выше 384к, но по факту 768к выводит). И сам модуль I2S пика позволяет выводить данные с частотой не выше 384к. 768к вывести тоже можно, но каким-то нестандартным интерфейсом, типа QSPI или параллельным портом.
    2. Вывод многоканала: 8-каналов 32bit 192kHz (опробовал только в отладочном режиме, подробнее ниже).
    3. Стерео вход: 32bit 768kHz (опробовал по факту только 192, т.к. мой АЦП больше не выдает).
    4. Распознавание DoP формата и вывод из него стерео DSD-битстрима частотой до DSD256 включительно.
    5. До кучи - добавлено CDC устройство (виртуальный COM-порт) для обмена данными с транспортом (в проекте используется в отладочном виде, на любые принятые данные отвечает строкой "CDC is works").

    Вывод многоканала физически не реализован, т.к. изначально в транспорте он не предусматривался. Работу проверял в отладочном режиме, переключая на выход пары каналов по очереди (остальные каналы выводили данные в отладочные буферы).
    Весь описанный выше функционал реализован на DMA модулях, благодаря чему хватает небольшой тактовой частоты процессора (160МГц для работы многоканала + стерео-входа).
    Причем изначально вывод данных в I2S модули выполнялся на DMA с прерываниями. Однако, выяснилось, что прерывания DMA работаю криво, из-за чего модуль может самопроизвольно вырубаться.
    Описал проблему на форуме микрочипа (в конце ветки), но - глухо как в танке: https://www.microchip.com/forums/FindPost/1219136

    Пришлось выкручиваться по другому. В результате получилось даже лучше, т.к. передача данных между I2S буферами и FIFO данных получилась полностью аппаратной (DMA модули перегружаются автоматически в цикле).
    Кроме того, для дополнительного снижения потребления добавлено 3 режима с разной тактовой частотой, в зав-ти от кол-ва каналов и выбранной ЧД.
    В результате потребление от USB шины (контроллер + развязка) с питанием через step-down получилось от 40мА (стерео-вывод), до 55мА (8-каналов + стерео вход).
    Отмечу, что в режиме FS (uac1) потребление можно опустить еще ниже: до 20..30мА, что может быть актуально для портативного девайса.

    Проект сделан в IDE MPLabX 6.05, с компилятором CX32 v4.1. Проверялся только на win10. Актуальная схема транспорта ниже во вложении.
    Конечно, нативный uac2 драйвер в win10 достаточно корявый, легко ломается сам и еще легче ложит винду (хватает ошибки в дескрипторе). Но готовый проект значительно облегчает отладку USB девайса, достаточно выпилить лишний функционал из дескриптора и обработчика команд.
    Особенности конфигурации USB моста или DMA модуля я постарался подробно описать комментариями, но если у кого-то найдутся другие проблемы - можно обсудить в ветке ниже.
    Вложения Вложения
    Последний раз редактировалось dortonyan; 24.12.2022 в 14:13.

  2. #181
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,224

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Кароче пробуйте каким-нить отладочным кодом подергать пином, или перевести пин в единицу на время инициализации, чтобы убедиться что проц шьется.
    А потом, если выяснится, что проц таки шьется, но ЮСБ не работает - ищите аппаратный касяк. Там никаких хитростей нету, если проект собирается/шьется и есть тактирование - все должно работать.
    Еще момент.
    При использовании генератора вместо кварца нужно поменять значение соотв. конфигурационного бита (в файле system.c), чтобы отключить встроенный генератор.
    Хотя по факту работает и если просто подсунуть генератор вместо кварца.
    Последний раз редактировалось dortonyan; 28.02.2024 в 20:47.

  3. #182
    Новичок Аватар для nabiullin
    Регистрация
    08.05.2018
    Адрес
    Уфа, Башкирия
    Возраст
    40
    Сообщений
    62

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    С подтянутой ногой 32 к VCC, стартует и определяется, но только на прошивке Андрея с аудиохобби.
    все выложенные тут не стартуют.

    Ваша dortonyan вообще не компилируется у меня:

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

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

Название:	2024-02-28_23-30-13.png 
Просмотров:	37 
Размер:	248.5 Кб 
ID:	450782
    [свернуть]
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

  4. #183
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,224

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от nabiullin Посмотреть сообщение
    Ваша dortonyan вообще не компилируется у меня:
    Семен Семеныч!... Если проект не собирается, то что вы пытаетесь шить?
    Оно же показывает где ошибки. Закомментируйте (или удалите) дефайны на которые ругается и все соберется.
    Это просто в вашем проце периферия отличается.

  5. #184
    Старый знакомый Аватар для Sanny
    Регистрация
    01.07.2010
    Сообщений
    560

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Доброго дня! А цифровой фильтр в транспорт можно встроить?

  6. #185
    Частый гость Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    29
    Сообщений
    421

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Да, это возможно. А дальше начинаются нюансы, сколько нужно вычислительных ресурсов и памяти.

  7. #186
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,224

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Для нормального фильтра нужно добавлять отдельный чип ФПГА.
    На процессоре можно сделать только что-то совсем простое.

  8. #187
    Новичок Аватар для nabiullin
    Регистрация
    08.05.2018
    Адрес
    Уфа, Башкирия
    Возраст
    40
    Сообщений
    62

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Закомментируйте (или удалите) дефайны на которые ругается и все соберется.
    .

    да, закомментировал, прошился, в винде не опознанное устройство, в линуксе:

    card 3: Device [PIC32MZ Composite USB Device], device 0: USB Audio [USB Audio]
    Subdevices: 1/1
    Subdevice #0: subdevice #0

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

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

Название:	2024-03-01_13-52-35.png 
Просмотров:	19 
Размер:	90.7 Кб 
ID:	450835
    [свернуть]
    Последний раз редактировалось nabiullin; 01.03.2024 в 12:14. Причина: дополнение
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

  9. #188
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,224

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    nabiullin, вы шьете проект из шапки, без доработок?
    Какой версии у вас винда? В 10-ке UAC2 драйвер появился не сразу. Может у вас какая-то старая версия?

  10. #189
    Новичок Аватар для nabiullin
    Регистрация
    08.05.2018
    Адрес
    Уфа, Башкирия
    Возраст
    40
    Сообщений
    62

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    nabiullin, вы шьете проект из шапки, без доработок?
    Какой версии у вас винда? В 10-ке UAC2 драйвер появился не сразу. Может у вас какая-то старая версия?
    да, надо признать что я допустил тупую ошибку, подключая транспорт в USB хаб, а нужно прямо USB порт компьютера.
    и всё стало работать исправно. Осталось по i2s подключить какой-то цап и радоваться звуку.
    Последний раз редактировалось nabiullin; 01.03.2024 в 18:32.
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

  11. #190
    Новичок Аватар для nabiullin
    Регистрация
    08.05.2018
    Адрес
    Уфа, Башкирия
    Возраст
    40
    Сообщений
    62

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    подключил цап (PCM5122 с генератором 24,576), такой артефакт вылез, при громкости меньше 70% в винде, звук нормальный, как прибавляю выше и до 100%, так искажения, похожие на клип вырастают.
    В линуксе аналогично.
    вот пример в видео.

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

    [свернуть]
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    По описанию как будто на 1 бит промахнулись с форматом данных.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

  13. #192
    Новичок Аватар для nabiullin
    Регистрация
    08.05.2018
    Адрес
    Уфа, Башкирия
    Возраст
    40
    Сообщений
    62

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    а как пофиксить ?
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

  14. #193
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,224

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от nabiullin Посмотреть сообщение
    а как пофиксить ?
    Проверяйте форматы данных I2S. Чтобы у транспорта и ЦАПа совпадали.
    В моем проекте задан LJ (задается в файле i2s.c в регистре SPIxCON2). Смотрите мануал на SPI модуль пика.

  15. #194
    Новичок Аватар для nabiullin
    Регистрация
    08.05.2018
    Адрес
    Уфа, Башкирия
    Возраст
    40
    Сообщений
    62

    Круто! Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Проверяйте форматы данных I2S. Чтобы у транспорта и ЦАПа совпадали.
    В моем проекте задан LJ (задается в файле i2s.c в регистре SPIxCON2). Смотрите мануал на SPI модуль пика.
    ага, вот так помогло (0 << _SPIxCON2_AUDMOD_POSITION) // I2S-mode

    теперь вопрос по зацикленному буферу на паузе, что то тут уже писали кажется, в линуксе это наблюдается, в винде на фубаре - нет.
    я тестирую версию dee-jan на 8 каналов.
    Может получится выделить время и дописать этот блок кода, мы с Adson будем очень признательны и благодарны!
    Последний раз редактировалось nabiullin; 03.03.2024 в 01:14.
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

  16. #195
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,224

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от nabiullin Посмотреть сообщение
    теперь вопрос по зацикленному буферу на паузе, что то тут уже писали кажется, в линуксе это наблюдается, в винде на фубаре - нет.
    я тестирую версию dee-jan на 8 каналов.
    Может получится выделить время и дописать этот блок кода, мы с Adson будем очень признательны и благодарны!
    Будет время - попробую, но не обещаю.

  17. #196
    Старый знакомый Аватар для Sanny
    Регистрация
    01.07.2010
    Сообщений
    560

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

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



    Та-же проблема и в 64-х пиновых XU(F)208 - не хватает нужных портов для многоканала. Там остается много не использованных I/O, но задействовать из нельзя, нужно брать его в большем корпусе (это все - если нуден многоканальный DSD. Если только РСМ, то на 8 каналов в I2S хватает, а больше - можно в TDM).
    А как ЦАПы подключать к TDM?

  18. #197
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,237

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от Sanny Посмотреть сообщение
    А как ЦАПы подключать к TDM?
    Те что это умеют - также как и к I2S. В их дашитах написано.
    Не понятно - в чем суть вопроса?
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  19. #198
    Старый знакомый Аватар для Sanny
    Регистрация
    01.07.2010
    Сообщений
    560

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от Alex Посмотреть сообщение
    Те что это умеют - также как и к I2S. В их дашитах написано.
    Не понятно - в чем суть вопроса?
    Планирую делать многоканал - для кина , надо 10 каналов, особых требований к качеству нет(ну , в разумных пределах). Поэтому и интересно,какие ЦАПы можно подцепить по TDM.

  20. #199
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,237

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от Sanny Посмотреть сообщение
    надо 10 каналов,
    Я до 16 делал с TDM, на АК4458 и других.

    Цитата Сообщение от Sanny Посмотреть сообщение
    особых требований к качеству нет
    Качество от интерфейса не зависит.
    Разве что с I2S можно получить бОльший семплрейт, хотя для кино его и с TDM хватает.
    Ну и с I2S еще можно многокальный DSD, если не только для кино.

    Цитата Сообщение от Sanny Посмотреть сообщение
    Поэтому и интересно,какие ЦАПы можно подцепить по TDM.
    Более-менее современные-практически все, особенно те что многоканальные.
    Последний раз редактировалось Alex; 19.03.2024 в 13:21.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  21. #200
    Старый знакомый Аватар для Sanny
    Регистрация
    01.07.2010
    Сообщений
    560

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Для нормального фильтра нужно добавлять отдельный чип ФПГА.
    На процессоре можно сделать только что-то совсем простое.
    Для TDA1540

Страница 10 из 14 Первая ... 89101112 ... Последняя

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

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

Ваши права

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