Страница 21 из 27 Первая ... 111920212223 ... Последняя
Показано с 401 по 420 из 528

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

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

    По умолчанию 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. #401
    Новичок Аватар для Adson
    Регистрация
    07.11.2007
    Адрес
    Москва
    Возраст
    58
    Сообщений
    61

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

    Прошу прощения, - большое спасибо, но не всё понял с текущей ситуацией с Native DSD.
    1. Под Windows - только DoP, со встроенными драйверами UAC2. Верно? Можно ли подсунуть какие-то другие драйверы чтобы заработал Native?
    2. Под любым Linux - не будет без пересборки ядра.
    3. Под Android - ? (тут вообще не понял). Если есть такая возможность, то требуется ли изменение прошивки PIC?
    Извините моё занудство.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Почему не подходят?
    Транспорт на пике работает и под линуксом/андроидом, и под макосом.
    Так в том-то и дело что там работает!
    А под Виндой танцы и бубны.



    Цитата Сообщение от dortonyan Посмотреть сообщение
    Или что имелось ввиду?
    Мы уже как-то обсуждали - почему UAC2 девайс на ПИКе, СТМ и т.п., не работает с драйврами того-же TheSycon-a под XMOS?
    Если соблюдаются все стандарты UAC, что в девайсе, что в драйвере, то кроме мандаторных VID&PID как у Thesycon, ничего по идее не должно мешать работать с "чужим" драйвером.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от Adson Посмотреть сообщение
    1. Под Windows - только DoP, со встроенными драйверами UAC2. Верно?
    Сам стандарт UAC2 не предусматривает по умолчанию поддержку DSD протокола. Передавать можно только PCM. А DoP - это тот же PCM, в который упаковали DSD данные.
    Т.е. UAC2 драйвер не знает что именно передается в PCM пакетах, ему все равно, хоть картинки отправляйте.

    Цитата Сообщение от Adson Посмотреть сообщение
    Можно ли подсунуть какие-то другие драйверы чтобы заработал Native?
    Для этого нужно писать свой драйвер, или делать транспорт под чужой драйвер, который имеет поддержку DSD.
    Но, не зная спецификаций проприетарного драйвера, это задача очень нетривиальная.

    Цитата Сообщение от Alex Посмотреть сообщение
    Так в том-то и дело что там работает!
    А под Виндой танцы и бубны.
    Имеется ввиду, что линукс/макос с ошибкой в дескрипторе не падает?
    Я не проверял.

    Цитата Сообщение от Alex Посмотреть сообщение
    Мы уже как-то обсуждали - почему UAC2 девайс на ПИКе, СТМ и т.п., не работает с драйврами того-же TheSycon-a под XMOS?
    Если соблюдаются все стандарты UAC, что в девайсе, что в драйвере, то кроме мандаторных VID&PID как у Thesycon, ничего по идее не должно мешать работать с "чужим" драйвером.
    Стандартный PCM может и работает. Я уже не помню, но вроде под кмосовским драйвером PCM выводил.
    Ну и кмос скорее всего не просто UAC2, а какая-то его проприетарная версия. DSD так точно без проприетарного протокола не вывести.

  5. #404
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Ну и кмос скорее всего не просто UAC2, а какая-то его проприетарная версия.
    Да не, тот же UAC2. Под 7й виндой запускается этот транспорт с ХМОС драйверами. На десятке не пробовал.
    Вот чувак из Италии запускал:
    Нажмите на изображение для увеличения. 

Название:	1734109062731.png 
Просмотров:	31 
Размер:	12.7 Кб 
ID:	473951

    Цитата Сообщение от Alex Посмотреть сообщение
    А почему в Андроиде этого не нужно, он-же вроде тоже своего рода пынгвынукс?
    Хз, даже не пробовал в андроиде DSD выводить

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

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

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

  7. #406
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    41
    Сообщений
    2,176

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

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Чтобы в линуксе выводить native- нужно в usb audio quirks указать vid, pid девайса и то что он поддерживает DSD. Т.е пересобирать ядро
    Ого, пересобрать? То есть недостаточно прописать quirk для нужного vid:pid в параметрах ядра?
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

  8. #407
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

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

    Так это не конфиг, а исходный код аудио драйвера.


    Offтопик:
    Hoi

  9. #408
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    41
    Сообщений
    2,176

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

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Так это не конфиг, а исходный код аудио драйвера.
    Я с USB-audio quirk*ами дела не имел, а применительно к USB-mass-storage дефолтные костыли прописаны в коде, но их можно оверрайдить параметрами ядра. Отсюда и вопрос: неужели с usb-audio так нельзя?

    Offтопик:
    Хуе морхе
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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

    Запустил соневский модулятор на пике.
    х8 оверсемплинг делаю микшером в винде, дальше еще х8 оверсемплинг модулятором.
    Спектр с 1792 в режиме AFIR:
    Нажмите на изображение для увеличения. 

Название:	pic32mz_sony5sdm.png 
Просмотров:	46 
Размер:	103.1 Кб 
ID:	473989

    В общем получается на пике можно и PCM->DSD/DSD->PCM конвертор сделать. А на паре процев реализовать транспорт и ЦФ с модулятором без плисин.

  11. #410
    Завсегдатай Аватар для tomtit
    Регистрация
    23.06.2009
    Адрес
    пгт.Торонтовка
    Возраст
    66
    Сообщений
    1,041

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


    Offтопик:
    https://forum.vegalab.ru/showthread....=1#post3289863
    Я завязал с ЦАПостроением. Что дальше делать-то?
    Удешевлять изо всех сил? Нужен ли прогресс и куда?


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

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


    Offтопик:
    tomtit, для меня основной смысл пика - это USB-транспорт. А вся эта ЦОС - больше познавательный интерес (любопытно поковырять ассемблер, всякие dsp инструкции).
    Типа, тысяча и одно применение pic32mz.

  13. #412
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

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

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

    Я таки разобрался с TDM 8 канальным входом
    Нажмите на изображение для увеличения. 

Название:	photo_2025-05-21_09-31-26.jpg 
Просмотров:	30 
Размер:	145.0 Кб 
ID:	473993

  14. #413
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,730

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

    Тут офтопик наверно. Но правильнее всё делать в плисине. Найти бы проект юсб транспорта для плис (хотя я не знаю зачем, мне оптики выше крыши), остальное всё уже сделали. Ан нет, ASRC для плис ещё не хватает, чтобы аудио-гены исключить.

  15. #414
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

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

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Найти бы проект юсб транспорта для плис
    Есть такие

    https://github.com/WangXuan95/FPGA-USB-Device/tree/main

  16. #415
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,730

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

    А после этого можно со спокойной душой возвращаться к катушечникам и кассетникам. Ну или к вертушкам. Кому как.

    ---------- Сообщение добавлено 22:18 ---------- Предыдущее сообщение было 22:14 ----------

    eclipsevl, спасибо, почитаю. Начать опыты можно и с USB 1.1.

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

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

    Продолжил эксперименты (оптимизацию) DSP обработки.
    В общем оказалось, что пик успевает обсчитать 5842 ЦФ (х8) + соневский х8 модулятор (правда на предельной частоте тактирования 320МГц).
    Получается простой проект для экспериментов с мультибитными и AFIR ЦАП-ами.
    Правда больше чем х64 модулятор он уже не вытянет, даже без ЦФ. Ну может быть х128, если понизить порядок модулятора до 4-х.

  18. #417
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    5842 ЦФ (х8)
    А какого порядка фильтр? По ДШ там каскад из 3-х КИХов.

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

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

    eclipsevl, такой и есть.
    Коэффициенты взял что выкладывал tomtit, с тем же кол-вом тапов что в даташите.
    Правда, строго говоря, его коэффициенты не один в один даташитные а чуть другие (получше).

    P.S.
    Оказалось, что свойство симметрии фазолинейных фильтров можно использовать не только на FPGA, но и при оптимизации под процессор.

  20. #419
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,730

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

    Ну раз пик успевает, значит и хмос смог бы?
    Только некому сделать?

    ---------- Сообщение добавлено 19:52 ---------- Предыдущее сообщение было 19:50 ----------

    dortonyan, отлично. Для экспериментов вполне годно. Особенно, если кроме юсб ничего не нужно.
    Значит получается 2 вида прошивки? Первая для старых параллельников с "крутым" цф и вторая для сдм+афир с обычным цф.

  21. #420
    Частый гость Аватар для Вергилий
    Регистрация
    28.10.2014
    Сообщений
    215

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Продолжил эксперименты (оптимизацию) DSP обработки.
    В общем оказалось, что пик успевает обсчитать 5842 ЦФ (х8) + соневский х8 модулятор (правда на предельной частоте тактирования 320МГц).
    Получается простой проект для экспериментов с мультибитными и AFIR ЦАП-ами.
    Правда больше чем х64 модулятор он уже не вытянет, даже без ЦФ. Ну может быть х128, если понизить порядок модулятора до 4-х.
    А если питание повысить, не подразгонится?

Страница 21 из 27 Первая ... 111920212223 ... Последняя

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

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

Ваши права

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