Страница 2 из 16 Первая 123412 ... Последняя
Показано с 21 по 40 из 309

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

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

    По умолчанию 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. #21
    Старый знакомый Аватар для dee-jan
    Регистрация
    09.07.2009
    Адрес
    BLR
    Возраст
    43
    Сообщений
    925

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

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

Название:	PIC32mz.jpg 
Просмотров:	344 
Размер:	193.3 Кб 
ID:	428259  
    Сергей.

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

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

    Отличный проект, спасибо что поделились! Жаль что PIC32MZ сейчас труднодоставаем.

    Цитата Сообщение от dee-jan Посмотреть сообщение
    Решил тоже попробовать этот транспорт, получается очень компактно 30х30мм, минимальная длина i2s, можно линейный стаб поставить.
    Классно. Наверное самый компактный USB транспорт. Может стоит ещё уменьшить площадь полигона земли для снижения емкости между землей USB части и корпусом ЦАП. Например подрезать полигон со стороны нижнего ряда выводов PIC32. Ну и убрать вторую развязку, а для АЦП транспорта сделать отдельную плату.
    Максим vmaudio@mail.ru

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

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

    Если нужно максимально компактно, то эти пики есть и в QFN64 корпусах, причем шанс найти таковые даже выше, чем QFP. Но как по мне, так это излишне (как и обрезание полигонов), ибо площадь и так получается небольшая.
    Две микросхемы развязки, как на моей схеме использовать необязательно. Схему я опубликовал просто для привязки к проекту, чтобы было понятно какие пины для чего инициализированы. Дальше проект можно допиливать под свои нужды как угодно.
    Например для вывода DSD лучше использовать модуль I2S4 (а не I2S1, как у меня), который позволит сделать переключение сигналов DSD на сигналы I2S, как в болеро и т.п. транспортах.
    Другая особенность - задание ЧД. В моей схеме тактирование на ЦАП и АЦП раздается параллельно с одних и тех же выходов генераторов, поэтому сетка генераторов коммутируется только для I2S выхода. Из-за этого алгоритм задания частоты семплирования получился сложный.
    По хорошему, если делать транспорт на вход и выход одновременно, то нужно делать два отдельных выхода для задания частотной сетки: свой для ЦАП и свой для АЦП.

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

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

    Цитата Сообщение от antecom Посмотреть сообщение
    уменьшить площадь полигона земли для снижения емкости между землей USB части и корпусом ЦАП.
    Нет вижу смысла бороться. Емкость 9см2 к корпусу через 5мм ниже 2пф.
    Сергей.

  6. #25
    Завсегдатай Аватар для antecom
    Регистрация
    10.02.2005
    Адрес
    Королев
    Возраст
    51
    Сообщений
    2,924

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

    dortonyan, dee-jan, спасибо за пояснения. Емкость платки на корпус действительно меньше 2пФ получается, что рекордно низко (думал будет больше - не удосужился сразу посчитать).
    Максим vmaudio@mail.ru

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

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

    Попробовал запустить транспорт на своей мобиле. Оказалось что аудио-драйвер в моей версии андроида поддерживает только UAC1 и только в режиме 16bit 48kHz.
    На основе проекта из шапки собрал проект UAC1. Проект значительно проще, в нем только стерео воспроизведение PCM: Нажмите на изображение для увеличения. 

Название:	изображение_2023-02-19_120328021.png 
Просмотров:	147 
Размер:	21.9 Кб 
ID:	431092

    Отлаживал проект на компе (win10) и на своей мобиле (android 5.1).
    Потребление от USB шины по схеме из шапки составило 27..29mA, в зав-ти от выбранной ЧД, что может быть удобно для портативного девайса, где важнее не максимальная ЧД, а потребление.
    Тактовая частота шины в проекте задана 24МГц от встроенного генератора и PLL. Если использовать USB кварц такой же частоты, то можно затактироваться прямо от него, в обход PLL. Если системный блок PLL при этом отключится, то потребление будет еще чуть ниже, но я такой режим не проверял.
    Вложения Вложения

  8. #27
    Старый знакомый Аватар для Анатоль
    Регистрация
    02.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    833

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

    Цитата Сообщение от antecom Посмотреть сообщение
    Жаль что PIC32MZ сейчас труднодоставаем
    Подскажите, кто знает это https://aliexpress.ru/item/100500505...00031468106826
    подойдёт ?
    И приобрел бы ПП под это дело.
    Не ошибается тот, кто ничего не делает и ошибается тот, кто ничего не делает

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

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

    Подойдет любой проц из серии PIC32MZ. Серия EC должна запуститься как есть, без правок. На новой серии EF вроде тоже должно работать, но я не проверял. Там если и понадобится "допилить", то немного.

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

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

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

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

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

    С пиками работают только их отладчики (и вроде какие-то версии сеггеров). Бывают ли клоны - не интересовался, пользуюсь оригинальными.
    Самый дешевый, который шьет все новые пики snap-программер. Поддерживает до 8-ми КТ. Можно отлаживаться и старым PicKit3, но он поддерживает всего одну КТ.

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

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

    скажите пожалуйста.
    >> 3. Стерео вход: 32bit 768kHz (опробовал по факту только 192, т.к. мой АЦП больше не выдает).

    в каком режиме работает вход i2s ?
    master или slave
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

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

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

    Цитата Сообщение от nabiullin Посмотреть сообщение
    скажите пожалуйста.
    >> 3. Стерео вход: 32bit 768kHz (опробовал по факту только 192, т.к. мой АЦП больше не выдает).

    в каком режиме работает вход i2s ?
    master или slave
    I2S выходы мастером, вход - слейв.
    В слейве есть только одна проблема - синхронизация каналов. Для этого я в добавил "костылик" старта SPI модуля по фронту LRCK сигнала. Вроде стартует всегда корректно, левый/правый каналы на своих местах.

    ---------- Сообщение добавлено 17:18 ---------- Предыдущее сообщение было 15:51 ----------

    Ну и 768к не уверен, что получится, т.к. драйвер uac2 в win10 отображает список только до 384к. Т.е. это можно проверить только на ПО, принимающем 768к поток.

  14. #33
    Старый знакомый Аватар для Analog
    Регистрация
    20.12.2009
    Адрес
    СПб
    Сообщений
    742

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

    dortonyan, в списке поддерживаемых чипов для pickit 3 нет микросхемы pi32mz, только pic32mx максимум. Уточните, пожалуйста, что такое КТ?
    Цена на pickit4 совсем не нравится…
    Поиск доступного программатора продолжается
    "Широкая сцена и направленный провод – горе в семье"

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

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

    Цитата Сообщение от Analog Посмотреть сообщение
    dortonyan, в списке поддерживаемых чипов для pickit 3 нет микросхемы pi32mz, только pic32mx максимум.
    Видимо устарел мануал на PicKit3, т.к. он больше не производится. PIC32MZ он точно поддерживает, я пробовал им отлаживаться. Возможно понадобится обновление прошивки отладчика, но новое IDE делает это автоматом, можно не заморачиваться.

    Цитата Сообщение от Analog Посмотреть сообщение
    Уточните, пожалуйста, что такое КТ?
    Контрольные точки.

    Цитата Сообщение от Analog Посмотреть сообщение
    Цена на pickit4 совсем не нравится…
    Поиск доступного программатора продолжается
    Ну я же написал, что самый дешевый отладчик snap, ищите его. Я им сейчас и пользуюсь.
    Последний раз редактировалось dortonyan; 13.03.2023 в 18:56.

  16. #35

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

    Вопрос автору, для чего нужны сигналы USB_R0 - USB_R3 на принципиальной схеме?

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

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

    Цитата Сообщение от olegn77 Посмотреть сообщение
    для чего нужны сигналы USB_R0 - USB_R3 на принципиальной схеме?
    Таких сигналов на схеме нет. Есть PIC_R0..PIC_R3.
    Это просто выходные порты, выведенные на всякий случай. Например, часть из них я использую для управления АЦП.

  18. #37
    Старый знакомый Аватар для Analog
    Регистрация
    20.12.2009
    Адрес
    СПб
    Сообщений
    742

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

    dortonyan, хочу полюбопытствовать, почему напряжение +3V1_BUS =3,1 Вольт, а не стандартные 3,3 В? С номиналами делителя ОС стаба так получилось?
    И второе, в цепи питания гальваноразвязки применены бусины, а для проца нет. Интересен комментарий автора.

    Заранее спасибо!
    "Широкая сцена и направленный провод – горе в семье"

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

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

    Цитата Сообщение от Analog Посмотреть сообщение
    почему напряжение +3V1_BUS =3,1 Вольт, а не стандартные 3,3 В? С номиналами делителя ОС стаба так получилось?
    Это сделано для минимизации потребления от USB шины, т.к. в питании используется step-down стабилизатор. Минимальное напряжение питания usb моста в PIC32MZ 3В, поэтому задал немного больше, с запасом.

    Цитата Сообщение от Analog Посмотреть сообщение
    И второе, в цепи питания гальваноразвязки применены бусины, а для проца нет.
    Бусины именно в гальвано-развязке на всякий случай, из того соображения, что там очень высокая частота несущей (СВЧ диапазон). Измериловкой помехи я не смотрел, это больше для самоуспокоения.
    Последний раз редактировалось dortonyan; 03.04.2023 в 19:01.

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

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


    Offтопик:
    Вопрос, конечно, риторический, но почему производители чипов, если уже есть USB, не может сделать так - подключил платку по USB к ПК и сделал, как надо в ПО с нормальным GUI. Неважно, XMOS, CM66xx, PIC32 и.т.д. Тоже самое в отношении DAC, D-Class - вместо I2C - USB. Действительно - XXI в уже.

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

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


    Offтопик:
    У XMOS был такой чип, с готовой прошивкой внутри.

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

Страница 2 из 16 Первая 123412 ... Последняя

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

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

Ваши права

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