Страница 2 из 3 Первая 123 Последняя
Показано с 21 по 40 из 47

Тема: Простой способ получить преобразовать i2s в RJ 16bit для

  1. #1 Показать/скрыть первое сообщение.
    Новичок
    Автор темы
    Аватар для dims
    Регистрация
    23.03.2020
    Сообщений
    84

    По умолчанию Простой способ получить преобразовать i2s в RJ 16bit для

    Добрый день!

    Хочу поиграться с pcm56, коих лежит несколько штук без дела. Под рукой есть STM32F4, на ней сделал простой транспорт USB-i2s (использовал с pcm5102 и es9023). Возможно ли программно переконфигурировать вывод i2s из стмки в нужный для pcm56 формат? Может кто видел такую реализацию в коде?

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

    Или проще купить готовый преобразователь типа такого на ad1896:
    Нажмите на изображение для увеличения. 

Название:	Sa7292db5a3dd46a58bb818f13b7b4516b.jpg 
Просмотров:	256 
Размер:	107.3 Кб 
ID:	470347

  2. #21
    Завсегдатай Аватар для antonluba
    Регистрация
    12.12.2014
    Адрес
    Сочи, Коломна
    Возраст
    47
    Сообщений
    1,101

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    А какой контроллер у вас?

  3. #22
    Новичок
    Автор темы
    Аватар для dims
    Регистрация
    23.03.2020
    Сообщений
    84

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от dortonyan Посмотреть сообщение
    если вы сами написали/запустили код USB-I2S, то какие проблемы сконфигурировать пару I2S модулей на вывод 16 бит данных? Это же как бы намного более простая задача.
    Я пользовался готовыми примерами, но, думаю пойду этим путем.
    Кажется, что надо взять stm32f401 (у меня такая), у нее две i2s, сконфигурировать ее RJ bit и писать в одну левый, а в другую правый канал.

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

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

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

  5. #24
    Частый гость Аватар для Traktorist3d
    Регистрация
    06.01.2015
    Адрес
    Хабаровск, Камчатка
    Сообщений
    478

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    @dims возможно понравится, в процессе доработки отлично звучащий EndPoint на базе LuckFox. Стоит копейки, звучит достойно, причем на борту Рокчипа реализована очень не дурная PPL. В скором времени будет добавлена поддержка RJ.

  6. #25
    Завсегдатай Аватар для Delta213
    Регистрация
    23.01.2006
    Адрес
    Астрахань
    Сообщений
    5,205

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от Traktorist3d Посмотреть сообщение
    возможно понравится, в процессе доработки отлично звучащий EndPoint на базе LuckFox.
    А здесь ее обсуждают? Есть тема? Посмотрел, ну очень неудобный сайт. А так да, интересно!
    Подчиненный перед лицом начальствующим должен иметь вид лихой и придурковатый, дабы разумением своим не смущать начальство.
    Указ Петра I от 09.12.1709:

  7. #26
    Частый гость Аватар для Traktorist3d
    Регистрация
    06.01.2015
    Адрес
    Хабаровск, Камчатка
    Сообщений
    478

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от Delta213 Посмотреть сообщение
    А здесь ее обсуждают? Есть тема? Посмотрел, ну очень неудобный сайт. А так да, интересно!
    Ну насчет неудобности сайта я в растерянности)), что там неудобного особенно по сравнению с устаревшей версткой Веги)), хотя всё вкусовщина...
    Как по мне вставить изображение сразу в сообщение из буфера обмена уже счастье))


    Всё обсуждение там... Здесь насколько знаю отдельной темы нет, возможно упоминалось...
    Последний раз редактировалось Traktorist3d; 18.03.2025 в 12:26.

  8. #27
    Завсегдатай Аватар для Delta213
    Регистрация
    23.01.2006
    Адрес
    Астрахань
    Сообщений
    5,205

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от Traktorist3d Посмотреть сообщение
    Всё обсуждение там... Здесь насколько знаю отдельной темы нет

    Offтопик:
    Я что-то не понял насчет преимуществ перед скажем оранж пи. Цена +- одинакова, потребление одинаково, габариты да, меньше, зато у оранжа 3 юсб, двух диапазонный wifi и гиговый эзернет. Правда нет i2S но особо и не нужен, да и лису многие (если не большинство) через юсб пользуют. Что я пропустил? Можно в личку.
    Подчиненный перед лицом начальствующим должен иметь вид лихой и придурковатый, дабы разумением своим не смущать начальство.
    Указ Петра I от 09.12.1709:

  9. #28
    Завсегдатай Аватар для Grigori G.
    Регистрация
    13.05.2006
    Адрес
    Estonia
    Возраст
    46
    Сообщений
    1,641

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для


    Offтопик:
    Цитата Сообщение от dims Посмотреть сообщение
    Добрый день!
    Вот тут можете ознакомиться (не мое, брал это за основу):
    https://github.com/har-in-air/STM32F411_USB_AUDIO_DAC
    https://github.com/TobiasVanDyk/STM3...-USB-Audio-DAC
    https://github.com/sdima1357/stm32f401cdu6_Audio
    Блин, как интересно!
    У меня как раз STM черная пилюля есть, надо попробовать...
    нет ничего более вечного, чем то, что замотано синей изолентой...

  10. #29
    Новичок Аватар для user12
    Регистрация
    11.08.2005
    Сообщений
    39

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    По поводу "Простой способ получить преобразовать i2s в RJ 16bit".
    Если я правильно помню, формат I2S отличается от RJ только временем выдачи WS. А значит, чтобы аппаратно решить subj, достаточно поставить сдвиговый регистр на 15 (8+7) для WS и больше ничего. По определению, RJ должен игнорировать (вдвигать) все излишние предыдущие биты, защелкивая лишь текущее на момент WS.
    Это так, к слову. ))

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

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от user12 Посмотреть сообщение
    достаточно поставить сдвиговый регистр на 15 (8+7) для WS и больше ничего.
    Это да, но если уж самостоятельно делается девайс на микроконтроллере, в которем есть I2S/SAI, то достаточно изменить 1-2 строчки в программе...

    Цитата Сообщение от user12 Посмотреть сообщение
    По определению, RJ должен игнорировать (вдвигать) все излишние предыдущие биты, защелкивая лишь текущее на момент WS.
    Но может возникнуть задада, чтобы небыло этих "предыдущих бит", т.е. чтобы в кадре было 2Х16, или 2х20, а не 2Х32 бита. (иными словами - другая частота BCLK и DATA, при той-же частоте WCLK), и тут уже просто сдвиговыми регистрами не обойдешься.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  12. #31
    Новичок
    Автор темы
    Аватар для dims
    Регистрация
    23.03.2020
    Сообщений
    84

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от dortonyan Посмотреть сообщение
    dims, если вы сами написали/запустили код USB-I2S, то какие проблемы сконфигурировать пару I2S модулей на вывод 16 бит данных? Это же как бы намного более простая задача.
    Добрый день!

    В итоге поизучал я тему программно делить поток с USB на два канала и отправлять в два интерфейса I2S на stm32. Как разделить полученный через USB Audio class 1 поток - понятно. Получаем кадр и вычитываем из него четные\нечетные блоки длинной в сэмп, складываем в два буфера. Далее как их через dma отправить в ЦАПы тоже ясно.

    Но! Пока не могу понять, что делать с тем, что в таком конфиге частота отправки в ЦАПы увеличивается в два раза, т.к. я планировал отправлять разбитые сэмплы параллельно ЦАП1 - L, ЦАП2 - R. Через USB я принимаю кадр, в котором сэмплы последовательно чередуются (LRLRLR), а далее я их отправляю параллельно, соответственно скорость отправки X2 к скорости их приема.
    Похоже, что тут как раз и нужна плис

  13. #32
    Завсегдатай Аватар для antonluba
    Регистрация
    12.12.2014
    Адрес
    Сочи, Коломна
    Возраст
    47
    Сообщений
    1,101

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Надо каждый i2s грузить как левый канал

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

    А правый нулевой
    так не получится
    Последний раз редактировалось antonluba; 06.04.2025 в 18:19.

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

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

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

  15. #34
    Завсегдатай Аватар для antonluba
    Регистрация
    12.12.2014
    Адрес
    Сочи, Коломна
    Возраст
    47
    Сообщений
    1,101

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от Alex Посмотреть сообщение
    Как 2 канала с USB превращаются в 4 канала в двух I2S?
    Да, тут надо поразмыслить.
    У PCM56 сигнал LE работает только по спаду, можно попробовать в качестве LE использовать LRCK.

    Но вот с настройкой I2S будет нетривиальная задача. Хотя там можно, конечно, намутить всякого.
    Ну и данные обработать.

    Цитата Сообщение от dims Посмотреть сообщение
    В итоге поизучал я тему программно делить поток с USB на два канала и отправлять в два интерфейса I2S на stm32. Как разделить полученный через USB Audio class 1 поток - понятно. Получаем кадр и вычитываем из него четные\нечетные блоки длинной в сэмп, складываем в два буфера. Далее как их через dma отправить в ЦАПы тоже ясно.

    Но! Пока не могу понять, что делать с тем, что в таком конфиге частота отправки в ЦАПы увеличивается в два раза, т.к. я планировал отправлять разбитые сэмплы параллельно ЦАП1 - L, ЦАП2 - R. Через USB я принимаю кадр, в котором сэмплы последовательно чередуются (LRLRLR), а далее я их отправляю параллельно, соответственно скорость отправки X2 к скорости их приема.
    Похоже, что тут как раз и нужна плис
    Если вы не против, могу поэкспериментировать в свободное время.
    А вы мне поможете с моим кодом USB

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

    А как PCM56 воспримет, если LRCK пропустить через триггер, чтобы получить короткий импульс, а количество импульсов BCK до следующего LE будет не 16, а 32?
    Кто пробовал?

  16. #35
    Завсегдатай Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,952

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от antonluba Посмотреть сообщение
    Надо каждый i2s грузить как левый канал

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

    А правый нулевой
    так не получится
    Почему не получится? Должно получиться, если задать формат LJ или RJ.

  17. #36
    Завсегдатай Аватар для antonluba
    Регистрация
    12.12.2014
    Адрес
    Сочи, Коломна
    Возраст
    47
    Сообщений
    1,101

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Почему не получится? Должно получиться, если задать формат LJ или RJ.
    Если посмотреть формат данных PCM56, он грузит 16 бит данных и защелкивает по спаду сигнала LE.
    Если использовать LRCK как LE, то в левом канале должно остаться 8 бит, и в правом тоже 8 бит.

    Либо, если цап переварит, вдвигать 32 бита, как обычный формат RJ для стерео, из которых будут использоваться только последние 16, загруженные непосредственно перед спадом LE. Тогда достаточно использовать один i2s модуль, сделать формат 16бит данных в 16бит кадре и поставить один инвертор на LRCK.

  18. #37
    Новичок
    Автор темы
    Аватар для dims
    Регистрация
    23.03.2020
    Сообщений
    84

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Всем привет! Спасибо за участие

    Я, наверное, с самого начала немного сумбурно свою задачку описал. Хотел ради интереса и саморазвития послушать, как работают PCM56. На руках из источников сигнала только те, которые могут выдавать "классический" i2s - phillips. Ну и stm32f4 валяется, вот и решил попробовать на ней реализовать.

    На stm я запустил транспорт, который принимает данные по USB и отдает их в i2s в phillips - формате. В этом случае передается фрейм 32 бит, где лежат оба канала, который делится сигналом LRCK. Все это происходит через DMA.
    Но для pcm56 нужно PCM short framesync. Хочется, чтобы они работали параллельно, каждый на свой канал, соотв. LE нужно на них подавать синхронно и его частота должна быть в два раза меньше LRCK. Как это реализовать в stm c использованием DMA не ясно.
    Вроде как в stm есть возможность настроить i2s в режим "16 bit data in 32 frame" Может быть если это использовать с форматом PCM short framesync, то LE как раз будет выдаваться раз в 32 бит

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

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от antonluba Посмотреть сообщение
    Либо, если цап переварит, вдвигать 32 бита, как обычный формат RJ для стерео, из которых будут использоваться только последние 16, загруженные непосредственно перед спадом LE.
    Переварит. Там на входе простой сдвиговый регистр: задвигай сколько хочешь, защелкиваются только последние 16 бит.
    Если для I2S модуля задать формат вывода RJ16, то данные будут выровнены как раз к фронту LRCK.
    LRCK при этом даже инвертировать не нужно. К спаду фронта LRCK будет выравнен левый канал I2S фрейма (ЕМНИП). Что при этом будет в правом - не имеет значения: можно обнулить, а можно оставить какой-нить мусор.

    Цитата Сообщение от dims Посмотреть сообщение
    Как это реализовать в stm c использованием DMA не ясно.
    Примерно так:
    I2S модуль правого канала должен запускать DMA, который скопирует 4 байта данных из буфера USB данных.
    При этом I2S выдаст два канала по 16 бит, но в ЦАП загрузится только один канал, который выровнен к спаду сигнала LRCK.
    Для другого канала делается то же самое, только адрес по которому DMA будет считывать 4 байта должен быть сдвинут на 2 байта (чтобы пропустить один канал).

    Если нужно, чтобы данные на ЦАП выводились без лишнего мусора, то схема будет более сложная, с промежуточным буфером (или даже двумя буферами) и по несколько каналов DMA на каждый канал аудио-данных.
    Конкретнее не подскажу, с DMA на M4-кортексах плотно не работал.

    Цитата Сообщение от dims Посмотреть сообщение
    Хотел ради интереса и саморазвития послушать, как работают PCM56.
    Могу сразу сказать, что ничего "отвал башки" интересного вы там не услышите. И результат будет сильно зависеть от реализации аналоговой части.
    Поэтому если и пробовать, то сразу как положено, в нормальном дизайне (не на макетках).

  20. #39
    Завсегдатай Аватар для antonluba
    Регистрация
    12.12.2014
    Адрес
    Сочи, Коломна
    Возраст
    47
    Сообщений
    1,101

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от dortonyan Посмотреть сообщение
    LRCK при этом даже инвертировать не нужно
    Я имел в виду, что можно использовать один готовый стерео i2s.
    Режим задать RJ, на один цап подавать напрямую, а на другой - с инвертированным LRCK

  21. #40
    Завсегдатай Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,952

    По умолчанию Re: Простой способ получить преобразовать i2s в RJ 16bit для

    Цитата Сообщение от antonluba Посмотреть сообщение
    Я имел в виду, что можно использовать один готовый стерео i2s.
    Режим задать RJ, на один цап подавать напрямую, а на другой - с инвертированным LRCK
    А, понял.
    Если чисто на "попробовать" и забить на сдвиг фазы между каналами, то можно конечно и так. Самый простой вариант.

Страница 2 из 3 Первая 123 Последняя

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

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

Ваши права

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