Автор Тема: SAI протокол (Serial Audio Interface) stm32f429  (Прочитано 6992 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #15 : Сентябрь 21, 2020, 05:47:06 pm »
Вот так работает!
Оказывается, пофиг что ссылка на массив (uint8_t *) , длина все-равно должна быть как (uint32_t) , хотя по логике должно быть  FRAME_SIZE*4

        HAL_SAI_Receive_DMA(&hsai_BlockB1, (uint8_t *) saiRxBank, FRAME_SIZE)

        HAL_SAI_Transmit_DMA(&hsai_BlockA1, (uint8_t *) saiTxBank, FRAME_SIZE)

« Последнее редактирование: Сентябрь 21, 2020, 05:57:23 pm от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #16 : Сентябрь 21, 2020, 06:10:00 pm »
Передача с канала А в канал В 2кб
И прием тут же этих 2 кб в память, вообще практически не повлияло на скорость. Все взял ДМА на себя. То есть процессор практически не  участвует в этом процессе.
Но это еще без FIR и АРУ и  тд.
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #17 : Октябрь 04, 2020, 06:38:06 pm »
Все надо переделывать.  no88
Надо чтобы не было разрывов в приеме и передачи. Так же как в ЦАП с Помощью Геннадия мы сделали.
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #18 : Октябрь 05, 2020, 03:27:03 pm »
Пришлось все переделать.

Теперь так:
1.формирую сигнал в двух буферах последовательно с соблюдением фазы. Пока один буфер передается с помощь ДМА я заполняю втрой, потом меняюсь местами.
2.Передаю через SAI интерфейс блоки по 32бита (1 слот, со свободным протоколом).
3. Принимаю опять с помощью ДМА в два буфера по очереди.
4. После приема очередного буфера, обрабатываю его (3кГц FIR фильтр) и отправляю в свободный буфер ЦАП (тоже работает по системе 2 буферов).
5. ДМА отправляет по очереди буфер в ЦАП на выходе которого получается вот такой синал. 
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #19 : Октябрь 05, 2020, 03:28:49 pm »
Из-за особенностей деления и умножения 8МГц кварца в процессоре получается ошибка. Должна быть палка на 1000Гц. Это связано с формированием тактового сигнала для SAI 
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #20 : Октябрь 05, 2020, 03:35:02 pm »
Проблема была в синхронизации выхода на ЦАП и входа с SAI они упорно не сихронизировались. Максимум через 1 минуту происходила разсинхроницация и потеря одного блока. Звучит это в наушниках мерзко.
На фотке как раз момент разсинхронизации.

После долгих танцев с бубном я смог повесить внешнею синхронизацию на выход ЦАП. Теперь всё синхронизируется от выхода CLK SAI интерфейса.
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #21 : Октябрь 05, 2020, 03:40:02 pm »
Теперь сами настройки в CubeMX
настройки SAI
Да, и еще, там маркировка выходов попутана, либо у меня в голове бардак.
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #22 : Октябрь 05, 2020, 03:42:51 pm »
Теперь настройка DAC
кинут проводок физически между контактами. PG9 PE4 это как раз CLK от SAI
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #23 : Октябрь 05, 2020, 03:48:10 pm »
Теперь нафига всё так сложно. 123123

Да просто процессор практически свободен от пересылок. Максимум он сейчас формирует бесконечную синусоиду, фильтрует фир фильтром и копирует буфер в буфер ЦАП. Т.е. все работает на прерываниях и как бы не был процессор занят он всегда будет сперва заниматься прерываниями (звуком) и только потом основным потоком программы. Основной поток может зависнуть, а звук всеравно будет ))

В это время основной процесс процессора считает ФФТ и выводит на экран панораму и водопад. И он их выводит на максимально возможной скорости (зависит только от прихода данных).
« Последнее редактирование: Октябрь 05, 2020, 04:10:44 pm от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #24 : Октябрь 05, 2020, 03:51:07 pm »
Важный момент!
Сперва стартуем ЦАП потом SAi

 //start DAC
    if (HAL_DAC_Start_DMA_DBM(&hdac, DAC_CHANNEL_2, (uint32_t *) &pOutDac[0][0], (uint32_t *) &pOutDac[1][0],
                              FRAME_SIZE) != HAL_OK) {
        Error_Handler();
    }

HAL_Delay(1000);

    //sai start
    if (HAL_SAI_Transmit_DMA_DBM(&hsai_BlockA1, (uint8_t *) &saiTxBank[0][0], (uint8_t *) &saiTxBank[1][0],
                                 FRAME_SIZE) != HAL_OK) {
        Error_Handler();
    }

    if (HAL_SAI_Receive_DMA_DBM(&hsai_BlockB1, (uint8_t *) &saiRxBank[0][0], (uint8_t *) &saiRxBank[1][0],
                                FRAME_SIZE) != HAL_OK) {
        Error_Handler();
    }

 
« Последнее редактирование: Октябрь 05, 2020, 03:55:28 pm от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #25 : Октябрь 05, 2020, 04:20:45 pm »
Итоговое фото
« Последнее редактирование: Октябрь 05, 2020, 04:42:51 pm от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Онлайн Игорь 2

  • Administrator
  • *****
  • Сообщений: 19526
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #26 : Октябрь 05, 2020, 07:44:56 pm »
Я не слежу особо за темой, а правильно я понимаю, что плата STM сейчас у Вас управляет какой-то штукой, на которой Вы, собственно, и делаете устройство обработки?  cr123
Ничего невозможного нет

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #27 : Октябрь 05, 2020, 08:10:04 pm »
Неа, это просто плата, я в ней смоделировал фактически всю цифровую, часть которая обычно идет с ПЛИС. Единственное, что я не могу смоделировать это полную работу двух приемников и панорамы, просто не хватает 256кБ памяти для реализации. Нужно 1мБ +++
Длина данных 2 приемника(I&Q) и панорамы (один сэмпл * 1024)  4*8*1024=32768 байт !!! и таких блоком нужно 8 шт в памяти.  Поэтому могу только один приемник (I&Q) смоделировать это 4*2*1024 =8192 байт их вроде могу разместить в памяти. Просто в программ там целая куча блоков по 8 кб

Вот пример сколько массивов создается при старте. И это еще не все. Еще нужны блоки для АРУ и расчета  FIR фильтра налету с учетом эквалайзера.
FRAME_SIZE=1024
float32_t - это 4 байта.


__IO float32_t p[FRAME_SIZE * 2];
__IO float32_t arr[FRAME_SIZE * 2];
__IO float32_t pFirOut[FRAME_SIZE];
__IO float32_t pOut[FRAME_SIZE];
__IO uint16_t pOutOld[FRAME_SIZE];
__IO uint32_t pOutDac[2][FRAME_SIZE];
__IO float32_t arrDac[FRAME_SIZE];
__IO float32_t firOutDac[FRAME_SIZE];

__IO float32_t win[FRAME_SIZE];
__IO float32_t pMag[FRAME_SIZE];

float32_t saiRxBank[2][FRAME_SIZE];
float32_t saiTxBank[2][FRAME_SIZE];


float32_t firStateF32[FRAME_SIZE + SAMPLEFILTER_TAP_NUM - 1];
float32_t firStateF32dac[FRAME_SIZE + SAMPLEFILTER_TAP_NUM - 1];
float32_t firStateF32sai[FRAME_SIZE + SAMPLEFILTER_TAP_NUM - 1];
« Последнее редактирование: Октябрь 05, 2020, 08:18:38 pm от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн VA7KL

  • Administrator
  • *****
  • Сообщений: 142
  • ex-VA7FFT
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #28 : Октябрь 05, 2020, 08:59:22 pm »
не хватает 256кБ памяти для реализации. Нужно 1мБ +++

А 2 Мб STM32H747 хватит? Я правда SAI не развел, только АЦП и ЦАПы, и ДДС.
Вы Демо-board используете?

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: SAI протокол (Serial Audio Interface) stm32f429
« Ответ #29 : Октябрь 05, 2020, 09:05:13 pm »
Хватит однозначно, но без sai не передать панораму с плис. Там у меня есть возможность передать сразу 8 слотов , на 7 ке там вроде больше да и самих каналов там 4 шт у меня 2 всего.
Тема оказалась более чем интересная.
Да да, я знаю, у меня ничего не получится )))