Страница 7 из 14 Первая ... 56789 ... Последняя
Показано с 121 по 140 из 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. #121
    Старый знакомый Аватар для dee-jan
    Регистрация
    09.07.2009
    Адрес
    BLR
    Возраст
    42
    Сообщений
    923

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

    Цитата Сообщение от Alex Посмотреть сообщение
    А ДСД умеет?
    Не умеет. Надобности в ДСД в активе нету.
    ЦАП сугубо туда заточен.
    Сергей.

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

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

    Цитата Сообщение от maxssau Посмотреть сообщение
    см. личку
    И мне сбрось, а то чуствую с иксмоса надо потихоньку сбегать.

    Тут еще и с 15-м софтом ихним проблемы, полный мрак, но и с предыдущими 13 и 14, что на говноэклипсе, тоже проблемы. Пытался тут 14-й на другой комп поставить - хрена!
    Сильно не копал, так оно там и не очень нужно пока, но некоторое рытье по сети показало что такое у довольно многих. Причины непонятны, лечение тоже. От иксмосовцев ответ всегда только один - переходите на 15-й...

    ---------- Сообщение добавлено 08:25 ---------- Предыдущее сообщение было 08:24 ----------

    Цитата Сообщение от dee-jan Посмотреть сообщение
    Надобности в ДСД в активе нету.
    ЦАП сугубо туда заточен.

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

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

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


    Offтопик:

    Цитата Сообщение от Alex Посмотреть сообщение
    И мне сбрось, а то чуствую с иксмоса надо потихоньку сбегать.

    Тут еще и с 15-м софтом ихним проблемы, полный мрак, но и с предыдущими 13 и 14, что на говноэклипсе, тоже проблемы. Пытался тут 14-й на другой комп поставить - хрена!
    Сильно не копал, так оно там и не очень нужно пока, но некоторое рытье по сети показало что такое у довольно многих. Причины непонятны, лечение тоже. От иксмосовцев ответ всегда только один - переходите на 15-й...

    я пожалуй полностью сбежал. единственное на 7601, после какой то заплатки win10/11 отвалился asio. сейчас доделываю (надеюсь последний ) дак на 7601+4490 в версии usb питания.

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

Название:	9pVFyeiq4g0.jpg 
Просмотров:	136 
Размер:	1.96 Мб 
ID:	448651

    _________________
    Евгений

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

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

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

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

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


    Offтопик:


    Ну это не первая плата, прототип 1.5 года радует звуком. В этой версии сделано под алюминиевый корпус, перепилен усилитель для наушников и добавлен балансный выход

    _________________
    Евгений

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

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

    Цитата Сообщение от maxssau Посмотреть сообщение
    Ну это не первая плата, прототип 1.5 года радует звуком.
    Я склько ни пробовал на референс танталы ставить, было хуже чем с обычными или полимерными электролитами. Хотя по идее, последние не должны сильно от тантала отличаться.


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

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

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


    Offтопик:


    Цитата Сообщение от Alex Посмотреть сообщение
    P.S. Ты бы платку хоть помыл, прежде чем фотки выкладывать
    да мне пофиг, не серийно, 1-2 шт соберу себе и хватит, плюс там деталек не хватает, жду остатки, рано пока мыть, как заработает отмою конечно же. Схема мало кому интересна, а композитный ушник выкладывать смысла не вижу, крутить, критиковать и сравнивать с другими схемами бессмысленно в отрыве от голодного питания, шума от ДЦ-ДЦ и прочими трудностями, которых нет при обычном питании от сети.


    _________________
    Евгений

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    А ДСД умеет? Я как-то пытался на том-же ПИКе сделать, так чтобы Зесайконовские драйвера использовать из-за АСИО, но получалось через пень-колоду. В итоге бросил, продолждаю сидеть на XMOSе..
    Можно подробнее, что получилось, а что нет?

    Цитата Сообщение от dee-jan Посмотреть сообщение
    Только в Win.


    А чо за глюки? Я пока ни в каких режимах касяков не видел. Основной, конешно, KS (WASAPI).
    Жду фидбэк, сам не смог воспроизвести.

    Цитата Сообщение от MikeF Посмотреть сообщение
    Давно не интересовался этой темой, что на аманеро доступны исходники?
    USB дескрипторы читаются при энумерации устройства, чтобы их прочитать исходники не нужны.

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    А ДСД умеет? Я как-то пытался на том-же ПИКе сделать, так чтобы Зесайконовские драйвера использовать из-за АСИО, но получалось через пень-колоду. В итоге бросил, продолждаю сидеть на XMOSе..
    Чисто физически вывод конечно сделать можно. Я же в шапке писал про вывод битстрима через WASAPI. Только 8 каналов не получится, т.к. на каждый канал DSD битстрима требуется отдельный SPI модуль, а их в пике максимум 6.
    Остальное это уже вопросы разбора команд драйвера: обработку команд можно под любой драйвер сделать, все упирается в спецификацию команд.
    Я как-то тоже пытался прикинуться кмосом, чтобы через их драйвер вывести DSD, но до конца так и не добил, потому что получилось вывести битстрим через WASAPI в формате DoP и дальше интерес пропал.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Я как-то тоже пытался прикинуться кмосом, чтобы через их драйвер вывести DSD, но до конца так и не добил,
    Вот и я аналогично. Я тогда вооще психанул и грохнул всю директорию с проектом, чтобы соблазна отвлекаться небыло - у меня большой проект начался (не аудио).

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Можно подробнее, что получилось, а что нет?
    Да ругалась винда все время. Мож я в дескрипторах чего недоделал, мож еще чего.



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

  12. #131
    Завсегдатай Аватар для MikeF
    Регистрация
    04.11.2004
    Адрес
    Кемерово
    Возраст
    40
    Сообщений
    3,117

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

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    USB дескрипторы читаются при энумерации устройства, чтобы их прочитать исходники не нужны.
    Жаль, иногда хочется верить в чудо
    Для связи: Skype и почта на моём сайте в профиле.
    С уважением,
    Михаил.

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    Я склько ни пробовал на референс танталы ставить, было хуже чем с обычными или полимерными электролитами. Хотя по идее, последние не должны сильно от тантала отличаться.
    Аналогично. Ставил в cs5381 тантал в реф, обычный лит был получше. Так и оставил.
    Собственно, в 4493 тоже тупо ничикон KA 2200мкф зашел неплохо.
    Сергей.

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    Вот и я аналогично. Я тогда вооще психанул и грохнул всю директорию с проектом, чтобы соблазна отвлекаться небыло - у меня большой проект начался (не аудио).

    Да ругалась винда все время. Мож я в дескрипторах чего недоделал, мож еще чего.


    Offтопик:
    P.S. На diyaudio дискуссия про ENOB интересная
    Понятно, я с DSD еще не пробовал этот траспорт.


    Offтопик:
    PS: ага

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    Вот и я аналогично. Я тогда вооще психанул и грохнул всю директорию с проектом, чтобы соблазна отвлекаться небыло - у меня большой проект начался (не аудио).
    А не пробовали для DSD алгоритм энумерации и обмена с хостом "выковырять" из кмосовского проекта? Или там искать без шансов?
    Последний раз редактировалось dortonyan; 27.01.2024 в 11:03.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    А не пробовали для DSD алгоритм энумерации и обмена с хостом "выковырять" из кмосовского проекта? Или там искать без шансов?
    Там вообще USB стек закрыт, да и я в такие нюансы не вдавался.
    Когда я свои иксмосы делал, там хватало проблем и без того.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Цифровой РГ в ДС ЦАПе влияет чисто на SNR.
    А на искажения значит не влияет?
    Тоесть "рисуем" сигнал 16-ю битами или 12-ю - без разницы?
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Влияет. Причем именно для ДС ЦАП, как правило,
    Для любых.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    THD при снижении уровня уменьшается, т.к. на больших уровнях доминируют "аналоговые" нелинейности.
    А то что меньшее число битов участвует в преобразовании не считается?

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Так вот при цифровой аттенюации ENOB снижается в первую очередь за счет шума, а не за счет искажений.
    Я вообще писал что ENOB вычисляется для 0dBFs.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Если вы на входе своего ЦАПа задатите уровень -60дБ, то какие гармоники вы там увидите?
    В шумах утонут
    Но если бы не утонули - были бы соответстующие числу младших бит, участвующих в преобразовании (старшие-то нули).

    ---------- Сообщение добавлено 16:57 ---------- Предыдущее сообщение было 16:56 ----------

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

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Именно в преобразовании участвует столько бит, сколько есть физически в ЦАПе.
    То есть если на вход ЦАПа подать мигающий младший бит, при нулях на всех старших, на выходе тоже можно синусоиду получить?

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Но там разрядности обычно не ниже 24-х бит. А в кастомном проекте можно сделать вообще сколь угодно больше, хоть 40 бит.
    Можно и 100, но если у ЦАПа ENOB 20, то из этих ста работать будут только старшие 20.

    Собсовенно, тут надо отличать истинный ENOB, т.е. с учетом SNR и THD, и то что я называю "живыми битами" - это сколько бит вообще хоть как-то влияют на выходной сигнал ЦАПа, невзирая на шумы и искажения (июураются усрденением).
    Я для этого у себя в Генераторе даже специальный режим делал.
    Заявленные как "32-х битные" AK4490,97,ES9038Pro - с трудом доходили до 24-х. При этом ENOB, с учетом SNR и THD доходил только до 20-21.

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

  19. #138
    Завсегдатай Аватар для domician
    Регистрация
    07.12.2012
    Сообщений
    1,675

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

    Я просто регулирую громкость в iZotope Ozone. Никаких проблем.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Ну на однобитном ЦАПе получается же как-то.
    То совсем другое.

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

  21. #140
    Завсегдатай Аватар для domician
    Регистрация
    07.12.2012
    Сообщений
    1,675

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Могу даже отдельно сообразить проект аттенюатора с I2S на входе и выходе под какую-нить мелкую плисину.
    Но не проще пользовать профессиональный vst плагин? Тот же iZotope обрабатывает все в 64 бит режиме. И так как оно для мастеринга, то, естественно, что регулирует уровни "правильно".

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

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

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

Ваши права

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