Страница 15 из 16 Первая ... 513141516 Последняя
Показано с 281 по 300 из 305

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

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

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

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

    Цитата Сообщение от DrShteyn Посмотреть сообщение
    Наверное можно обойтись и без USBDMA прерываний если использовать еще один буфер, в котором подготавливаются данные для отправки.
    Да, может быть.
    В прерывании USB можно инициировать загрузку данных в EP5 из промежуточного буфера. И одновременно - загрузку свободным каналом DMA в промежуточный буфер новых данных из циклического буфера.
    Главное чтобы чтение из такого промежуточного буфера было гарантированно раньше записи. Как там DMA модули распределят между собой приоритеты...
    Либо можно сделать два промежуточных буфера и использовать их по очереди: пока из из одного читаются данные в EP5, второй заполняется данными из "ep5buf".
    Последний раз редактировалось dortonyan; 26.09.2024 в 12:24.

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

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

    Цитата Сообщение от l3VGV Посмотреть сообщение
    возможно ещё надо удалить возврат серийного номера(не помню точно)
    Или можно каждый раз при изменении дескрипторов менять серийный номер. При отладке это не должно быть сложно.
    Цитата Сообщение от dortonyan Посмотреть сообщение
    Либо можно сделать два промежуточных буфера и использовать их по очереди: пока из из одного читаются данные в EP5, второй заполняется данными из "ep5buf".
    Иногда бывает аппаратная поддержка двойной буферизации. Если так, то возможно это самый правильный подход. Но надо смотреть нюансы, я с Пиками почти не работал.
    Последний раз редактировалось Meta|_; 26.09.2024 в 17:23.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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

    Цитата Сообщение от Meta|_ Посмотреть сообщение
    Иногда бывает аппаратная поддерживается двойной буферизации.
    У пика в USB модуле есть какая-то двойная буферизация, но за отсутствием мануала по нему как оно там работает - не известно.

    Цитата Сообщение от DrShteyn Посмотреть сообщение
    Наверное можно обойтись и без USBDMA прерываний если использовать еще один буфер, в котором подготавливаются данные для отправки.
    Посмотрел еще раз свой код, наверное все таки так не получится.
    После загрузки данных в USB модуль нужно инициировать их отправку. А узнать - когда завершена загрузка данных, можно только по прерыванию.
    Т.е. обработчик прерывания USB DMA в любом случае нужен. Промежуточный буфер только незначительно сократит частоту вызовов этого обработчика (на единицы процентов).
    Можно конечно попробовать по прерыванию USB сначала инициировать отправку данных, а потом запускать загрузку новых данных в EP5. Но я не уверен что так прокатит.
    Последний раз редактировалось dortonyan; 26.09.2024 в 21:44.

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

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


    Offтопик:
    Цитата Сообщение от dortonyan Посмотреть сообщение
    но за отсутствием мануала по нему
    Ну да, это ж Microchip со всеми этими загонами...
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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

    Цитата Сообщение от Meta|_ Посмотреть сообщение
    Ну да, это ж Microchip со всеми этими загонами...
    Что вообще странно.
    Я мало общался с PIC32 и dSPIC, но для PIC12/16/18 (а я с ними был с начала 90-х) - Микрочиповская документация была чуть ли не лучшая из всех.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    Я мало общался с PIC32 и dSPIC, но для PIC12/16/18 (а я с ними был с начала 90-х) - Микрочиповская документация была чуть ли не лучшая из всех.
    Не, у них и сейчас документация нормальная. По каждому модулю проца, типа SPI, DMA и т.п. есть отдельный мануал с более-менее подробным описанием.
    Это почему-то именно для USB HS модуля ничего нет (как у них в процах с USB FS модулями не знаю, не смотрел). Видимо такое продвижение своего фреймворка...
    Либо есть какие-то касяки в модуле, которые стыдно показывать в документации.

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Можно конечно попробовать по прерыванию USB сначала инициировать отправку данных, а потом запускать загрузку новых данных в EP5. Но я не уверен что так прокатит.
    Кстати, возможно для этого режим двойной буферизации в USB модуле и нужен (он в моем коде включен).
    Но это надо проверять.
    Последний раз редактировалось dortonyan; 27.09.2024 в 12:10.

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

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


    Offтопик:
    Цитата Сообщение от Alex Посмотреть сообщение
    Микрочиповская документация была чуть ли не лучшая из всех
    Повторюсь, с PICами я почти не работал, но был опыт с другими компонентами от Микрочипа, на которые мы со своими жалкими 10к экземпляров в год получить документацию так и не смогли. Пришлось заказывать разработку соответствующего модуля на стороне.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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

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

  10. #289
    Завсегдатай Аватар для l3VGV
    Регистрация
    02.05.2009
    Адрес
    Псков
    Возраст
    43
    Сообщений
    1,020

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


    Offтопик:
    Цитата Сообщение от Alex Посмотреть сообщение
    Микросеми
    Мне понравилось как микрочипы рекламировали на ютубе некоторые детальки этого вот микросеми, даташит на которые не мог получить похоже вообще никто, на форуме пользователи делились приемами реверсинга демо борды и демо софта, рассказывая когда в какой регистр что как пишется при этом сама деталька даже у нас стоит $1 и по описанию крайне приятная.
    Я как сезонный любитель не стал даже лезть, хотя мне оно очень интересно. LX34070, есличо.

    Демоборду купить можно, а описание детальки почитать - нет!

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

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


    Offтопик:
    Цитата Сообщение от l3VGV Посмотреть сообщение
    LX34070, есличо.
    Интересная фиговина. Совершенно непонятно, с чего они там так темнят.
    Может там NDA для чего-то надо.
    Кстати, еще недавно, ESS Technology поступало аналогично - чтобы получить даташит (и все остальное) на АЦП и ЦАПы ES*** нуджно было NDA. Ну я как бы его сделал за полчаса переписки, но все-таки непонятно нафига на такое оно нужно.
    Это-же не HDMI какой-то, где не толко полную докумнетацию, но иеще и чипы так просто не купишь.

    , даташит на которые не мог получить похоже вообще никто,
    Вообще-то там написано:

    "To request the LX34070 Datasheet, please contact Dustin.Tenney@microchip.com or Mark.Smith@microchip.com", так что я думаю, кому оно действительно надо, тот смог.
    И думаю что бОльшая часть тех пользователей, которые делились", скорее всего были из их числа, а не те что реверсом занимались.

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

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

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


    Offтопик:
    Цитата Сообщение от Alex Посмотреть сообщение
    Ну 10К/y это в самом деле не так уж много, хотя и не мало.
    Кому как. Когда-то контактировали с NVidia относительно документации на Tegra - получили ответ, что меньше чем с миллионом в год можно даже не обращаться
    Цитата Сообщение от Alex Посмотреть сообщение
    А то были родные Микрочиповские детали, или что-то из ими купленного, типа Микрела, Микросеми, Атмела и прочих?
    А вот не уверен, не вникал в историю создания тех чипов, но речь о парочке ethernet-свичей разного OSI уровня, программируемых, конечно. NDA сделать не было проблемой, это распространённая практика, но были какие-то более серьёзные препоны. В итоге обратились к дружественному нам подрядчику, у которого необходимые привилегии были.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

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

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


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

  14. #293
    Зарегистрировался Аватар для DrShteyn
    Регистрация
    19.09.2024
    Сообщений
    11

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

    Всем привет. Мои потуги с usb микрофоном продолжаются. Работа девайса: pic32 подключен по spi к ПЛИС, от куда получаю данные с заданной частотой 96кГц. Частотой не могу управлять. Полученный массив pic отправляет по usb. На ПК данные можно прослушать.
    Из-за несовпадений частот плис и usb, происходит фигня, и это понятно. В проектах, которые представлены тут, эта проблема решается управлением частотой опроса кодека. Мне так не получится.
    Узнал, что частоту дискретизации аудио карты можно менять с шагом 1Гц. Возможно это решение моей проблкмы, если частотой можно управлять налету. Вопрос кто знает как переконфигурировать частоту по инициативе pic32?
    Последний раз редактировалось DrShteyn; 02.10.2024 в 07:53.

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

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

    Цитата Сообщение от DrShteyn Посмотреть сообщение
    Мои потуги с usb микрофоном продолжаются. Работа девайса: pic32 подключен по spi к ПЛИС, от куда получаю данные с заданной частотой 96кГц. Частотой не погу управлять. Полученный массив pic отправляет по usb. На ПК данные можно прослушать.
    Из-за несовпадений частот плис и usb, происходит фигня, и это понятно. В проектах, которые представлены тут, эта проблема решается управлением частотой опроса кодека. Мне так не получится.
    Период обмена пакетами данных в USB всегда строго фиксированный: 1мс для FS и 125мкс для HS.
    Скорость потока данных регулируется изменением объема данных в пакете.
    В моем проекте периодически (в прерывании USB DMA) выполняется проверка FIFO буфера, и по его заполнению вычисляется точная ЧД, с которой должен работать хост, чтобы не было рассинхрона.
    Это значение отправляется хосту через отдельный пайп на этой же конечной точке (EP5, только в обратную сторону).
    Для каждого нового пакета хост определяет объем данных, в соответствии с ЧД полученной через обратную связь, обеспечивая таким образом синхронизацию частот.

    Пределы на разбежку частот транспорта и хоста я задал в +/-400 ppm. Расчет задается в хедере usb_PL.h
    Нажмите на изображение для увеличения. 

Название:	изображение_2024-10-01_202213423.png 
Просмотров:	21 
Размер:	9.3 Кб 
ID:	460975
    Если частота тактового генератора ПЛИС кратна 96кГц, с точностью не хуже +/-200..300 ppm, то никаких проблем быть не должно.
    Если же разница превысит эти допуски, то конечно работать не будет, но их при желании можно задать и другие.

  16. #295
    Зарегистрировался Аватар для DrShteyn
    Регистрация
    19.09.2024
    Сообщений
    11

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

    В Вашем коде увидел только обратную связь по EP1.
    _EP1_FeedBack_Data_Send(tFreqLims...).
    EP1 у меня нет, так как pic не используется как динамик, только ep5 доя передачи на ПК.
    Может переделать мне под EP5 в обработчике прерываний USBDMA?

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

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

    Цитата Сообщение от DrShteyn Посмотреть сообщение
    В Вашем коде увидел только обратную связь по EP1.
    _EP1_FeedBack_Data_Send(tFreqLims...).
    EP1 у меня нет, так как pic не используется как динамик, только ep5 доя передачи на ПК.
    Может переделать мне под EP5 в обработчике прерываний USBDMA?
    Вы какой проект смотрите?
    EP1 - это конечная точка для воспроизведения, потому для нее и ОС на эту же точку.
    Для входа АЦП используется только EP5.

    Начинаю припоминать.
    Для данных на вход вообще используется другой режим передачи данных (синхронный вроде), без обратной связи. И в таком режиме объем передаваемых данных в пакете задает транспорт.
    А расчет заполнения fifo используется для расчета объема передаваемых данных, чтобы держать буфер заполненным на половину (или на минимальное заполнение, как-то так).

  18. #297
    Зарегистрировался Аватар для DrShteyn
    Регистрация
    19.09.2024
    Сообщений
    11

    Грустно Re: Open-Source USB транспорт на PIC32MZ

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

    Начинаю припоминать.
    Для данных на вход вообще используется другой режим передачи данных (синхронный вроде), без обратной связи. И в таком режиме объем передаваемых данных в пакете задает транспорт.
    А расчет заполнения fifo используется для расчета объема передаваемых данных, чтобы держать буфер заполненным на половину (или на минимальное заполнение, как-то так).
    Видимо у вас все работало,т.к отдавали данные по ep5, принимали даннные на ep1 и feedback тут же. Коррекция частоты происходила по ep1.
    Подскажите, если использоаать одну ep5 для отправки данных, возможна по этой же контрольной точке управлять коррекцией? Не могу разобраться как это делать и в какой момент

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

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

    Цитата Сообщение от DrShteyn Посмотреть сообщение
    Подскажите, если использоаать одну ep5 для отправки данных, возможна по этой же контрольной точке управлять коррекцией? Не могу разобраться как это делать и в какой момент
    Так я же пишу, что для отправки данных хосту коррекция скорости не требуется, там синхронный режим. Коррекция частоты нужна только для воспроизведения.
    Для приема данных хост сам подстраивает скорость приема под ваши данные.
    Объем данных в пакете меняется только потому, что частоту пакетов USB изменить нельзя, можно только менять объем данных в пакете. А скорость датарейта канала USB не кратна скорости датарейта от АЦП.
    По крайней мере для 44,1к частоты дискретизации она точно не кратна. Для 96к - надо считать, но я делал поддержку всех ЧД.
    Нельзя в один пакет поместить 10,25 семпла. Можно либо 10, либо 11. Поэтому если надо 10,25, то каждый четвертый пакет будет содержать 11 семплов, а остальные 10.

    А в чем соб-но проблема? Проект для АЦП некорректно работает? Есть какие-то рассинхроны в звуке?

  20. #299
    Зарегистрировался Аватар для DrShteyn
    Регистрация
    19.09.2024
    Сообщений
    11

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Так я же пишу, что для отправки данных хосту коррекция скорости не требуется, там синхронный режим. Коррекция частоты нужна только для воспроизведения.
    Для приема данных хост сам подстраивает скорость приема под ваши данные.
    Объем данных в пакете меняется только потому, что частоту пакетов USB изменить нельзя, можно только менять объем данных в пакете. А скорость датарейта канала USB не кратна скорости датарейта от АЦП.
    По крайней мере для 44,1к частоты дискретизации она точно не кратна. Для 96к - надо считать, но я делал поддержку всех ЧД.
    Нельзя в один пакет поместить 10,25 семпла. Можно либо 10, либо 11. Поэтому если надо 10,25, то каждый четвертый пакет будет содержать 11 семплов, а остальные 10.

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

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

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

    Цитата Сообщение от DrShteyn Посмотреть сообщение
    Коррекция с помощью изменения обьема данных в кадре не работает.
    А другой коррекции не бывает. Еще раз: в USB интерфейсе частота пакетов строго фиксированная: 8кГц для HS.
    Весь вопрос - как именно выполнять изменение объема данных в пакете.

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

    Вот прямо сейчас попробовал для проекта из шапки вывести звук на ЦАП, потом принять через АЦП. Включил в звуковых устройствах прослушку АЦП: нормальный звук, никаких проблем.
    По спектру тоже артефактов не замечено.
    Последний раз редактировалось dortonyan; 05.10.2024 в 13:29.

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

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

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

Ваши права

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