Страница 11 из 14 Первая ... 910111213 ... Последняя
Показано с 201 по 220 из 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. #201
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,224

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

    Да без разницы для чего. На 32-м пике ничего серьезного в ЦОС сделать не получится.
    Максимум какой-то простой х2 апсемплер с дизером. И то не факт, надо пробовать.

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

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

    А можно сконфигурировать порт для работы с мультибитником с деглитчером? Если да, то какой пин вытаскивать на разъём под деглитчер?

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

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

    Вывод на "мультибит" сделать можно, для этого используется два SPI модуля (по одному на каждый канал). Но просто вывода мало, надо еще дописывать обработку данных (округление до разрядности ЦАП).
    Для деглитчера отдельный сигнал не обязателен, можно использовать сигнал WCK(LRCK, CS).
    Но лучше и проще все это сделать на плисине.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Вывод на "мультибит" сделать можно, для этого используется два SPI модуля (по одному на каждый канал). Но просто вывода мало, надо еще дописывать обработку данных (округление до разрядности ЦАП).
    Для деглитчера отдельный сигнал не обязателен, можно использовать сигнал WCK(LRCK, CS).
    Но лучше и проще все это сделать на плисине.
    Насчёт 2 модулей понятно, но сигнал деглитчера должен быть сдвинут относительно WCK - отсюда и вопрос, какой пин можно сконфигурировать под это. Хочеться заложить в плату функционал по-максиму - отсюда и вопрос

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

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

    Цитата Сообщение от Sanny Посмотреть сообщение
    но сигнал деглитчера должен быть сдвинут относительно WCK - отсюда и вопрос, какой пин можно сконфигурировать под это.
    Как сделать на контроллере такой сигнал не знаю, не задавался таким вопросом.
    Для сдвига проще добавить задержку на I2S шине россыпными логическими вентилями. Т.к. для снижения джиттера перед ЦАП нужен реклок, то схема будет примерно такая:
    Нажмите на изображение для увеличения. 

Название:	изображение_2024-03-20_121516090.png 
Просмотров:	14 
Размер:	5.3 Кб 
ID:	451736
    А в крайнем случае можно обойтись и без задержки, т.к. коммутация ключей УВХ происходит быстрее, чем обновление выхода ЦАП.

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

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

    Спасибо! Ещё вопросик(скорее академический )- а у данного проца ядро UC или UK?

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

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

    Цитата Сообщение от Sanny Посмотреть сообщение
    у данного проца ядро UC или UK?
    Даже не знаю что эти буквы означают.

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

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

    dortonyan, здравствуйте, скажите пожалуйста, получится ли пофиксить код прошивки транспорта по части режима паузы и переключения треков, с зацикливанием буфера?
    всё работает хорошо, только этот момент напрягает.
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

  10. #209
    Старый знакомый Аватар для dee-jan
    Регистрация
    09.07.2009
    Адрес
    BLR
    Возраст
    42
    Сообщений
    923

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

    Цитата Сообщение от nabiullin Посмотреть сообщение
    получится ли пофиксить код прошивки транспорта по части режима паузы и переключения треков, с зацикливанием буфера?
    всё работает хорошо, только этот момент напрягает.
    Обьясните, где этот эффект проявляется? Я что-то с таким не сталкивался (слушаю через фубар), есть только еле заметные щелчки когда сетка генов 44-48 переключаются на АК цапах, что совсем не напрягает.
    Сергей.

  11. #210
    iN GOD We TRUSt Аватар для EDDiE
    Регистрация
    13.02.2006
    Сообщений
    13,141

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


    Offтопик:
    есть свежее обновление 10ки, можно попробовать установить, или перейти на Win11, там, недавно много ошибок пофиксили

  12. #211
    Завсегдатай Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    39
    Сообщений
    2,608

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

    Цитата Сообщение от dee-jan Посмотреть сообщение
    Обьясните, где этот эффект проявляется? Я что-то с таким не сталкивался (слушаю через фубар), есть только еле заметные щелчки когда сетка генов 44-48 переключаются на АК цапах, что совсем не напрягает.
    А пробовали первым делом включать сброс программно? Перед тем как писать другие регистры. На ст7601 отлично работает без щелчков, даже в дсд.
    _________________
    Евгений

  13. #212

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

    Цитата Сообщение от maxssau Посмотреть сообщение
    А пробовали первым делом включать сброс программно? Перед тем как писать другие регистры. На ст7601 отлично работает без щелчков, даже в дсд.
    вы не спрашивали комтру по 7602? Мне они опять перестали отвечать, после вот такого короткого диалога:
    Нажмите на изображение для увеличения. 

Название:	2024-03-31_16-14-43.jpg 
Просмотров:	49 
Размер:	33.1 Кб 
ID:	452322
    PS: не подумайте нехорошего, "Хао де" на путонгхуа значит "ну, ладно" и далее по тексту "как получить сэмплы?".
    Импульсно всё, в этом мире бушующем..

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

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


    Offтопик:
    Цитата Сообщение от IVX Посмотреть сообщение
    Мне они опять перестали отвечать,

    Какой Благородный Янг...


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

  15. #214

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

    да, вообще хз на чём проколешься с ними, в прошлый раз они перестали отвечать после моего вопроса "а вы мерили джиттер 7601 когда-либо?".
    Импульсно всё, в этом мире бушующем..

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

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

    Цитата Сообщение от nabiullin Посмотреть сообщение
    получится ли пофиксить код прошивки транспорта по части режима паузы и переключения треков, с зацикливанием буфера?
    всё работает хорошо, только этот момент напрягает.
    Я уже писал, что теоретически можно. Пока что "руки не дошли".

  17. #216
    Завсегдатай Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    39
    Сообщений
    2,608

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

    Цитата Сообщение от IVX Посмотреть сообщение
    вы не спрашивали комтру по 7602? Мне они опять перестали отвечать, после вот такого короткого диалога:
    Нажмите на изображение для увеличения. 

Название:	2024-03-31_16-14-43.jpg 
Просмотров:	49 
Размер:	33.1 Кб 
ID:	452322
    PS: не подумайте нехорошего, "Хао де" на путонгхуа значит "ну, ладно" и далее по тексту "как получить сэмплы?".
    Офф. Нет, есть еще пяток 7601. Ацп надо сделать и наверное уже всё, интерес пропадает
    _________________
    Евгений

  18. #217
    Старый знакомый Аватар для dee-jan
    Регистрация
    09.07.2009
    Адрес
    BLR
    Возраст
    42
    Сообщений
    923

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

    Цитата Сообщение от maxssau Посмотреть сообщение
    А пробовали первым делом включать сброс программно? Перед тем как писать другие регистры. На ст7601 отлично работает без щелчков, даже в дсд.
    АК в хард режиме. Мне в активе ДСД не нужен.
    Сергей.

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

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

    nabiullin, а на каком плеере и ОС проявляется баг?

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    nabiullin, а на каком плеере и ОС проявляется баг?
    в OS Linux (Ubuntu 22) на самописном плеере (создан на основе mplayer).
    в PureOS на любом рендерере
    в Android OS с USB Audio Player Pro.
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

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

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

    А можете выложить плеер под убунту? Попробую отладить под виртуалкой?

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

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

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

Ваши права

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