Страница 13 из 14 Первая ... 311121314 Последняя
Показано с 241 по 260 из 261

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

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

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

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

    Последний проект Сергея пробовали зашить?
    После внесения изменений проект пересобирать не забываете?

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

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

    Думаю стоит попробовать записать 1-2 кгц и поразглядывать в аудио редакторе форму сигнала
    _________________
    Евгений

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

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

    nabiullin, а не пробовали передернуть питание транспорта после того как зашили?
    Если не найдете причину - выложите свой проект, попробую запустить у себя.
    Последний раз редактировалось dortonyan; 04.04.2024 в 17:35.

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

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

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

    прикрепил проект:
    usb_uac2_8ch_output.X_2024_04_03_fifo_clr_fixed.zip

    скрины записанного синуса:
    https://disk.yandex.ru/d/U3mAXbCz9jk2-A
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

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

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

    nabiullin, наверное у час место заколдованное.
    Собрал ваш проект с минимальными правками, запустил у себя, все нормально.
    Может просто приоритет плеера низкий, или буфер в плеере малый?
    Или может что-то в драйвере хоста сбоит (бывает и такое)? Попробуйте удалить устройство полностью из системы. Чтобы винда заново обнаружила и настроила новое устройство.

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

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

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

    разве что с тестовым цапом (pcm5102) транспорт перестал дружить после доработки буфера...
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

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

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

    Цитата Сообщение от nabiullin Посмотреть сообщение
    разве что с тестовым цапом (pcm5102) транспорт перестал дружить после доработки буфера...
    Не, ЦАП здесь каким боком? I2S аппаратный модуль, его работа от внутренней "кухни" проца никак не зависит.
    Сигналы на выходе I2S проверяли?
    Может где-то не на тот пин назначили, или где-то КЗ на плате с другим пином. В общем надо проверять осциллографом все сигналы и частоты.
    Я в своем проекте не просто так вывел мастерклок на выход, а чтобы можно было проверять - правильной ли частотой тактируются SPI модули.

  9. #248
    Новичок Аватар для Adson
    Регистрация
    07.11.2007
    Адрес
    Москва
    Возраст
    57
    Сообщений
    44

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

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

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

    dortonyan,
    прошил Вашу версию с минимальными изменениями (формат I2S, 512Fs) - всё заработало, зацикленность буфера ушла как на Linux (pureOS), так и на Android.
    Спасибо большое!

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

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

    nabiullin, Adson, и вас спасибо за бетта-тестирование.

  11. #250
    Новичок Аватар для Adson
    Регистрация
    07.11.2007
    Адрес
    Москва
    Возраст
    57
    Сообщений
    44

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

    dortonyan,
    Да нам-то за что... А можно спросить - в каких файлах у Вас изменения по этому Fifo буферу? У меня с товарищем есть прошивка (основанная на работах eclipsevl) - там добавлены DSD, Mute в некоторых случаях и ещё кое-какие мелочи, - хочу имплементировать в эту прошивку эти изменения. Понятно, что в среде есть Diff, но быстрее будет если Вы подскажете.

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

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

    Цитата Сообщение от Adson Посмотреть сообщение
    dortonyan,
    Да нам-то за что... А можно спросить - в каких файлах у Вас изменения по этому Fifo буферу? У меня с товарищем есть прошивка (основанная на работах eclipsevl) - там добавлены DSD, Mute в некоторых случаях и ещё кое-какие мелочи, - хочу имплементировать в эту прошивку эти изменения. Понятно, что в среде есть Diff, но быстрее будет если Вы подскажете.
    Я смержду этот апдейт в версию на гитхабе. Вроде бы ничего кроме dma.c/h и не нужно.

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

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

    Да, там только в файле dma добавлен 5-ый канал и нулевая переменная для очистки, и в хедере задание адреса для 5-го канала.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Только не к сабжу, а к контроллеру.
    Наверное можно. Что там надо QSPI?
    Можно даже USB-флешку подключить (может работать USB хостом), просто надо писать соотв. прошивку.
    Т.е. надо отдельную микросхему контроллера SDIO?

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

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

    Цитата Сообщение от Sanny Посмотреть сообщение
    Т.е. надо отдельную микросхему контроллера SDIO?
    Откуда такой вывод?
    Я не вникал в вопрос, но вроде SDIO реализуемо на QSPI интерфейсе.

  16. #255
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    40
    Сообщений
    1,994

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Откуда такой вывод?
    Я не вникал в вопрос, но вроде SDIO реализуемо на QSPI интерфейсе.
    Если скорость не принципиальна, то вроде можно и просто по SPI, без Q. Кажется даже опенсорсная реализация попадалась, но сам не делал.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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

    Цитата Сообщение от Meta|_ Посмотреть сообщение
    Если скорость не принципиальна, то вроде можно и просто по SPI, без Q. Кажется даже опенсорсная реализация попадалась, но сам не делал.
    К сожалению,SPI по скорости не хватит - там поток больше 100 Мбит...Как я понял, если самому делать SDIO то QSPI на шину данных, а на шину управления надо выделять пин и им дёргать карточку.

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

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

    Цитата Сообщение от Sanny Посмотреть сообщение
    .Как я понял, если самому делать SDIO то QSPI на шину данных, а на шину управления надо выделять пин и им дёргать карточку.
    Я бы не стал так делать, если:

    Цитата Сообщение от Sanny Посмотреть сообщение
    там поток больше 100 Мбит
    Лучше взять другой проц (даже вторым), с нормальным SDIO, работающим по 4 бита на 50МГц. (И аккуратно плату разводить!)
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    Я бы не стал так делать, если:



    Лучше взять другой проц (даже вторым), с нормальным SDIO, работающим по 4 бита на 50МГц. (И аккуратно плату разводить!)
    Нажмите на изображение для увеличения. 

Название:	IMG_20240410_112319.jpg 
Просмотров:	21 
Размер:	5.00 Мб 
ID:	452882
    Я его планировал на монтажку запаять,питающие ёмкости сразу на ноги

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

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

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

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    На такой монтажке 4bit 50MHz SDIO не факт что заработает.
    Знаю случаи, когда при кривой разводке он только в 1-битном режиме нормально работал, а в 4-х битном постоянно сыпал ошибки (видимо, из-за т.н. "перекоса фронтов").
    А в варианте использования порта QSPI как четырёхбитную шину на другой проц нормально будет?

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

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

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

Ваши права

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