Страница 13 из 33 Первая ... 3111213141523 ... Последняя
Показано с 241 по 260 из 652

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

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

    По умолчанию Дешевый 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. #241
    Частый гость Аватар для vladsan75
    Регистрация
    06.06.2010
    Адрес
    г.Саратов
    Возраст
    49
    Сообщений
    430

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

    Посмотрите в Audio widget, там для UAC2 прописаны все дескрипторы и, скорее всего, используется не одна конечная точка. Скорее всего там нет разделения на правый и левый, просто OUT пакеты конечных точек в кадре следуют один за другим и так же последовательно заносятся в буфер, но как прописать в дескрипторах работу на один терминал двух конечных точек, я не знаю. В принципе, в Audio widget пункты uac1_device_audio_task.c и uac2_device_audio_task.c почти одинаковые, только добавлена передача значения обратной связи другого формата.

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

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

    На HAL в wind8.1 audio подымается в HS, с spl так пока и не получилось запустить с внешним PHY.
    Нажмите на изображение для увеличения. 

Название:	HAL_USB_AUDIO.PNG 
Просмотров:	172 
Размер:	192.9 Кб 
ID:	277930

    UAC1 в HS подымается в windows?

  4. #243
    Частый гость
    Регистрация
    28.03.2015
    Сообщений
    153

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

    Поднимается, но не поет. При том, на кт обратной связи инфа приходит.
    В аудио виджете никто и не пытался режим 192/24 запихивать в UAC1, там только 48/24
    P.S. С виджетом знаком достаточно плотно, прошивку собирал и заливал через AVR dragon, проект перетащил в Atmel Studio 7 для удобства, сам девайс есть в наличии

  5. #244
    Старый знакомый Аватар для tomtit
    Регистрация
    23.06.2009
    Адрес
    пгт.Торонтовка
    Возраст
    66
    Сообщений
    992

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

    Нашел на свалке старый фирменный демо-борд для STM32F407IG с HS PHY от филипса. Переделал проект vladsan под другие GPIO, получилось, работает как-то, но слушать не на чем. Нет ДАКа с I2S.Попробовал проект #208 от romanetz с PHY, но, видимо накосячил с переопределением пинов.Не поднимается и не работает пока. Romanetz, если выложите код с HS, можно попробовать на фирменной плате с HS PHY.Я, кстати прикрутил последний GCC5.4 к COOCOXy 178, все пока в порядке, грузит, дебажит.
    Для обслуживания ОС можно попробовать применить ПИД-регулятор, указатель буфера - это классический датчик уровня воды в сливном бачке.

  6. #245
    Частый гость
    Регистрация
    28.03.2015
    Сообщений
    153

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

    В проекте из #208 уже все есть. В функции USBD_Init поменяйте строку USB_OTG_InitDevSpeed(pdev , 1); на USB_OTG_InitDevSpeed(pdev , 0); В ней принудительно задается скорость для фулспида (1 - FS, 0 - HS). Инит из примеров под STшные отладки вот такой:

    Код:
    RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOH | RCC_AHB1Periph_GPIOI, ENABLE);
     GPIO_PinAFConfig(GPIOA,GPIO_PinSource3, GPIO_AF_OTG2_HS) ; // D0  GPIO_PinAFConfig(GPIOA,GPIO_PinSource5, GPIO_AF_OTG2_HS) ; // CLK  GPIO_PinAFConfig(GPIOB,GPIO_PinSource0, GPIO_AF_OTG2_HS) ; // D1  GPIO_PinAFConfig(GPIOB,GPIO_PinSource1, GPIO_AF_OTG2_HS) ; // D2  GPIO_PinAFConfig(GPIOB,GPIO_PinSource5, GPIO_AF_OTG2_HS) ; // D7  GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_OTG2_HS) ; // D3  GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_OTG2_HS) ; // D4  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_OTG2_HS) ; // D5  GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_HS) ; // D6  GPIO_PinAFConfig(GPIOH,GPIO_PinSource4, GPIO_AF_OTG2_HS) ; // NXT  GPIO_PinAFConfig(GPIOI,GPIO_PinSource11,GPIO_AF_OTG2_HS) ; // DIR  GPIO_PinAFConfig(GPIOC,GPIO_PinSource0, GPIO_AF_OTG2_HS) ; // STP
     // CLK
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ; 
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
     GPIO_Init(GPIOA, &GPIO_InitStructure); 
     // D0
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3  ; 
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
     GPIO_Init(GPIOA, &GPIO_InitStructure); 
     // D1 D2 D3 D4 D5 D6 D7
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1  | GPIO_Pin_5 | GPIO_Pin_10 | GPIO_Pin_11| GPIO_Pin_12 | GPIO_Pin_13 ;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
    GPIO_Init(GPIOB, &GPIO_InitStructure); 
    // STP
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0  ;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_Init(GPIOC, &GPIO_InitStructure); 
    //NXT 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_Init(GPIOH, &GPIO_InitStructure); 
    //DIR
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_Init(GPIOI, &GPIO_InitStructure); 
    RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS | RCC_AHB1Periph_OTG_HS_ULPI, ENABLE) ;
    P.S. До чего же паскудно на этом форуме код вставляется, все форматирование гробит

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

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

    Цитата Сообщение от tomtit Посмотреть сообщение
    работает как-то
    Ну, у меня последний вариант (пост 237) работает как положено (смотрел в STM Studio) : гонял длительное время, переключал по многу раз с 16/44 на 24/96 и наоборот - gap возвращается в среднее положение, а при сильном разгоне обратной связи - она притормаживается.
    Цитата Сообщение от tomtit Посмотреть сообщение
    Для обслуживания ОС можно попробовать применить ПИД-регулятор, указатель буфера - это классический датчик уровня воды в сливном бачке.
    Только учтите время реакции хоста на изменение величины обратной связи и, как выяснили участники проекта Audio widget, есть минимальное значение приращения FB_RATE, на которое реагирует аудиодрайвер windows.

  8. #247
    Частый гость
    Регистрация
    28.03.2015
    Сообщений
    153

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

    Интегральная составляющая там не нужна особо, т.к. из-за наличия зоны нечувствительности у драйвера все равно будет минимальная ошибка, а вот таймер2 в качестве guess value работает достойно, остается обратную связь подправлять лишь чуть-чуть.

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

    Можно и самому увидеть, отключить вычисление обратной связи, только ее передачу в хост оставить и в STMstudio переменную крутить и смотреть на gap

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

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

    Если принять, что у драйвера есть зона нечувствительности к малым изменениям значения обратной связи и в качестве FB_RATE использовать только значение счетного регистра TIM2(разумеется сдвинутое на несколько разрядов влево, в зависимости от MCLK), то при небольшом отклонении частоты кварцевого генератора от частоты хоста, без контроля состояния буфера - в конце концов произойдет либо опустошение, либо переполнение буфера. Но если драйвер чувствителен даже к очень мелким изменениям и будет изредка изменять количество передаваемых байт, то, конечно можно вычисление обратной связи упростить до безобразия(но подозреваю, что все не так просто).
    Последний раз редактировалось vladsan75; 03.11.2016 в 15:33.

  10. #249
    Частый гость
    Регистрация
    28.03.2015
    Сообщений
    153

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

    Захват значения таймера TIM2.CCR1 нужно дополнить аппаратным сбросом его. Что дает недобор. Контроль заполнения буфера дает небольшую коррекцию, которая недобор компенсирует.

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

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

    Цитата Сообщение от romanetz Посмотреть сообщение
    Захват значения таймера TIM2.CCR1 нужно дополнить аппаратным сбросом его. Что дает недобор.
    Сейчас вообще не понял, какой недобор? Ведь, например, при частоте ровно 12288 и сдвиге на 6 влево получаем 48 ровно в формате 10.14.

  12. #251
    Частый гость
    Регистрация
    28.03.2015
    Сообщений
    153

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

    Если реальный период 12288,4...? А мы его сбрасываем

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

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

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

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

    Ну, в общем, сделайте свой вариант обратной связи на все частоты и выкладывайте - будет интересно посмотреть. Только проверьте многократным и частым переключением с 16/44 на 24/96 и наоборот, чтобы не было потери обратной связи и переполнения, или опустошения буфера.

  14. #253
    Старый знакомый Аватар для tomtit
    Регистрация
    23.06.2009
    Адрес
    пгт.Торонтовка
    Возраст
    66
    Сообщений
    992

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

    romanetz,
    Спасибо, ваша версия заработала на ST-шной демо борде с ULPI , но только на FS.
    На HS Foobar пытается выводить, но оранжевый LED не горит и UP/DN не мигает.

    Заинтересовался FPGA корой для USB. Нагуглил переходник в ULPI от Vad Rulezz.
    Пропустил через транслятор ВХДЛ->Верилог, и чуть причесал,
    если будет время и желание, можете проверить.

    ulpi_port_v.txt

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

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


    Offтопик:
    Кстати, та проблема, о которой я писал в #231 ( https://forum.vegalab.ru/showthread....=1#post2264203 ) решилась самым неожиданным образом - увеличением heap. Стояло 0х200 по дефолту, увеличили вдвое и все заработало.
    Так что, ни отсутствие резисторов в шине ULPI, ни виасы на D+/D-, ни пенек на защите - были невиновны. Как я и предполагал, дело не в железе. О нем подумалось только потому, что та-же программа, скопилированная для 746-го, на фирменной эваборде работала, а на нашей с 767 - нет.
    Может кому пригодится.
    Последний раз редактировалось Alex; 04.11.2016 в 10:48.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от tomtit Посмотреть сообщение
    оранжевый LED не горит
    Оранжевый светодиод не горит, если отсутствуют пакеты OUT(вставил его специально для проверки).

  17. #256
    Частый гость
    Регистрация
    28.03.2015
    Сообщений
    153

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

    Дамп временного отрезка в 1 мсек с ULPI подскажет, куда копать. Либо там из-за HS режима PIDы меняются, либо там вообще ничего нет, либо не то, что ожидает увидеть там проц, нужно сравнить времянки с режимом FS. У меня пока только вариант через внешнюю (по отношению к плате с стм) плисину захватывать сигналы, но смущает, что подключение внесет дополнительную емкость.

  18. #257
    Старый знакомый Аватар для tomtit
    Регистрация
    23.06.2009
    Адрес
    пгт.Торонтовка
    Возраст
    66
    Сообщений
    992

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

    К сожалению не было времени подключить какой-нибудь ДАК.Но, что интересно, Foobar выводит 192К 24б без сообщений об ошибках.Лампочки тоже мигают нормально. Я могу обьяснить это только тем,что Win7, по-видимому, автоматически ресемплит все в 48/44К.

  19. #258
    Частый гость
    Регистрация
    28.03.2015
    Сообщений
    153

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

    Foobar честно переключает частоты, если в нем самом не включен ресэмплер и D.U.T. (device under test) не выбран в системе как устройство по умолчанию

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

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

    А осциллографом глянуть тот же самый WS? Сразу станет понятно, что выводит сама STM32.

  21. #260
    Старый знакомый Аватар для tomtit
    Регистрация
    23.06.2009
    Адрес
    пгт.Торонтовка
    Возраст
    66
    Сообщений
    992

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

    Достал с пыльной полки скоп, глянул - ничего не выводится, I2S молчит, нет ни SCK ни SD, ни WS. Поставил бреакпойнты на все подозрительные места - все инициализации и установки частот проходит, ничего не пропускает. Думаю, что за чертовщина, может другой I2S порт используется на моей плате ?

    Foobar то честно работает, но USB_AUDIO драивер, возможно оснащен ненавязчивым автоматическим даунсемплером.

    P.S
    Разобрался, на моей плате I2S подключен к SPI2.
    Поменял инициализацию SPI3->SPI2, скорректировал базовый адрес DMA, но не все заработало, что-то упустил. Кто-нибудь подсказать может ?
    Сделал I2S как в исходном варианте (SPI3) - заработало, посмотрел WS.
    Я был прав, Win7 автоматом конвертирует все в 48K, даже если это не устройство по умолчанию. Чуда не случилось, надо делать UAC2.
    Последний раз редактировалось tomtit; 06.11.2016 в 07:19.

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

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

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

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

Ваши права

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