Страница 20 из 27 Первая ... 101819202122 ... Последняя
Показано с 381 по 400 из 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. #381
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

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


    Offтопик:
    Цитата Сообщение от Turbo_man Посмотреть сообщение
    dortonyan и eclipsevl, а может вам сделать такой совместимый транспорт? Уж очень не хочется самому плату делать.
    Turbo_man, Владимир, ну я проект опубликую. А далее, если eclipsevl захочет - добавит в свой проект, я возражений не имею.
    По мне так проц транспорта на своей плате наоборот удобнее, не нужно ставить отдельную сборку.
    Другое дело, что у микрочипа отладчики дороговаты. Покупать ради одного проца - получается конечно накладно.


    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Наверно 16-битный фрейм для TDA1541 как раз может сгодиться, только отключить COB нужно будет.
    Имеете ввиду в выходных данных транспорта инвертировать старший бит? Это само-собой.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    в выходных данных транспорта инвертировать старший бит? Это само-собой.
    Да, конечно.
    Цитата Сообщение от dortonyan Посмотреть сообщение
    По мне так проц транспорта на своей плате наоборот удобнее, не нужно ставить отдельную сборку.
    Не понял, а как это иначе?
    Вот бы устроить батл all-in-one FPGA vs PIC32.

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

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


    Offтопик:
    Цитата Сообщение от dortonyan Посмотреть сообщение
    Другое дело, что у микрочипа отладчики дороговаты. Покупать ради одного проца - получается конечно накладно.
    PicKit на али есть, по цене - как сам проц, $12-15.



    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    PicKit на али есть
    Ты про 3-ю версию?

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

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

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Ты про 3-ю версию?
    Да, например:
    https://www.aliexpress.com/item/4001...Cquery_from%3A

    Там и 2, и , и даже 3.5

    P.S. "Мопед не мой", я не знаю оно рабочее или просто массо-габаритный макет. У меня, как ты понимаешь, "родной".
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  7. #386
    Завсегдатай Аватар для MikeF
    Регистрация
    04.11.2004
    Адрес
    Кемерово
    Возраст
    41
    Сообщений
    3,156

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

    Цитата Сообщение от Alex Посмотреть сообщение
    даже 3.5
    А 3.5 может всё то же что 3 и 2?
    Для связи: Skype и почта на моём сайте в профиле.
    С уважением,
    Михаил.

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

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

    Не знаю, у меня 3-й.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  9. #388
    Завсегдатай Аватар для MikeF
    Регистрация
    04.11.2004
    Адрес
    Кемерово
    Возраст
    41
    Сообщений
    3,156

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

    Для связи: Skype и почта на моём сайте в профиле.
    С уважением,
    Михаил.

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

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

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Не понял, а как это иначе?
    Имею ввиду транспорт на отдельной платке vs контроллер, запаянный прямо в плату ЦАП.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Вот бы устроить батл all-in-one FPGA vs PIC32.
    Так если фильтры зашить одинаковые, то и работать будут одинаково.
    Другое дело, что на плисине для реализации ЦОС ресурсов и возможностей гораздо больше и потребление ниже.

  11. #390
    Завсегдатай Аватар для antecom
    Регистрация
    10.02.2005
    Адрес
    Королев
    Возраст
    51
    Сообщений
    3,010

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

    Брал вот этот Pickit3 на Али:
    https://aliexpress.ru/item/1005008126252267.html
    работает стабильно.
    MPLAB SNAP может и лучше, но стоил в 5 раз дороже.
    Максим vmaudio@mail.ru

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

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

    Есть слух, что PIC32MZ можно неким образом прошить при помощи PicKit2 (просто есть в наличии ). Правда или ложь?
    Последний раз редактировалось Turbo_man; 17.05.2025 в 23:21.

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

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

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    И по unit ID обрабатываются setup пакеты с громкостью/мьютом
    Попробовал добавить фича-модуль между входным и выходным терминалами потока вывода.
    Громкость заработала (по запросу от хоста значения задаются), а мюьт не фурычит. Т.е. после энумерации по кнопке мьюта хост ничего не шлет.
    При энумерации хост запрашивает 8 байт это Layout 2 пакет диапазона для громкости, и все. Для мьюта диапазона не запрашивает.
    Потом только запрашивает текущее значение в 1 байт (L1 CURR), в которое я отправляю нуль (мьют выключен). Может надо что-то другое отправить на запрос значения? Не пойму логику.

    P.S.
    Починил.
    Надо было просто удалить устройство из системы и заново подключить, чтобы подхватились новые настройки.
    Последний раз редактировалось dortonyan; 20.05.2025 в 14:19.

  14. #393
    Новичок Аватар для Adson
    Регистрация
    07.11.2007
    Адрес
    Москва
    Возраст
    58
    Сообщений
    61

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

    Цитата Сообщение от Alex Посмотреть сообщение
    оно рабочее
    Если кому-то важно, то да, рабочее, сам таким пользуюсь.

    Коллеги, спасибо большое за развитие проекта! А есть шанс на вывод DSD native? Или я что-то пропустил? Спасибо заранее.

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

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

    Цитата Сообщение от Adson Посмотреть сообщение
    А есть шанс на вывод DSD native?
    А это зависит не от транспорта, а от системного драйвера. К сожалению нативные UAC2 драйверы DSD не поддерживают. Единственная возможность вывода - паковать в DoP пакеты с передачей через васапи драйвер.
    И даже тот UAC2 драйвер что есть - работает на честном слове: лютый говнокод, который при малейшей ошибке в дескрипторе может положить систему (по крайней мере в виндовс). Пока отлаживал энумерацию регулярно наблюдал синие экраны.

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

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

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

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    А это зависит не от транспорта, а от системного драйвера. К сожалению нативные UAC2 драйверы DSD не поддерживают. Единственная возможность вывода - паковать в DoP пакеты с передачей через васапи драйвер.
    И даже тот UAC2 драйвер что есть - работает на честном слове: лютый говнокод, который при малейшей ошибке в дескрипторе может положить систему (по крайней мере в виндовс). Пока отлаживал энумерацию регулярно наблюдал синие экраны.
    О да, недавно еще прикол обнаружил: если у девайса с аудио входом меняется количество каналов или формат данных - винда с ним больше не дружит. Приходится вручную удалять из системы.

    Чтобы в линуксе выводить native- нужно в usb audio quirks указать vid, pid девайса и то что он поддерживает DSD. Т.е пересобирать ядро

  18. #397
    Завсегдатай Аватар для JazMan
    Регистрация
    15.02.2011
    Сообщений
    1,923

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

    Цитата Сообщение от Alex Посмотреть сообщение
    В пынгвунуксе, ... ведь оно работает!

    Offтопик:
    Работает, но постоянно добавляют костыли ("quirks") в код, для разных косячных поделок.
    Которые впрочем, часто смахивают на последствия подгонки под виндовый драйвер.

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

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

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    : если у девайса с аудио входом меняется количество каналов или формат данных - винда с ним больше не дружит. Приходится вручную удалять из системы.
    Это вроде только со встроенным драйвом, с "полноценным" - перетыкаю интерфейсы с разным числом каналов, ничего вручную делать не надо.


    Цитата Сообщение от JazMan Посмотреть сообщение
    но постоянно добавляют костыли ("quirks") в код, для разных косячных поделок.
    Пингвыноиды доджны страдать



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

  20. #399
    Завсегдатай Аватар для JazMan
    Регистрация
    15.02.2011
    Сообщений
    1,923

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

    Цитата Сообщение от Alex Посмотреть сообщение
    Пингвыноиды доджны страдать

    Offтопик:
    Никто не страдает)

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    Но все равно не понимаю почему если девайс работает в UAC2, к нему не подходят _любые_ UAC2 драйвера!
    Почему не подходят?
    Транспорт на пике работает и под линуксом/андроидом, и под макосом.
    Или что имелось ввиду?

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

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

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

Ваши права

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