Страница 5 из 14 Первая ... 34567 ... Последняя
Показано с 81 по 100 из 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. #81
    Частый гость Аватар для LexaryStyle
    Регистрация
    25.07.2006
    Сообщений
    452

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

    Цитата Сообщение от dee-jan Посмотреть сообщение
    Допилил АЦП на базе этого PIC32MZ.
    Все прекрасно работает до 32бит 192кгц ( выше мне нет смысла).
    Отладили с Алексеем заодно работу в Линуксе. Все тоже отлично.
    В архиве прошивка под CS5381, если кому-нить понадобится.
    SDM3 это рабочий модулятор ваш?

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

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


    Offтопик:
    Цитата Сообщение от LexaryStyle Посмотреть сообщение
    SDM3 это рабочий модулятор ваш?
    Не, это я забыл выкинуть из проекта. Код не рабочий, пробный алгоритм, чтобы прикинуть успеет ли проц обсчитать хотя бы простой модулятор. В общем ничего хорошего не получилось.

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

    А рожа красная такая Re: Open-Source USB транспорт на PIC32MZ

    Нарисовал схему и плату по мотивам топика.
    Хочется протестировать жизнеспособность и пригодность транспорта в своих проектах.

    Плата нарисована за один вечер, далека от идеала, но для отладки и запуска, полагаю, будет достаточно.
    Изоляторы использованы ISO7641 (и их китайский аналог CA-IS3741HW от ChipAnalog) так как они есть у меня, но понадобилось поставить 4шт, вместо двух SI8662BB-B-IU - дико дорогих, как в исходной схеме.

    Сама плата и схема в картинках:
    Нажмите на изображение для увеличения. 

Название:	pcb-pic32mz.png 
Просмотров:	194 
Размер:	97.9 Кб 
ID:	441773
    Нажмите на изображение для увеличения. 

Название:	schema-pic32mz.png 
Просмотров:	193 
Размер:	306.2 Кб 
ID:	441774

    И схема в pdf формате.
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

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

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

    nabiullin, рекомендую еще заложить в схему резистор между выходом осциллятора и кварцем (Rs). И шунт Rp.
    У меня кварц туго запускался, лучше для перестраховки иметь вариантов схемы побольше.
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-30_210436198.png 
Просмотров:	133 
Размер:	49.3 Кб 
ID:	441775

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

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

    dortonyan
    благодарю! принято, дополню схему и пп!
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

  7. #86
    Злой Аватар для _Ру_
    Регистрация
    25.05.2015
    Возраст
    41
    Сообщений
    2,038

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

    Цитата Сообщение от nabiullin Посмотреть сообщение
    схема
    Это не схема.

    dortonyan, а всё-таки, на каких выводах дата 1/2/3 ?

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

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

    Цитата Сообщение от _Ру_ Посмотреть сообщение
    dortonyan, а всё-таки, на каких выводах дата 1/2/3 ?
    Не помню, на разные пины можно назначать. Смотрите ДШ, там все описано.

    Есть только с I2S (SPI) выходами один нюанс: при включении SPI модуля его битклок SCK автоматом выводится на выходной порт с максимальным приоритетом мутиплексора порта. Поэтому если используется многоканальный вывод, то необходимо отслеживать, чтобы SDO или LRC выходной сигнал не попал на SCK пин.
    Для 8-канального вывода на пинах процессора будет синхронно работать 4 SCK сигнала, но использовать можно только один из них, любой.

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

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

    Я бы ещё посоветовал заложить резисторы на выходах развязок. Недавно сталкивались на аналогичных TI*шных: там фронты очень быстрые, и отражёнка реально приводила к ложным срабатываниям при длине дорожки всего сантиметра четыре.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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

    nabiullin, привет, почему в УГО проца 65 ног нарисовано?)
    ИМХО, соединители J8-J10 лучше использовать на 8-10 контактов, для того, чтобы каждому сигнальному соответствовало два земляных, излучение поменьше будет.

    Meta|_, каким осцем наблюдаете?
    "Широкая сцена и направленный провод – горе в семье"

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

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

    Цитата Сообщение от Analog Посмотреть сообщение
    каким осцем наблюдаете?
    Отражения я наблюдал только в отчёте от подрядчика, разработавшего нам плату, картинки были с keysight infiniium.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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

    а) в УГО проца 65 ног - перепроверил (это земляной на дне корпуса), соединил с GND.
    б) заложить резисторы на выходах развязок - добавлю
    в) соединители J8-J10 лучше использовать на 8-10 контактов - про доп. земли забыл... добавлю.

    Собственно изображение пп и выложил, что бы наблюдательный свежий взгляд форумчан увидел недочеты, благодарю, что пишете.
    Проект отладочный, версия первая, ошибки неизбежны.
    Последний раз редактировалось nabiullin; 06.10.2023 в 20:30. Причина: дополнение
    система в авто:
    процессор AudioBerry DSP1 -> усь Alpine MRP f900 -> ас Bewith Accurate 2 + саб Pioneer ODR TS2

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

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

    вот моя версия трассировки пика для 4 ЦАПов. Стабилизатор линейный, пик потребляет мало.
    Вместо кварца для надежности стоит генератор на 12мгц.
    После развязок естественно резисторы.
    С низу под пиком 2 тантала 47мкф.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Снимок экрана (11).jpg 
Просмотров:	194 
Размер:	226.4 Кб 
ID:	442101   Нажмите на изображение для увеличения. 

Название:	Снимок экрана (10).jpg 
Просмотров:	163 
Размер:	231.5 Кб 
ID:	442102  
    Сергей.

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

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

    Спасибо большое за конструкцию. Хочу повторить - заказываю чипы. Я верно понимаю, что PIC32MZ2048ECG064 подойдёт вообще без модификаций прошивки - просто можно использовать как есть?

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

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

    Цитата Сообщение от Adson Посмотреть сообщение
    Я верно понимаю, что PIC32MZ2048ECG064 подойдёт вообще без модификаций прошивки - просто можно использовать как есть?
    Можно. Работать должен сходу.
    Но этот проект сделан как исходная точка. Дальше конечно лучше разобраться и "допилить" под свои нужды. Там есть что поправить по мелочам.

    Кстати, на EF процессоре у Сергея (dee-jan) возник касяк со слышимыми артефактами при переключении треков.
    В чем там дело я не разбирался, у меня пока что рабочая плата только с ECH процессором. Кто будет повторять имейте ввиду: возможно под EF процессор придется еще что-то дорабатывать.

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

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

    Запаял себе EFG проц для проверки, все хорошо. Дело не в транспорте.
    Работает сходу как и было, только в файле system.c надо поправить отключение неиспользуемой периферии, т.к. она у процессоров с разными индексами отличается.
    Ну и выяснилось, что для EF процессоров 3-х секундная задержка перед включением USB-моста не требуется (видимо в новых сериях пиков исправили данный фичебаг).

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Запаял себе EFG проц для проверки, все хорошо.
    Спасибо большое за информацию. Простите моё занудство, - я верно понимаю, что Pickit3 тоже можно прошить, в т.ч. процессор с памятью 1024 и 2028? (на форуме нашел упоминание, что больше 512 в него прошивка не влезает). Snap тоже недёшев по нышешним временам...

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

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

    Цитата Сообщение от Adson Посмотреть сообщение
    я верно понимаю, что Pickit3 тоже можно прошить, в т.ч. процессор с памятью 1024 и 2028? (на форуме нашел упоминание, что больше 512 в него прошивка не влезает)
    Я уже писал, что сам пробовал шить 3-им пиккитом. Кстати, им же пользуется Сергей (dee-jan). Но отлаживаться им конечно неудобно: тормозит и допускает всего одну КТ.
    На счет памяти - это наверное имеется ввиду используемый объем памяти программы, а не объем памяти чипа. Для данного проекта это всего порядка 2..3 десятков кБт.

    Цитата Сообщение от Adson Посмотреть сообщение
    Snap тоже недёшев по нышешним временам...
    Да, со времени когда я покупал подорожал почти вдвое.

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

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

    Долго хотел попробовать, пару недель назад за выходные наконец-то нарисовал схему/пп в известном форм-факторе и заказал сразу со сборкой (кроме мк и генов, которых не было в наличии).
    Вчера получил, дособрал, пересобрал прошивку под свой МК и схему. Под виндой завелся без проблем, макось аудио устройство не видит (но видит CDC), под линуксом еще не пробовал.

    Видел здесь проект отлаженный под линукс, попробую его и посмотреть что скажет макось. Может кто-то уже пробовал?

    Спасибо за проект!
    Нажмите на изображение для увеличения. 

Название:	photo_2023-11-16_09-58-26.jpg 
Просмотров:	144 
Размер:	132.9 Кб 
ID:	444041

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

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

    eclipsevl, с почином!

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Видел здесь проект отлаженный под линукс, попробую его и посмотреть что скажет макось. Может кто-то уже пробовал?
    Под линуксом просто ЧД, запрашиваемая хостом, должна передаваться в другом формате. Перепишите отработку команды запроса ЧД как в том проекте Сергея и все должно заработать.

    Ну и в проекте из шапки щелчки при смене ЧД могут доставлять неудобства. В основном из-за переключения тактовой частоты.
    Если многоканальный режим не нужен, то управление частотой можно "выпилить" из проекта, задать например фиксировано 60МГц. Уберутся щелчки и упростится проект.

    P.S.
    Касательно самой платы, лично я бы транспорт делал в минималистском исполнении: без генераторов и развязки, как у болгар.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    eclipsevl, с почином!
    Спасибо!

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

    Endpoint Descriptor:
    ------------------------------
    0x07 bLength
    0x05 bDescriptorType
    0x81 bEndpointAddress (IN endpoint 1)
    0x11 bmAttributes (Transfer: Isochronous / Synch: None / Usage: Feedback)
    0x0004 wMaxPacketSize (1 x 4 bytes)
    0x03 bInterval (4 microframes)

    4 микрофрейма - маловато. Полагаю что есть еще проблемы в дескрипторах. Например, нет возможности регулировки громкости.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Ну и в проекте из шапки щелчки при смене ЧД могут доставлять неудобства. В основном из-за переключения тактовой частоты.
    Если многоканальный режим не нужен, то управление частотой можно "выпилить" из проекта, задать например фиксировано 60МГц. Уберутся щелчки и упростится проект.
    Неприятно, но решаемо.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    P.S.
    Касательно самой платы, лично я бы транспорт делал в минималистском исполнении: без генераторов и развязки, как у болгар.
    Я думал о подобном, сделать маленькие модули для интеграции. Есть пара идей для этого, но нужно будет довести прошивку.
    Сейчас выбрал такой форм-фактор исключительно для удобства отладки и экспериментов.

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

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

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

Ваши права

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