Страница 8 из 33 Первая ... 67891018 ... Последняя
Показано с 141 по 160 из 651

Тема: Дешевый USB transport (для саморазвития)?

  1. #1 Показать/скрыть первое сообщение.
    Старый знакомый
    Автор темы
    Аватар для antonluba
    Регистрация
    12.12.2014
    Адрес
    Сочи, Коломна
    Возраст
    45
    Сообщений
    776

    По умолчанию Дешевый USB transport (для саморазвития)?

    Идея такая: берется STM32F4xx. У него есть USB и I2S. Проц и USB тактируется от HSE - кварц на необходимое кол-во МГц+PLL. Через USB в асинхронном режиме выводится аудио поток.
    Для I2S вариантов тактирования два: от PLL с соответствующим снижением качества или от ЦАПа на специальный вход модуля I2S.
    Модуль I2S поддерживает форматы Philips, RJ, LJ, PCM, 16 или 32 бит до 96 192 кГц. (Вы это всё знаете, конечно).
    Теоретически, можно получить универсальный вывод (ввод тоже) I2S через USB (для многих, думаю, достаточного уровня).

    Лично у меня сложности следующие:
    1. Исходники асинхронного вывода (и ввода) по USB.
    2. Получение от хоста параметров потока и переключение частот.
    3. Аппаратная реализация работы двух генераторов на один вход.
    4. Внутренняя синхронизация между I2S и USB.
    Ну и еще мелочей всяких.

    Набросайте ссылок по теме, пожалуйста.

    P.S. Audio Widget я конечно, скачал, но, честно говоря, разобраться пока не смог.
    Последний раз редактировалось antonluba; 25.10.2015 в 21:47.

  2. #141
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Немного подправил
    Вложения Вложения

  3. #142
    Частый гость Аватар для romanetz
    Регистрация
    28.03.2015
    Сообщений
    153

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    HY-STM32F4xxCore144, USB3300 от waveshare
    Если есть опыт самостоятельного изготовления качественных плат, можно все сделать намного дешевле, а не покупать отладки. У меня они уже давно лежали просто, а с лутом совсем все печально.
    Вроде к стоногому STM32F4xxVxx тоже ULPI подключить можно, там только PA, PB, PC порты используются

  4. #143
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Цитата Сообщение от romanetz Посмотреть сообщение
    с лутом совсем все печально.
    Попробуйте фоторезист, не пожалеете.

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

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Цитата Сообщение от romanetz Посмотреть сообщение
    Вроде к стоногому STM32F4xxVxx тоже ULPI подключить можно
    Конечно можно, у меня в Dr.Hyde он к нему и был подключен.
    Цитата Сообщение от romanetz Посмотреть сообщение
    а с лутом совсем все печально.
    ЛУТом делать печатку под ULPI?! С контролем импеданса да под такой корпус, в каком USB PHY ? Орригинально!
    Это разве что кому-то жалко 15 баксов на 2-х сторонку с металлизицией...
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  6. #145
    Частый гость Аватар для romanetz
    Регистрация
    28.03.2015
    Сообщений
    153

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Это где ж за день сделают двухсторонку за $15 с металлизацией? С ошпарка за эту сумму плата через 1,5 месяца приедет

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

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Цитата Сообщение от romanetz Посмотреть сообщение
    Это где ж за день сделают двухсторонку за $15 с металлизацией?
    За день - нигде, а так - в Китае, разумеется. И в отличие от ЛУТа - она будет работать
    Цитата Сообщение от romanetz Посмотреть сообщение
    С ошпарка за эту сумму плата через 1,5 месяца приедет
    Ну во 1-х не 1.5 месяца а 3 недели, иногда 4 (а если не жалко еще тридцатник, на DHL, то через неделю), во 2-х - ты куда-то спешишь?
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  8. #147
    Частый гость Аватар для romanetz
    Регистрация
    28.03.2015
    Сообщений
    153

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    С ULPI пока не все гладко, почему-то обмен порою зависает и "Unknown device" в списке. Что-то с времянками, похоже.
    Хотя часть дескрипторов при этом отдается.
    Стопроцентно выяснил, что проблема не программная. Потому что иногда в wireshark*e вижу совершенно корректный обмен и изохронные данные идут, т.е. по 0-й конечной точке все проходит.
    Последний раз редактировалось romanetz; 18.10.2016 в 16:53.

  9. #148
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Ну вот, вроде и готова альтернатива Flamenco на STM32, при исчезновении пакетов OUT на выходе идут нули, обратную связь переделал на манер последнего Audio widget :
    USB_audio_sin_2.rar
    Можно добавить, в соответствующих пунктах, вывод индикации частоты FS и разрядности данных. Проект для Coocox и STM32F4DISCOVERY для внешних генераторов с частотами 22.5792 и 24.576.
    Может кто потестит, вдруг вылезут какие баги.

  10. #149
    Частый гость Аватар для romanetz
    Регистрация
    28.03.2015
    Сообщений
    153

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Я внаглую от PLLI2S затактировал. Сейчас проверять буду.
    Код:
    void SetI2SMCLK(uint32_t freq) {	uint32_t I2SFREQ[] = { 44100, 48000, 88200, 96000 , 176400, 192000  };
    	uint32_t PLLI2SN[] = { 271, 295, 271, 295, 361, 393 };
    	uint32_t PLLI2SR[] = { 6, 4, 3, 2, 2,2  };
    	/*
    	 uint32_t I2SDIV[]={6,13,3,3,3,9,3};
    	 uint32_t I2SODD[]={0,1,1,1,1,0};
    	 */
    	uint32_t I2SDIV[] = {2,3,2,3,2,2 };
    	uint32_t I2SODD[] = {0,0,0,0,0,0 };
    
    
    	uint8_t index = 0;
    	while ((freq != I2SFREQ[index]) && index < 7)
    		index++;
    	if (index==6) return;
    
    
    	/******************************************************************************/
    	/*                        I2S clock configuration                             */
    	/******************************************************************************/
    //External clock is used as i2s master clk
    	RCC->CR &= ~((uint32_t)RCC_CR_PLLI2SON);
    
    
    	/* Configure PLLI2S */
    	RCC->PLLI2SCFGR = (PLLI2SN[index] << 6) | (PLLI2SR[index] << 28);
    //	/* Enable PLLI2S */
    	RCC->CR |= ((uint32_t)RCC_CR_PLLI2SON);
    	/* Wait till PLLI2S is ready */
    	while((RCC->CR & RCC_CR_PLLI2SRDY) == 0)
    	 {
    	 }
    	/* PLLI2S clock used as I2S clock source */
    	RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S);//внутренний AUDIO CLOCK
    	//RCC->CFGR |= RCC_CFGR_I2SSRC;
    
    
    	/* Write to SPIx I2SPR register the computed value */
    	SPI3->I2SPR = (uint16_t)((uint16_t) I2SDIV[index] | (uint16_t)((I2SODD[index] << 8)) | (uint16_t)(I2S_MCLKOutput_Enable));
    
    
    }
    Кстати, а как пингвина заставить играть по дефолту в 24-х битах? Я дамп обмена посмотрел, по умолчанию выбирается alt_setting 1 с 16-ю битами.
    Без железа, связанного с измерением напряжения, виснет наглухо. Пока эту строчку закомментировал.
    Не могу понять, почему семерка упорно игнорирует режим 88,2/24
    Последний раз редактировалось romanetz; 20.10.2016 в 21:01.

  11. #150
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Цитата Сообщение от romanetz Посмотреть сообщение
    Я внаглую от PLLI2S затактировал.
    От PLLI2S не интересно, там нет перерыва в MCLK, в отличие от генераторов с полным погашением питания - а в этот момент (а вернее в момент начала работы другого генератора) и может произойти потеря обратной связи (правда у меня пока за два дня при переключении генераторов сбоя не наблюдалось).
    Цитата Сообщение от romanetz Посмотреть сообщение
    Кстати, а как пингвина заставить играть по дефолту в 24-х битах? Я дамп обмена посмотрел, по умолчанию выбирается alt_setting 1 с 16-ю битами.
    Так измените дескрипторы - в alt_setting 1 установите 24 бит, а в alt_setting 2 - 16 бит, только не вижу в этом необходимости, т.к. для I2S Phillps standard все равно выводятся все 24 бита, а выбор разрядности происходит до начала вывода аудио данных.

    ---------- Сообщение добавлено 21:22 ---------- Предыдущее сообщение было 20:55 ----------

    Цитата Сообщение от romanetz Посмотреть сообщение
    Без железа, связанного с измерением напряжения, виснет наглухо.
    Забыл в выложенном проекте убрать, это для портативного ЦАП контроль напряжения Li-pol аккумулятора, к стати на DISCOVERY у меня почему то тоже висло(совсем забыл про это - подправлю и выложу), а в самодельном девайсе работает нормально.
    Цитата Сообщение от romanetz Посмотреть сообщение
    Не могу понять, почему семерка упорно игнорирует режим 88,2/24
    У меня то же самое, наверное в драйверах Windows7 такой режим не прописан.

    ---------- Сообщение добавлено 21:40 ---------- Предыдущее сообщение было 21:22 ----------

    Исправил, убрал измерение напряжения аккумулятора, теперь и на DISCOVERY не виснет :
    USB_audio_sin_2.rar
    Последний раз редактировалось vladsan75; 20.10.2016 в 21:32.

  12. #151
    Частый гость Аватар для romanetz
    Регистрация
    28.03.2015
    Сообщений
    153

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Что-то странное там с инитом I2S, я эти две функции (Init и Play) взял из прошлой версии проекта. Все работает нормально. Добавлю туда еще режим 192/16 (мне надо сигнал до 59 кГц выводить - КСС+RDS)

  13. #152
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Там отличие только в используемом для WCLK выводе, первоначально я использовал РА4, а сейчас РА15(он находится рядом с остальными сигналами), и если у вас провод подключен к РА4, а настроено на РА15 - то конечно играть не будет.

  14. #153
    Частый гость Аватар для romanetz
    Регистрация
    28.03.2015
    Сообщений
    153

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Спасибо! Там незаметно, я бы долго копал. Поправил, заиграло. Но в STMstudio вижу, что gap медленно, но незаметно ползет вверх или вниз. В правильно работающей системе gap и FB_RATE - практически постоянные значение с редкими отклонениями вверх или вниз, чтобы компенсировать неточность алгоритма в драйвере.
    И немного непонятно с установкой частоты воспроизведения...
    Последний раз редактировалось romanetz; 21.10.2016 в 17:37.

  15. #154
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Я спрашивал у Nikkov (как у одного из участников проекта Audio widget) на счет обратной связи, так оказалось что Windows не воспринимает небольшие изменения значения FB_RATE и было экспериментально установлено минимальное значение, на которое оно должно скачком изменяться. Поэтому (из за небольших различий в частотах) gap увеличивается до определенного значения и скачком изменяется значение FB_RATE, потом следует обратный процесс - gap гуляет туда-сюда, это нормальная работа обратной связи и при достаточной величине буфера никаких проблем не вызывает. А что вам не понятно с установкой частоты?
    Последний раз редактировалось vladsan75; 21.10.2016 в 19:52.

  16. #155
    Частый гость Аватар для ntechmen
    Регистрация
    03.03.2012
    Адрес
    Кемерово
    Сообщений
    249

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    vladsan75, смотрел ваш код, хочу попробовать ваш код под 205 запустить, (просто 407-го пока нет под рукой).
    Поясните пожалуйста более подробно механизм синхронизации SOF по буферу, в статье от romanetz речь идет о применение таймера для расчета расхождений частот и синхронизации, как я понял у вас другой подход.

    p.s
    Респект вам romanetz и vladsan75 за проделанную работу и выложенные исходники, многое стало проясняться.
    В конечном итоге меня также интересуют вопросы и есть необходимость ввода данных с АЦП как со стандартного устройства, к сожалению нет такого количества времени, чтобы выделить на изучение вопросов связанных с usb стеком и uac.

  17. #156
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Цитата Сообщение от ntechmen Посмотреть сообщение
    Поясните пожалуйста более подробно механизм синхронизации SOF по буферу
    Измерение gap производится каждые 8мс (запрос обратной связи каждые 32мс). num_remaining - количество 16 битных слов до конца буфера, с которого идет считывание. spk_index - количество 16 битных слов, записанных в буфер. В основном (скажем так в среднем положении) запись идет в один буфер, а считывание с другого. При равенстве скорости записи и скорости считывания gap не изменяет своего значения(gap = old_gap) и в идеале gap = AUDIO_BUFFER_SIZE. Если gap растет и превышает определенное значение - значит записывается меньше данных, чем считывается и мы увеличиваем FB_RATE (запрашиваем у хоста больше байт). Если gap уменьшается и становится меньше определенного значения - уменьшаем FB_RATE. В строках с 663 по 673 gap вычисляется для случая, когда либо считывание подошло к завершению, либо запись и дальше и считывание и запись идут с одного буфера.

    ---------- Сообщение добавлено 22:44 ---------- Предыдущее сообщение было 21:29 ----------

    Цитата Сообщение от ntechmen Посмотреть сообщение
    смотрел ваш код
    Ну он не совсем мой, т.е. не полностью - что то смотрел как делает romanetz, обратную связь стибрил с последней реализации Audio widget, там же подсмотрел как происходит выбор частот(немного адаптировал под свое железо), ну и немного добавил своего, в общем сборная солянка.

    ---------- Сообщение добавлено 23:44 ---------- Предыдущее сообщение было 22:44 ----------

    Так как у меня портативный ЦАП, решил понизить SYSCLK до 96МГц для меньшего энергопотребления, итог - 96/24 - полет нормальный.

  18. #157
    Частый гость Аватар для romanetz
    Регистрация
    28.03.2015
    Сообщений
    153

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Нажмите на изображение для увеличения. 

Название:	fb_rate.png 
Просмотров:	557 
Размер:	82.0 Кб 
ID:	276953

    Скрин из STMstudio
    Режим 96/16, USB - устройство по умолчанию, играет музыка из браузера
    Сверху - gap
    Вроде работает, но временами чудит. Разрывы в графике gap (сверху) мне совершенно непонятны

  19. #158
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    Да, странно - большая девиация gap и отсутствие изменений FB_RATE( хотя видно, что gap меняется в достаточно больших пределах и FB_RATE должно изменяться), хотя я еще не замечал артефактов, характерных для потери обратной связи : перескакивания и пропуски. А вы не могли бы замерить вариант со старой обратной связью, где более значимые скачки значения обратной связи, интересно посмотреть на его работу.
    Последний раз редактировалось vladsan75; 22.10.2016 в 12:52.

  20. #159
    Частый гость Аватар для romanetz
    Регистрация
    28.03.2015
    Сообщений
    153

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    FB_RATE меняется нормально, как и задумано, пытаясь выровнять gap, там масштаб разный несколько.
    Вот про скачки в gap - не пойму. При том, что иногда они есть, а иногда их нет. Т.е. график имеет вид пилы с периодом десятки секунд.

  21. #160
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

    По умолчанию Re: Дешевый USB transport (для саморазвития)?

    А каким образом STM Studio в реальном времени считывает данные с микроконтроллера? Просто я помню, что при отладке в кокосе по SWD, чтобы просмотреть переменные, надо поставить контроллер на паузу. Возможно надо использовать другой способ вывода переменных в реальном времени, например по SPI или UART, раз в 8мс при вычислении обратной связи, или раз в 32мс во время запроса данных обратной связи хостом?

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

    Почитал про STM Studio, прикольная штука, надо попробовать тоже.

Страница 8 из 33 Первая ... 67891018 ... Последняя

Метки этой темы

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

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

Ваши права

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