Показано с 1 по 19 из 19

Тема: USB транспорт на XMOS

  1. #1
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию USB транспорт на XMOS

    Добрый день!

    Собрал себе USB транспорт на процессоре XMOS XUF 208, схему прилагаю. Это первая отладочная плата, поэтому могут быть очевидные ошибки.

    Платы:

    Скрытый текст


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

Название:	SAM_0581.JPG 
Просмотров:	771 
Размер:	398.0 Кб 
ID:	344530 Нажмите на изображение для увеличения. 

Название:	SAM_0585.JPG 
Просмотров:	610 
Размер:	660.6 Кб 
ID:	344529
    [свернуть]


    Актуальная схема:

    Скрытый текст


    print 1.pdf

    print 2.pdf
    [свернуть]


    Изоляторы Si8640 и Si8662. Тактирование от платы ЦАП/АЦП, питание - первичный AMS1117-5.0, далее DC-DC на 3.3 В и DC-DC на 1 В для питания ядра. Все схемы включения по даташитам. 1 линия ввода, 1 линия вывода. Питание Self Power, т.е. не от USB.

    SDK 6.15.2rc1.

    Возможности:

    Ввод - вывод PCM 16-32 бита, 44.1-384 кГц, 2 линии ввода/вывода (стерео вход + стерео выход)
    Вывод DSD: Win - DSD DoP 64-128, Linux: DSD native 64-256.
    8 линий GPIO с возможностью установки изоляторов Si864x.
    Так же на плате есть место под изолятор ADUM1250, софт для работы I2C пока не готов. Есть дополнительный не изолированный разъем I2C для подключения периферии (дисплей, кнопки, EEPROM и т.п.).

    Известные проблемы:

    Скрытый текст


    Решено:

    Всё прекрасно работает (PCM, DSD, PCM ввод) до того момента, как отправить компьютер в перезагрузку ПРИ проигрывании аудио. Если проигрывание звуков не производится, то всё нормально. Причем если оправлять в перезагрузку в Linux, проявляется всегда, в Windows скорее 50/50, видимо драйвер под Windows хитрее стандартного модуля в Linux. В остальном пока проблем не выявлено.

    Что происходит, если посмотреть отладчик:

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

Название:	xud_manager1.png 
Просмотров:	532 
Размер:	281.9 Кб 
ID:	344531

    Виснет (вернее останавливается, с исключенеим ET_ILLEGAL_RESOURCE в процедуре XUD_Manager) при попытке сбросить enpoint путём отсылки сигнала USB_RESET_TOKEN (0x8) через канал (chanend). Регистр r5=0, т.е. инструкция выглядит так: outct res[0], 0x8 - посыл команды через канал другому процессу, без проверки его доступности/существования (не забываем, у нас многопоточный процессор и должно быть перед этим что то вроде chkct, нужно учитывать гонку процессов). Фрагмент функции XUD_Manager взят из lib_usb и по факту может отличаться в libxud_x200.a из комплекта module_xud.

    Это проблема происходит при наступлении события XUD_UserResume(), т.е. при попытке "разбудить" USB устройство. Пробовал делать код XUD_UserResume() пустым, ничего не меняется, проблема не в нём. Кстати говоря привычных try/catch в языке xc нет, есть библиотека lib_trycatch, которая условно ловит исключения, в данном случае абсолютно бесполезна.

    Описание Outct:

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

Название:	xud_manager2.png 
Просмотров:	436 
Размер:	72.6 Кб 
ID:	344532

    Вся проблема в том, что исходный код lib_usb упакован в модуль module_usb в виде статической библиотеки и парочкой заголовочных файлов, т.е. что то добавить в это место не получится, не переделав эту библиотеку, видимо там они спрятали строчки кода для работы платного MFI, который в принципе не нужен, девайсы для айфона я не планирую делать, да и вообще это хобби. Прикрутить Lib_usb сразу не получается, не переделав тонну кода в module_audio, видимо это сделано не с проста и тянется еще с прошлых версий.

    На форумe xcore.com отсылают изучать дебаггер.

    Кто делал транспорт на xmos и встречался ли с такой проблемой? Какие возможны пути решения? Плата позже будет перерисована с учетом новых "хотелок".

    Не решенные проблемы:

    - щелчек при переключении между PCM и DSD.

    [свернуть]


    Воспроизведение DSD в линукс без проблем, сборка tinyAP видит DSD Native. Альтсеты, ядро 4.18.0, Ubuntu 18.04:

    Скрытый текст


    Playback:
    Status: Running
    Interface = 1
    Altset = 1
    Packet Size = 392
    Momentary freq = 384000 Hz (0x30.0000)
    Interface 1
    Altset 1
    Format: S32_LE
    Channels: 2
    Endpoint: 1 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us
    Interface 1
    Altset 2
    Format: S16_LE
    Channels: 2
    Endpoint: 1 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us
    Interface 1
    Altset 3
    Format: SPECIAL DSD_U32_BE
    Channels: 2
    Endpoint: 1 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us

    Capture:
    Status: Stop
    Interface 2
    Altset 1
    Format: S32_LE
    Channels: 2
    Endpoint: 1 IN (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us
    [свернуть]
    Последний раз редактировалось maxssau; 23.04.2019 в 10:06.
    _________________
    Евгений

  2. #2
    Завсегдатай Аватар для Deemon1970
    Регистрация
    19.02.2013
    Адрес
    Нефтекумск
    Возраст
    53
    Сообщений
    1,317

    По умолчанию Re: USB транспорт на XMOS

    Евгений, к сожалению, ничего не могу сказать по заданному вопросу, но первое: поздравляю тебя с "железной" реализацией девайса на XMOS , второе: если добавить вход и выход SPDIF c возможностью синхронизации, это сильно расширит потенциальные возможности транспорта не требуя усложнения устройства.
    С уважением. Дмитрий.

  3. #3
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    Цитата Сообщение от Deemon1970 Посмотреть сообщение
    если добавить вход и выход SPDIF c возможностью синхронизации
    думал уже над этим, упирается в ядра, другой процессор нужен, на переделанной плате скорее всего будет стоять XEF216, его запаса хватит почти на любые хотелки.
    _________________
    Евгений

  4. #4
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    я так понимаю что ответа ни у кого нет, ну да ладно, буду lib_usb прикручивать.

    кто пробовал делать Ethernet аудио стриминг? есть какие то наработки или готовые результаты? у xmos есть аппноуты, вроде всё не так и сложно, нужно ли это в качестве интерфейса?
    _________________
    Евгений

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

    По умолчанию Re: USB транспорт на XMOS

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

  6. #6
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    Моя ошибка в том, что нет резистора параллельно С32?

    ---------- Сообщение добавлено 21:15 ---------- Предыдущее сообщение было 18:24 ----------

    Alex, не совсем понятно, почему не работает. Завтра обязательно попробую и скорее всего заработает. Но причина мне не совсем ясна.

    Вот фрагмент схемы

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

Название:	vbus.png 
Просмотров:	689 
Размер:	193.5 Кб 
ID:	344804

    У меня нет только резистора на землю, да и про него пишут только то, что он нужен для разрядки конденсатора. Конденсатор стоит на входе 10 мкФ. Короткое моргание VBUS процессор с таким конденсатором может и не почувствовать.
    Последний раз редактировалось maxssau; 15.04.2019 в 20:35.
    _________________
    Евгений

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

    По умолчанию Re: USB транспорт на XMOS

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

  8. #8
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    даташит
    _________________
    Евгений

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

    По умолчанию Re: USB транспорт на XMOS

    Цитата Сообщение от maxssau Посмотреть сообщение
    Моя ошибка в том, что нет резистора параллельно С32?
    Нет, у тебя VCC-USB заходит на VBus проца через R15=4.7к (судя по фотке платы) и за ним С32.
    Так правильно с внешний фаем, но с 208-м у меня заходит напрямую, без резистора. Насколько я понимаю, он там внутри.

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

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

  10. #10
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    _________________
    Евгений

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

    По умолчанию Re: USB транспорт на XMOS

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

  12. #12
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    Цитата Сообщение от Alex Посмотреть сообщение
    Так правильно с внешний фаем, но с 208-м у меня заходит напрямую, без резистора.
    завтра обязательно попробую, и еще нужно для эксперимента повесить резистор на землю
    _________________
    Евгений

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

    По умолчанию Re: USB транспорт на XMOS

    Хм, интересно, у меня на 208-й даташит 1.10 - там такого нет, а у тебя 1.16 - и там уже есть.

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

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

  14. #14
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    у меня всё таки подозрения на библиотеку module_xud, нет исходника, а в ассемблере рыться долго и муторно. если не заработает завтра, буду на lib_usb переделывать. хотя есть "дубовый" метод, поставить try/catch в main.xc на запуск Xud_manager() и если сработает, софт ребут. придется только какое то время смотреть xscope*ом, когда и сколько раз перезагружается.

    ---------- Сообщение добавлено 00:03 ---------- Предыдущее сообщение было 00:01 ----------

    Цитата Сообщение от Alex Посмотреть сообщение
    Тогда - резистор в землю все-же поставь.
    да, это тоже вариант. у меня питание не от usb, вполне возможно напряжение на конденсаторе слишком медленно падает

    ---------- Сообщение добавлено 00:04 ---------- Предыдущее сообщение было 00:03 ----------

    в любом случае, спасибо за совет
    _________________
    Евгений

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

    По умолчанию Re: USB транспорт на XMOS

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

  16. #16
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    Alex, попробовал поставить резистор на землю и заменил 4.7к на 120 Ом. Тоже самое.
    Думаю что проблема всё таки программная, если перезагружать компьютер "молча", то всё нормально. Буду прикручивать lib_usb, хочу докопаться до истины.
    _________________
    Евгений

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

    По умолчанию Re: USB транспорт на XMOS

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

  18. #18
    Завсегдатай
    Автор темы
    Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: USB транспорт на XMOS

    Не хотелось бы bus powered, но надо попробовать. Завтра попробую.

    ---------- Сообщение добавлено 17.04.2019 в 17:31 ---------- Предыдущее сообщение было 16.04.2019 в 21:54 ----------

    Alex, вообщем победил, сейчас пару недель буду тестировать в самых разных комбинациях и ОС, если всё нормально, значит оставлю как есть.

    солюшн:

    Скрытый текст


    добавить к проекту парочку файлов:

    xuduser.c

    Скрытый текст

    Код:
    #include <platform.h>
    #include <xs1_su.h>
    #include "devicedefines.h"
    #include "hostactive.h"
    #include "audiostream.h"
    
    #if 1
    #include <hwtimer.h>
    #include "interrupt.h"
    hwtimer_t g_rebootTimer;
    
    
    #pragma select handler
    void HandleRebootTimeout(timer t)
    {
        unsigned pll_ctrl_val;
    
        /* Reset device */
        read_sswitch_reg(get_local_tile_id(), 6, pll_ctrl_val);
        pll_ctrl_val &= 0x7FFFFFFF;
        write_sswitch_reg_no_ack(get_local_tile_id(), 6, pll_ctrl_val);
        while(1);
    }
    
    #define REBOOT_TIMEOUT 20000000
    
    void XUD_UserSuspend(void)
    {
        unsigned time;
    
        UserAudioStreamStop();
        UserHostActive(0);
    
        DISABLE_INTERRUPTS();
    
        asm volatile("setc res[%0], %1"::"r"(g_rebootTimer),"r"(XS1_SETC_COND_NONE));
        g_rebootTimer :> time;
        time += REBOOT_TIMEOUT;
    
        asm volatile("setd res[%0], %1"::"r"(g_rebootTimer),"r"(time));
        asm volatile("setc res[%0], %1"::"r"(g_rebootTimer),"r"(XS1_SETC_COND_AFTER));
    
        set_interrupt_handler(HandleRebootTimeout, 1, g_rebootTimer, 0)
    }
    
    void XUD_UserResume(void)
    {
        unsigned config;
    
        /* Clear the reboot interrupt */
        DISABLE_INTERRUPTS();
        asm("edu res[%0]"::"r"(g_rebootTimer));
    
        asm("ldw %0, dp[g_currentConfig]" : "=r" (config):);
    
        if(config == 1)
        {
            UserHostActive(1);
        }
    }
    
    #endif
    [свернуть]


    interrupt.c

    Скрытый текст

    Код:
    #if 1
    
    #include <interrupt.h>
    
    register_interrupt_handler(HandleRebootTimeout, 1, 200)
    
    #endif
    [свернуть]


    По сути дела это перезагрузка, при наступлении "сна" на шине USB, решение конечно не самое красивое, но тем не менее работает. Да, кстати, это НЕ работает при подключенном XTAG, процессор улетает куда то за 0xfffxxxxx и там гоняет по кругу. XScope не получится подключить, что бы посмотреть сколько раз он себя перезагружает.

    [свернуть]


    пробовал делать USB powered, не запускается при отключенном VBUS, видимо косяк в SDK,
    Код:
    #define SELF_POWERED       0
    т.к. переназначить тип питания простой установкой не лечится и в main.xc всё равно SELF_POWERED.

    При подключенном резисторе VBUS запуск вообще через раз, в отладчике якобы всё работает, а в логах ядра Linux пишется что отключено из-за отсутствия ответа от устройства.


    Оставил SELF Powered, т.к. мне так удобнее, не надо решать проблему с мастерклоком и при отключенном ЦАПе в звуковых устройствах не висит девайс.
    _________________
    Евгений

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

    По умолчанию Re: USB транспорт на XMOS

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

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

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

Ваши права

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