|
STM32F407 Непонятки с SAI |
|
|
|
Nov 2 2015, 18:57
|
Частый гость
 
Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355

|
Цитата(Tarbal @ Nov 2 2015, 23:46)  Вроде как есть два I2S и 2 SAI и I2S и SAI это разные устройства. Мне надо 16 каналов PCM и SAI это позволяет. Но вот засада: читаю документацию и никак не могу найти к каким ножкам оно подключено. Это скорее всего не I2S ибо I2S имеет другие регистры причем одни и те же что и SPI. Кто-нибудь использовал SAI в STM32F407 или STM32F405? Serial audio interface (SAI) RM0090 914/1718 DocID018909 Rev 8 29 Serial audio interface (SAI) This section applies to the STM32F42xxx and STM32F43xxx family. перевод: SAI нет в 407.
|
|
|
|
|
Nov 3 2015, 13:34
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (Tarbal @ Nov 3 2015, 04:39)  Значит мой дискавери борд не годится для экспериментов. Слегка офтоп. Если у вас есть LPC с SGPIO модулем, то можно получить похожий функционал. В сети бродит описание такого проекта.
|
|
|
|
|
Nov 4 2015, 10:42
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-07-10
Пользователь №: 58 429

|
sgpio в lpc полная порнография, хотя сами процы вполне ничего хоть и не без багов. что касается самого i2s я сам сейчас нахожусь в процессе спрыгивания с lpc4357 в пользу stm32f7xx. и только потому что несмог путью прикрутить плиску к 43хх, в которой как раз похожий многоканальный i2s и реализован. а вот в 32f7хх есть qspi с ddr обменом в обе стороны. sgpio в 43xx полусофтварный и если пользовать его то получается что часть мощности самого проца уходит на вывод данных
|
|
|
|
|
Nov 4 2015, 14:25
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (alexandermas @ Nov 4 2015, 12:42)  sgpio в lpc полная порнография Что значит "полная порнография"? Можно плиз подробнее и более техническими терминами обрисовать ситуацию. QUOTE (alexandermas @ Nov 4 2015, 12:42)  я сам сейчас нахожусь в процессе спрыгивания с lpc4357 в пользу stm32f7xx. и только потому что несмог путью прикрутить плиску к 43хх в которой как раз похожий многоканальный i2s и реализован. Что такое "похожий многоканальный i2s"? В LPC есть I2S и SGPIO. Судя по описанию, на последнем можно делать всевозможные серийные синхронные / асинхронные шины и заниматься ногодрыжеством. Для этого он и задумывался, и как любое универсальное решение обладает избыточностью. У меня руки до него еще не дошли, если у вас есть конкретная информация об отрицательных свойствах этого модуля, поделитесь информацией, это будет всем интересно QUOTE (alexandermas @ Nov 4 2015, 12:42)  sgpio в 43xx полусофтварный и если пользовать его то получается что часть мощности самого проца уходит на вывод данных В чем заключается полусофтварность? Ну и как бы для юсб аудио интерфейса особо то и заниматься нечем. Например взять LPC17. Если бы DMA было бы поумнее ( что то типа 2D) или I2S модуль оптимальнее спроектирован, то весь аудио стрим для некоторых режимов мог бы передаваться без участия CPU.
|
|
|
|
|
Nov 4 2015, 17:02
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-07-10
Пользователь №: 58 429

|
Цитата(ig_z @ Nov 4 2015, 18:25)  Что значит "полная порнография"? Можно плиз подробнее и более техническими терминами обрисовать ситуацию.
Что такое "похожий многоканальный i2s"? В LPC есть I2S и SGPIO. Судя по описанию, на последнем можно делать всевозможные серийные синхронные / асинхронные шины и заниматься ногодрыжеством. Для этого он и задумывался, и как любое универсальное решение обладает избыточностью. У меня руки до него еще не дошли, если у вас есть конкретная информация об отрицательных свойствах этого модуля, поделитесь информацией, это будет всем интересно
В чем заключается полусофтварность? Ну и как бы для юсб аудио интерфейса особо то и заниматься нечем. Например взять LPC17. Если бы DMA было бы поумнее ( что то типа 2D) или I2S модуль оптимальнее спроектирован, то весь аудио стрим для некоторых режимов мог бы передаваться без участия CPU. Начну с конца.... Для юсб аудио, не спорю, заниматься действительно нечем, но вот когда распаковываешь .ape или многоканальный .flac то мегагерцы становятся совсем не лишними. полусофтварность заключается в том что приходится соотв. образом подготавливать буфера для вывода, лить их по дма без участия ядра тоже не выходит (приходится проверять опустошение) это про sgpio. что касается i2s лично мне для моего проекта 2 набортных i2s мало, да и заставить их синхронно работать я не представляю как. С дма (касается lpc43xx, у 17хх вроде все нормально) тоже аппаратный косяк - при работе со связанными списками наблюдается выпадение 1 семпла из каждых 2-3 блоков по 4090 семплов, (тоже не особо удобно, т.к. фреймы в lossless форматов обычно 4096 семплов или больше) при работе на набортный i2s. плюс ко всему если вы делаете действительно высококлассную аудио систему, напомню что сами порты вывода (те к которым посредством матриц подключается встроенная переферия) тактируются совсем не от того клока что сам i2s. поэтому имеем резкое увеличение джиттера как результат(проверено опытным путем). Далее в своих мытарствах решил уйти на плис, подумал что от вышеописаных трудностей уйду... Прицепил плис, на тот момент по spi, все вроде ничего, и играло лучше чем с набортного, но только на 2х каналах, для большего невытянул spi по скорости(максимум выжал 50м/бит). решил повесить плис на EMC а вот тут была действительно засада, изза встроенных неотключаемых буферов на шине emc (даже флаг гады сделали, но нерабочий) если писать по 1 адресу я еще как то мог, то вот последовательное чтение по 1 адресу стабатывало только 1 раз, на второй логика emc считала что данные не изменились и выдавала результат из буфера. сейчас в плис находится 8 однотипных контроллеров которые я могу по своему усмотрению конфигурировать и настраивать выводя некоторые каналы хоть по i2s в разных форматах, хоть по spdif. Обмен с камнем планирую сделать по qspi.
|
|
|
|
|
Nov 7 2015, 22:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(Genadi Zawidowski @ Nov 7 2015, 21:21)  А какие регистры интересуют? Вот тут https://188.134.5.254/browser/hfreceiver/tr...recodecs.c#L924 инициализация, имейте в виду - в описании SAI_xCR1_MCKDIV_0 и остальных у ST ошибка в значении (я использую исправленную версию). Спасибо посмотрю. Меня интересуют регистры SAI. Просто значения. Про ошибку не очень понял. Можно поподробнее пожалуйста? Спасибо вам Генадий, Нашел уже, что APB clock не разрешен для SAI, но пока не помогло. Буду искать дальше. Код у вас с любовью написан -- красиво.
|
|
|
|
|
Nov 8 2015, 00:25
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Вот подробности:  Вот выдача: Код hardware_sai1_master_fullduplex_initialize: 2 SAI1 MCKDIV=14, ARMSAIMCLK=12288000, PLLI2S_FREQ_OUT=172032000 SAI1_Block_A->CR1: 007202E0 SAI1_Block_A->CR2: 00000000 SAI1_Block_A->FRCR: 00011F3F SAI1_Block_A->SLOTR: 00030180 SAI1_Block_A->IMR: 00000000 SAI1_Block_A->SR: 00000008 SAI1_Block_B->CR1: 007206E3 SAI1_Block_B->CR2: 00000000 SAI1_Block_B->FRCR: 00011F3F SAI1_Block_B->SLOTR: 00030180 SAI1_Block_B->IMR: 00000000 SAI1_Block_B->SR: 00000000 Вот код: Код static void pp(const SAI_Block_TypeDef * dev, const char * label) { debug_printf_P(PSTR("%s->%s:\t%08lX\n"), label, "CR1", dev->CR1); debug_printf_P(PSTR("%s->%s:\t%08lX\n"), label, "CR2", dev->CR2); debug_printf_P(PSTR("%s->%s:\t%08lX\n"), label, "FRCR", dev->FRCR); debug_printf_P(PSTR("%s->%s:\t%08lX\n"), label, "SLOTR", dev->SLOTR); debug_printf_P(PSTR("%s->%s:\t%08lX\n"), label, "IMR", dev->IMR); debug_printf_P(PSTR("%s->%s:\t%08lX\n"), label, "SR", dev->SR); } В данном варианте тактируется от PLL, так что там ещё и I2SPLL задействовано в RCC (смотрите функцию hardware_sai_clock_selection, для WITHSAICLOCKFROMI2S
Сообщение отредактировал Genadi Zawidowski - Nov 8 2015, 00:32
|
|
|
|
|
Nov 8 2015, 01:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Спасибо, уже дышит. Насколько я понял клок не разрешался из-за моих ляпов -- куб не при чем, а модули надо было разрешить после всех инициализаций: __HAL_SAI_ENABLE(&hsai_BlockA1); __HAL_SAI_ENABLE(&hsai_BlockB1);
Сообщение отредактировал IgorKossak - Nov 8 2015, 17:50
Причина редактирования: бездумное цитирование
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|