Страница 6 из 14 Первая ... 45678 ... Последняя
Показано с 101 по 120 из 261

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

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

    По умолчанию 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. #101
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,225

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

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Как есть в винде играло нормально, но в макоси заикался звук. Сравнил дескрипторы с аманеро, поправил что казалось логичным, угадал.
    Но все равно лучше доработать запрос ЧД как в проекте под линукс. Более универсально.

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    4 микрофрейма - маловато.
    Понятно, мак не имею, не тестил.
    А на винде вроде больше 4-х не работало. Надо перепроверять на конкретной оси, т.к. работа хостов не полностью соответствует спецификации.

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

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Неприятно, но решаемо.
    Задать фиксированную частоту для проца и все (вырезать функционал перестройки системной частоты). Для вывода двух каналов можно по минимуму - 60МГц. Для многоканального вывода хватает 160МГц.

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

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Но все равно лучше доработать запрос ЧД как в проекте под линукс. Более универсально.
    Это сделано, до этого устройство в макоси не определялось совсем.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    А на винде вроде больше 4-х не работало. Надо перепроверять на конкретной оси, т.к. работа хостов не полностью соответствует спецификации.
    Работает, проверил на двух лэптопах на win10, позже проверю на win11.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    А в чем здесь проблема? Регулировку громкости не добавлял, просто потому что без надобности.
    На маке совсем нельзя регулировать громкость. На винде микшер работает нормально.

  4. #103
    Новичок Аватар для DmitriyCh
    Регистрация
    08.02.2022
    Адрес
    Казань
    Возраст
    47
    Сообщений
    35

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Проект делался для личных нужд, поэтому публикуется как есть, в том виде как сейчас зашит в моем транспорте.
    Здравствуйте.
    Если я правильно понимаю, то одна из прелестей uac2 это возможность работы в асинхронном режиме.
    Т.е. device в I2S данные выдает от своего тактового генератора. А для обратной связи с хостом используется отдельная конечная точка, по которой девайс
    корректирует объем передаваемых данных.
    А где определяется, что устройство должно работать в асинхронном режиме ? В дескрипторе каком-то ? А в каком именно ?

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

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

    UAC2 от UAC1 отличается только большей скорстью передачи данных. UAC2 использует режим USB HS 480 мегабит, UAC1 - USB FS 12 мегабит.
    Ну и описание дескрипторов у них отличается.
    А асинхронный режим есть у обоих, задается да - в дескрипторах. Где именно уже не вспомню, давно проектом не занимался.
    Читайте спецификации USB Audio2.0, там все описано.

  6. #105
    Новичок Аватар для DmitriyCh
    Регистрация
    08.02.2022
    Адрес
    Казань
    Возраст
    47
    Сообщений
    35

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    UAC2 от UAC1 отличается только большей скоростью передачи данных.
    Понятно.

  7. #106
    Новичок Аватар для DmitriyCh
    Регистрация
    08.02.2022
    Адрес
    Казань
    Возраст
    47
    Сообщений
    35

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

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

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

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

    Цитата Сообщение от DmitriyCh Посмотреть сообщение
    А в вашем проекте этот режим реализован ?
    Само-собой, а как еще? На схеме же виден вход внешнего тактирования.
    Асинхронный изохронный режим с явной обратной связью. Задается в дескрипторах конечной точки.

  9. #108
    Новичок Аватар для DmitriyCh
    Регистрация
    08.02.2022
    Адрес
    Казань
    Возраст
    47
    Сообщений
    35

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Само-собой, а как еще?

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

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

    Пару раз писали по поводу исправленной прошивки для UAC2, работающей под Линуксом и Андроидом.
    Выложил свою версию на гитхаб:
    https://github.com/eclipsevl/york_pic32mz_uac2_osfw/

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

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

    Заодно и я поделюсь 8-канальной версией прошивки для 4х4493.
    Все работает ровно, глюков не наблюдается. Заточено под 512fs гены.
    Есть вывод по UART индикации частоты ( своя хотелка). Управление ЦАП нету
    PS. Выше в теме есть трассировка транспорта.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	IMG_20230710_214654.jpg 
Просмотров:	177 
Размер:	755.4 Кб 
ID:	448515  
    Вложения Вложения
    Последний раз редактировалось dee-jan; 23.01.2024 в 16:39.
    Сергей.

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

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

    Цитата Сообщение от dee-jan Посмотреть сообщение
    Заодно и я поделюсь 8-канальной версией прошивки для 4х4493.
    Все работает ровно, глюков не наблюдается. Заточено под 512fs гены.
    Есть вывод по UART индикации частоты ( своя хотелка). Управление ЦАП нету
    PS. Выше в теме есть трассировка транспорта.
    Класс В каких ОС тестировали?
    Мне вот написали что иногда бывают глюки с драйверами WASAPI, но сам я так воспроизвести проблему и не смог.

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

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

    Только в Win.

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Мне вот написали что иногда бывают глюки с драйверами WASAPI, но сам я так воспроизвести проблему и не смог.
    А чо за глюки? Я пока ни в каких режимах касяков не видел. Основной, конешно, KS (WASAPI).
    Сергей.

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

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

    Цитата Сообщение от dee-jan Посмотреть сообщение
    Заодно и я поделюсь 8-канальной версией прошивки для 4х4493.
    Сергей, выглядит классно! Можно с частью схемы обвязки питания 4493 ознакомиться?
    "Широкая сцена и направленный провод – горе в семье"

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

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

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

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

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

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

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

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

    переходи на CT7601, они есть на алике и с исходниками нет проблем
    _________________
    Евгений

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

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

    пишут: "Embeded 8051 controller", фреймворк какой-то есть чтобы запрограммить его?
    Для связи: Skype и почта на моём сайте в профиле.
    С уважением,
    Михаил.

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

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

    keil c51, программатор внешний не нужен, шьётся утилитой
    _________________
    Евгений

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

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

    Цитата Сообщение от maxssau Посмотреть сообщение
    keil c51
    это понятно
    а где фреймворк взять с которым "нет проблем"?
    Для связи: Skype и почта на моём сайте в профиле.
    С уважением,
    Михаил.

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

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

    см. личку
    _________________
    Евгений

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

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

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

Ваши права

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