
Обработка звука в реальном времени (или Full Duplex I2S на STM32)
aabzel 12 минут назад Обработка звука в реальном времени (или Full Duplex I2S на STM32) Простой 14 мин 327 Программирование микроконтроллеров * Звук C * Электроника для начинающих Производство и разработка электроники *...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: aabzel 12 минут назад Обработка звука в реальном времени (или Full Duplex I2S на STM32) Простой 14 мин 327 Программирование микроконтроллеров * Звук C * Электроника для начинающих Производство и разработка электроники * Туториал Многие цифровые интерфейсы поддерживают полнодуплексный режим работы. Это когда данные передаются и принимаются одновременно. Такое возможно в интерфейсах RMII, RS232, USB 3.
0, PCI Express, SPI, 100BASE-TX, HDMI, 100BASE-FX, UART, SATA Express, 100BaseT1 и I2S. У меня уже был отдельный текст про воспроизведение и отдельный текст про запись звука. В этом же тексте я написал про то как сделать одновременно и воспроизведение и запись звука.
Технические детали
Про то как настроить I2S-трансивер работать в полнодуплексном (Full Duplex) режиме работы. Постановка задачиНастроить на микроконтроллере STM32F407 одновременное воспроизведение и запись аудио потока на I2S2. При этом мне нужен не просто одновременный запуск I2S2_TX и I2S2_EXT_RX, а так, чтобы DMA канал приема должен быть смещен по фазе относительно DMA канала передачи на 180 градусов (на полпериода).
То есть в момент прерывания по половине отправки надо только начинать приём по DMA. Мастером в I2S интерфейсе должен быть микроконтроллер. Slave устройством должен быть аудиокодек WM8731.
Использовать DMA каналы с прерываниями. Передавать следует цифровой двухканальный звук на частоте 48kHz. Размер семпла должен составлять 16 бит.
Отраслевые последствия
Сделать две тестировочные сборки для проверки работы режима full duplex I2S:1) цифровое эхо (слуховой аппарат)2) одновременное воспроизведение с SD карты и запись звука на SD карту. Процессорное ядро должно работать на максимальных оборотах (168 MHz). Проблема в том, что в STM32 HAL API SDK отсутствует функция запуска I2S full duplex с фазовым сдвигом 180 градусов.
Если вызывать стандартную SDK функцию HAL_I2SEx_TransmitReceive_DMA, то чтение и запись будут абсолютно синхронными. А это значит, что DMA прерывания по окончанию отправки и DMA прерывания по окончанию приема будут вступать в гонки. Возникнет race conrition.
Аналогичная проблема для DMA прерываний по половине отправки. Очевидно, что для преодоления этой неприятности надо разнести по фазе DMA процессы чтения и записи по I2S. Вот про это и будет данный текст.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





