Страница 4 из 16 Первая ... 2345614 ... Последняя
Показано с 61 по 80 из 309

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

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

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

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

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

Название:	Screenshot_2023-05-06-13-08-47-350_com.miui.gallery.jpg 
Просмотров:	291 
Размер:	169.4 Кб 
ID:	435919  
    Вложения Вложения
    Сергей.

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

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

    dee-jan, выглядит классно, а насколько оправдан вырез под гальваноразвязкой? Когда аналоговые девайсы выпускали AN для АДУМ, в одной из ревизий было рекомендовано выполнить «наложение» земель в соседних слоях, так эмиссия становилась меньше. Соседние полигоны земли образовывали широкополосную емкость.
    Хочу повторить данный транспорт, купил пару PIC32MZ2048ECH144, но в программировании познания околонулевые…
    "Широкая сцена и направленный провод – горе в семье"

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

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

    Вырез а фиг его знает. ) Для красоты скорее.
    Не совсем понял про наложение земель. Это для земли одной половины? Или разных ?
    Сергей.

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

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

    Разных, не могу найти без впн

    ---------- Сообщение добавлено 14:12 ---------- Предыдущее сообщение было 14:10 ----------

    Цитата Сообщение от Analog Посмотреть сообщение
    Разных, не могу найти без впн
    Помню, что говорилось про антенный феффект

    ---------- Сообщение добавлено 14:13 ---------- Предыдущее сообщение было 14:12 ----------

    Две земли образовывали что-то типа диполя, он светил.
    "Широкая сцена и направленный провод – горе в семье"

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

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

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

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

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

    Да, без этой емкости девайсы с адумкой не проходили эмишшнтест. Посмотрите пробником если есть
    "Широкая сцена и направленный провод – горе в семье"

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

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

    В целом я нашел о чем вы. Дипольное излучение между землями. Это в импульсниках так, там ставят Y кондер. чтобы убрать неконтролируемые токи между разными землями. Какая-то емкость такая есть в ДС-ДС 5в-5в, который питает всю АЦП часть.
    Сергей.

  9. #68
    Частый гость Аватар для Кокон
    Регистрация
    12.06.2006
    Адрес
    Минск
    Сообщений
    440

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

    https://github.com/kiffie/usb-spdif

    Как есть.Кому надо - прикрутит.
    Кто сам может - сделает самостоятельно.
    Многие до сих пор желают spdif.

    А вообще на 32 пике, был собран транспорт на sd - отлично в свое время работал.
    И flac и mp3 читал.

    Кстати, не надо сравнивать(приводить примеры) с stm32 и прочими ARM.
    PIC32 - представитель достаточно редкой в наши дни RISC архитектуры MIPS 4K.
    Последний раз редактировалось Кокон; 07.05.2023 в 12:27.

  10. #69
    Зарегистрировался
    Регистрация
    21.07.2023
    Сообщений
    5

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    А по сравнению с кмосом - низкое потребление: порядка 70..80мА максимум.
    а что имелось под кмосом, не могли бы пояснить?

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

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

    Цитата Сообщение от Ilmas Посмотреть сообщение
    а что имелось под кмосом, не могли бы пояснить?
    Процессоры XMOS.

  12. #71
    Зарегистрировался
    Регистрация
    21.07.2023
    Сообщений
    5

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

    Спасибо, за выложенный код! Тихонько сижу вникаю, в частности реализации USB интерфейса. Мне код интересен с точки зрения реализации максимальной скорости передачи. Не заморачивались случайно с оценкой? Для dspic33ep у микрочипа есть шикарные примеры для оценки максимальной скорости передачи. Для pic32 пока, что то нормальных примеров найти не могу.

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

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

    Цитата Сообщение от Ilmas Посмотреть сообщение
    Мне код интересен с точки зрения реализации максимальной скорости передачи.
    ...
    Для dspic33ep у микрочипа есть шикарные примеры для оценки максимальной скорости передачи.
    В каком режиме? В изохроне с обычными эндпойнтами (а high bandwith я в исходниках не встречал), до максимально вохможной скорости USB2 HS там еще очень далеко, в разы.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  14. #73
    Зарегистрировался
    Регистрация
    21.07.2023
    Сообщений
    5

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

    Цитата Сообщение от Alex Посмотреть сообщение
    В каком режиме? В изохроне с обычными эндпойнтами (а high bandwith я в исходниках не встречал), до максимально вохможной скорости USB2 HS там еще очень далеко, в разы.
    За основу взял пример из Microchip Solutions. Device-WInUSB-High Bandwidth Demo. В папке есть готовое приложение под комп для оценки скорости приема передачи. Под МК код абсолютно рабочий, запустился с пол пинка. В исходниках приведен пример для одного и трех эндпоитов в режиме Bulk. ЕМНИП в режиме трех эндпоитов реализуется практически максимальная возможная скорость которую способна обеспечить шина. В целом dsPic33ep оставил очень приятные впечатления.

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

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

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

  16. #75
    Зарегистрировался
    Регистрация
    21.07.2023
    Сообщений
    5

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

    Так вроде и не говорил, что для меня принципиален режим . Мне в принципе нужна высокая скорость, поэтому сижу вникаю

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

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

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

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

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

    Цитата Сообщение от Ilmas Посмотреть сообщение
    Мне код интересен с точки зрения реализации максимальной скорости передачи. Не заморачивались случайно с оценкой?
    Нет, не было надобности.
    В данном проекте транспорт работает с уак2 драйвером, а у него скорость ограничена значением 8 мегабит/сек на конечную точку (используется один дата фрейм из 4-х). В две конечные точки (16 мегабит) точно вытягивает (вход и выход).
    Думаю если передавать все 4 фрейма данных, то будет то же самое, т.к. данные перекачиваются аппаратными DMA модулями. Т.е. по идее как минимум 64 мегабита/сек должен передавать без проблем. Все зависит от реализации периферии вывода данных из пика.
    Простым SPI интерфейсом 64 мегабита из чипа не вывести, если только квадом или параллельным портом, но с ними я не работал.

  19. #78
    Зарегистрировался
    Регистрация
    21.07.2023
    Сообщений
    5

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Нет, не было надобности.
    В данном проекте транспорт работает с уак2 драйвером, а у него скорость ограничена значением 8 мегабит/сек на конечную точку (используется один дата фрейм из 4-х). В две конечные точки (16 мегабит) точно вытягивает (вход и выход).
    Думаю если передавать все 4 фрейма данных, то будет то же самое, т.к. данные перекачиваются аппаратными DMA модулями. Т.е. по идее как минимум 64 мегабита/сек должен передавать без проблем. Все зависит от реализации периферии вывода данных из пика.
    Простым SPI интерфейсом 64 мегабита из чипа не вывести, если только квадом или параллельным портом, но с ними я не работал.
    да прицел у меня на параллельный порт(чтение с NAND-a), 8MБайт/с для него вообще не проблема, поднять там DMA в пинг-понге режиме вообще все будет без затыков. Спасибо!

  20. #79
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    41
    Сообщений
    2,042

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


    Offтопик:
    Цитата Сообщение от Ilmas Посмотреть сообщение
    да прицел у меня на параллельный порт(чтение с NAND-a)
    Не надо использовать голый NAND. Никогда. В малой серии не окупится разработка (wear leveling и пр). В большой окупиться теоретически может, но цена ошибки такова, что всё равно не окупится.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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

    Цитата Сообщение от Ilmas Посмотреть сообщение
    да прицел у меня на параллельный порт(чтение с NAND-a), 8MБайт/с
    Ой, ошибочка вышла.
    Я писал про мегабиты, а считал мегаБайты. Т.е. для мегабит цифры нужно домножить на 8.
    Тогда получается что проверенная скорость потоков у меня 64 мегабита (передача) + 16 мегабит прием. Но прием можно было бы и до 64 поднять так же без проблем. 128 сумарно получается.
    Ну а если еще передавать по 4х1кБт данных за фрейм, то только один пайп обеспечит 256 мегабит скорость.

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

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

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

Ваши права

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