Цифровые MEMS-микрофоны (MEMS аббревиатура от MicroElectroMechanical Systems) применяются во всех аудио-приложениях, где ключевые требования - малый размер, высокое качество звука, надежность и доступность. Благодаря малым размерам и низкой чувствительности к помехам можно реализовать несколько микрофонов в одном устройстве что упрощает интеграцию в портативных устройствах качественных систем захвата и записи звука. 32-битные STM32 Arm® Cortex® MCU и STM32 Arm® Cortex® MPU предоставляют широкие возможности для подключения MEMS-микрофонов.
В этом документе (перевод даташита AN5027 [1]) описываются способы подключения MEMS-микрофонов с кодированием выходного потока данных по методу плотности импульса (pulse-density modulated, PDM), в конфигурациях моно и стерео, к STM32 MCU и MPU через интерфейсы SPI/I2S, SAI и DFSDM. Предоставляются руководства и примеры, основанные на STM32CubeMX, показывающие правильное конфигурирование STM32 для захвата и обработки сырых данных с микрофонов, чтобы преобразовать эти данные в стандартные данные звука.
[MEMS-микрофоны c PDM-кодированием выходных данных]
Цифровой MEMS-микрофон это сенсор, преобразующий акустическое давление звуковых волн в цифровой сигнал. STM32 захватывают цифровые данные из этого микрофона (или микрофонов) через определенные периферийные интерфейсы, и преобразуют полученные данные в стандартный звуковой формат. После этого данные звука обрабатываются микроконтроллером STM32 в соответствии с алгоритмом целевого приложения.
Рис. 1. Пример захвата звука в аудио-приложении.
Цифровой микрофон состоит из следующих основных узлов: MEMS-преобразователь, усилитель и PDM-модулятор.
MEMS-преобразователь. Это переменная емкость, преобразующая изменение давления воздуха, вызванные звуковой волной, в напряжение.
Усилитель. Этот узел буферизирует напряжение, поступающее от MEMS-преобразователя, и создает достаточно мощный сигнал для работы PDM-модулятора.
PDM-модулятор. Модулятор преобразует аналоговый сигнал в последовательность импульсов с модулированием плотности. Для управления модулятором используется тактовый вход (CLK). Тактовая частота, используемая для цифровых микрофонов ST, лежит в диапазоне от 1 МГц до 3.25 МГц. Эта частота определяет частоту дискретизации (sampling rate), на которой выходной сигнал усилителя оцифровывается для получения дискретного по времени цифрового сигнала (битовый поток PDM).
Выбор канала. Выход микрофона управляется соответствующим уровнем выбранного перепада сигнала тактов, и затем переходит в состояние высокого сопротивления в течение половины периода тактов. Выбор канала определяет перепад тактового сигнала, на котором цифровой микрофон выводит свои данные. Вывод LR микрофона должен быть подключен к Vdd или к GND.
Таблица 1. Выбор шаблона для выходного сигнала DOUT.
LR
DOUT
CLK = 0
CLK = 1
GND
Достоверные данные
Высокое сопротивление
Vdd
Высокое сопротивление
Достоверные данные
Питание. На выводы Vdd и GND подается напряжение питания, используемое для работы различных компонент цифрового микрофона. Напряжение питания должно быть хорошо отфильтровано, потому что помехи по питанию могут генерировать лишний шум на выходе микрофона.
Таблица 2. Выводы микрофона.
Имя вывода
Функция
Направление
Vdd
Питание 3.3V
Вход питания
GND
0V, общий провод
Земля
LR
Выбор левого (L) / правого (R) канала
Вход
CLK
Такты синхронизации
Вход
DOUT
Данные PDM
Выход
[Базовые схемы подключения]
Моно. В этом режиме вывод LR микрофона может быть подключен либо к Vdd, либо к GND. Когда LR подключен к Vdd, генерируются данные правого канала.
Рис. 3. Конфигурация моно, получение данных правого канала.
На фронте нарастания сигнала тактов микрофон генерирует достоверные данные в течение половины периода тактов, затем переходит в состояние высокого сопротивления в течение другой половины периода тактов.
Рис. 4. Диаграммы сигналов правого канала.
Когда LR подключен к GND, генерируются данные левого канала.
Рис. 5. Конфигурация моно, получение данных левого канала.
На на спаде уровня сигнала тактов микрофон генерирует достоверные данные в течение половины периода тактов, затем переходит в состояние высокого сопротивления в течение другой половины периода тактов.
Рис. 6. Диаграммы сигналов левого канала.
Конфигурация стерео. Два разных цифровых MEMS-микрофона подключены к одному и тому же сигналу данных, при этом первый микрофон сконфигурирован на генерацию сигнала по фронту тактов (LR подключен к Vdd), и второй по спаду тактов (LR подключен к GND).
Рис. 7. Конфигурация стерео, использующая общий сигнал данных.
Рис. 8. Диаграммы сигналов конфигурации стерео.
[Сигналы PDM и PCM]
PDM. Как уже упоминалось, аббревиатура PDM означает Pulse Density Modulation, т. е. модуляция изменением плотности импульсов. PDM используется для представления аналогового сигнала в цифровой домен, представляя собой высокочастотный однобитный поток цифровых импульсов. В сигнале PDM относительная плотность импульсов соответствует амплитуде аналогового сигнала. Большой кластер логических единичек соответствует высокой (положительной) величине амплитуды, в то время как большой кластер логических нулей соответствует низкой (отрицательной) величине амплитуды, и смена лог. 1 и лог. 0 одинаковой длительности соответствует нулевому значению амплитуды.
Рис. 9. Сигнал PDM.
Сигнал PDM легко преобразуется в аналоговую форму путем пропускания потока PDM через фильтр низких частот (ФНЧ).
PCM. Аббревиатура PCM означает Pulse Code Modulation, т. е. модуляция импульсного кодирования. Это стандартная форма представления аналогового сигнала в цифровом виде (в частности, несжатые WAV-файлы кодируют свои данные в формате PCM). В сигнале PCM определенные значения амплитуды кодируются в цифровые импульсы. У потока PCM есть 2 базовых свойства, которые определяют точность соотвествия потока оригинальному аналоговому сигналу:
Частота дискретизации определяет, сколько выборок в секунду цифрового сигнала представляют аналоговый сигнал в цифровую форму. Разрядность выборок определяет, сколькими битами кодируется информация о сигнале в каждой выборке.
Рис. 10. Сигнал PCM.
Преобразование PDM в PCM. Чтобы преобразоваnm поток PDM в выборки данных PCM, поток PDM нужно отфильтровать и подвергнуть децимации.
На стадии децимации частота дискретизации сигнала PDM снижается до необходимой частоты дискретизации звука (например, 16 кГц). Децимация осуществляется взятием одной выборки из M выборок, при этом частота дискретизации понижается в M раз. Таким образом, частота данных PDM (которая равна частоте тактов микрофона) понижается в M раз, чтобы частота выборок звука соответствовала нужной частоте выборок в приложении, и коэффициент M называется коэффициентом децимации.
Частота PDM = Частота выборок звука x Коэффициент децимации
Коэффициент децимации обычно выбирается в диапазоне от 48 до 128. Стадии децимации предшествует ФНЧ, чтобы избежать искажений формы сигнала из-за наложений спектра (алиасинг).
[Акустические параметры]
Чувствительность. Этот параметр соответствует уровню электрического сигнала (выраженному dBFS) на выходе цифрового микрофона для определенного эталонного акустического сигнала. Обычно чувствительность микрофона приводится для тонального сигнала звука 1 кГц в качестве эталонного сигнала, при 1 Pa (или 94 dBSPL).
SNR. Аббревиатура SNR расшифровывается Signal-to-Noise Ratio, т. е. соотношение уровня сигнала к уровню шума. SNR определяет соотношение между эталонным сигналом (94 dBSPL@1kHz) и величиной остаточного шума на выходе микрофона. Более высокое значение SNR обеспечивает улучшенную четкость речи, а также разборчивость звука на дальнем конце.
AOP. Аббревиатура AOP обозначает Acoustic Pverload Point (точка перегрузки по звуку). Этот параметр определяет максимальный звуковой сигнал, который микрофон может передать с допустимым уровнем искажений (некоторые спецификации определяют этот уровень искажений 10% с точки зрения искажений в точке перегрузки).
PSRR. Аббревиатура PSRR расшифровывается как Power Supply Rejection Ratio, т. е. коэффициент подавления помех по питанию. Параметр PSRR количественно определяет способность микрофона устранять шум, поступающий от изменений уровня напряжения источника питания.
Таблица 3. Преимущества цифрового микрофона в контексте улучшения акустических параметров.
Функция
Направление
Нечувствительность к радиочастотным наводкам (RF) и электромагнитным помехам (EMI)
- Меньше усилия по интеграции микрофона в систему
Кондиционирование аналогового сигнала не требуется
– Упрощение разработки приложения – Непосредственный интерфейс с кодеками, снабженными цифровым микрофонным интерфейсом – Для режима стерео нужна только одна линия данных – Значительная экономия места на печатной плате, что позволяет увеличить количество микрофонов в системе – Гибкие возможности по добавлению дополнительных микрофонов в приложении
Надежная цифровая передача
– Простое позиционирование MEMS в системе приложения – Стандартное кондиционирование цифровых данных – Позволяет интегрировать функции улучшения звука для захвата стерео, подавления шума и формирования диаграммы направленности
Таблица 4. Цифровые микрофоны ST, имеющиеся на рынке.
Модель
Вх. порт
Напр. питания (V)
SNR (dB)
Чувств. (dBFS)
AOP (dBSPL)
MP34DB02
Снизу
1.64 .. 3.6
62.6
-26
120
MP34DT01-M
Сверху
1.64 .. 3.6
61
-26
120
MP34DT02
Сверху
1.64 .. 3.6
60
-26
120
MP34DT04
Сверху
1.6 .. 3.6
64
-26
120
MP34DT04-C1
Сверху
1.6 .. 3.6
64
-26
120
MP34DT05
Сверху
1.6 .. 3.6
64
-26
122.5
MP45DT02-M
Сверху
1.64 .. 3.6
61
-26
120
На AliExpress также доступны микрофоны INMP441 компании InvenSense:
Модель
Вх. порт
Напр. питания (V)
SNR (dB)
Чувств. (dBFS)
AOP (dBSPL)
INMP441
Снизу
1.62 .. 3.63
61
-26
120
[Подключение потока PDM к STM32]
В этой секции описывается, как подключить цифровые MEMS-микрофоны к периферийным интерфейсам SPI/I2S, SAI и DFSDM микроконтроллера STM32, в конфигурациях моно и стерео.
SPI/I2S. Аббревиатура SPI обозначает Serial Peripheral Interface, а аббревиатура I2S означает Inter-IC Sound (описание периферии SPI и I2S см. в статьях [2, 3]). Микроконтроллеры STM32 в снабжены несколькими интерфейсами SPI. Некоторые из этих SPI также поддерживают возможность работы по протоколу I2S. Дополнительно STM32 представляют 2 версии SPI. В этом описании старые версии называются SPI-V1, и последние версии называются SPI-V2. Когда в тексте просто упоминается блок SPI, то это одинаково относится как SPI-V1, так и к SPI-V2. Версия SPI-V2 в настоящий момент доступна в серии STM32H7 микроконтроллеров STM32.
К блоку SPI можно подключить один или два цифровых микрофона, работая с ними либо по протоколу SPI, либо по протоколу I2S.
• Протокол SPI предоставляет простой способ обмена, позволяя обмениваться данными с внешними устройствами. • Протокол I2S широко используется для передачи звуковых данных от микроконтроллера/DSP (Digital Signal Processor, устройство цифровой обработки сигнала) в аудиокодеки, чтобы проигрывать музыку или захватывать звук с микрофона.
Моно. К блоку SPI подключен цифровой микрофон. SPI может быть сконфигурирован в режиме SPI или в режиме I2S. В обоих случаях блок SPI конфигурируется в режиме master receiver (главное устройство шины, принимающее данные). В этом режиме блок SPI генерирует тактовый сигнал для цифрового микрофона. Выборки звука принимаются через сигнал данных SPI (MISO).
Рис. 11. Подключение цифрового микрофона по протоколу SPI или I2S в конфигурации моно.
Если используется протокол SPI, то вывод выбора левого/правого канала (L/R, сигнал LR) может быть подключен либо к Vdd, либо к GND. Полярность тактов SPI должна соответствовать конфигурации входа L/R.
• Если L/R = GND, то SPI должен захватывать приходящие данные, используя фронт нарастания уровня SPIx_SCK. • Если L/R = Vdd, то SPI должен захватывать приходящие данные, используя спад уровня SPIx_SCK.
Если используется протокол I2S, то рекомендуется подключить выбор канала L/R (LR) микрофона к GND. По умолчанию протокол I2S захватывает приходящие данные по фронту I2Sx_CK. Обратите внимание, что блок SPI-V2 также предоставляет возможность конфигурирования перепада захвата для протокола I2S.
Формат данных. Выборки, захватываемые блоком SPI в режиме I2S или SPI, могут быть сохранены в память, используя DMA или сигнализацию прерываний. Регистр приема данных (SPIx_DR) предоставляет часть непрерывного потока бит от микрофона, как показано ниже для 16-битного формата:
M1_bxx представляет биты данных от цифрового микрофона 1, где M1_bN это самый старый бит.
Примечание: порядок следования бит принятых выборок может быть поменян на обратный, если интерфейс запрограммирован на получение первым младшего бита (LSB first) вместо получения первым старшего бита (MSB first). Обычно периферийные устройства поддерживают различные размеры данных, здесь это подробно не рассматривается.
Стерео. С помощью таймера можно подключить 2 цифровых микрофона к блоку SPI. Блок SPI может быть сконфигурирован в режиме SPI или I2S. В обоих случаях блок SPI конфигурируется в режиме master receiver. В этой конфигурации SPI работает на двойной частоте микрофона, чтобы прочитать данные от обоих микрофонов. Это позволяет двум микрофонам использовать общий сигнал данных.
Блок SPI предоставляет такты для встроенного таймера, который делит на 2 частоту тактов последовательного интерфейса (SPIx_SCK или I2Sx_CK). Поделенная частота поступает на цифровые микрофоны. Выборки звука захватываются периферийным устройством I2S через соединенные параллельно выходы данных цифровых микрофонов.
Рис. 12. Подключение двух цифровых микрофонов к блоку SPI в конфигурации стерео.
Примечание: в скобках указано имя сигнала, когда используется протокол I2S.
Использование таймера в качестве генератора тактов. Когда таймер используется для генерации тактов для двух цифровых микрофонов, следует учитывать два момента:
• Приложение должно гарантировать, что задержка, вводимая делением тактов с помощью таймера, все еще попадает в предел времени установки (setup time, TS) выборок, поступающих от микрофонов. Для этого таймер должен использовать максимально возможную высокую тактовую частоту. Максимальная задержка (TD), которую вводит таймер между входными (TIMxCHIN) и выходными (TIMxCHOUT) тактами составляет 5 тактов опорной частоты таймера. Таймеры обычно используют тактовую частоту APB или умноженную частоту APB в качестве своей опорной частоты (см. рис. 13). • Приложение должно гарантировать, что периферийные устройства, обеспечивающие такты на входе TIMxCHIN, и таймер, используемый для деления, работают от одной и той же опорной частоты тактов. Если не соблюдать это правило, то цифровой микрофон будет получать время от времени такты то с увеличенным, то с уменьшенным периодом. Этот джиттер тактов может снизить качество аналого-цифрового преобразования микрофона.
Рис. 13. Диаграммы времени сигналов режима стерео.
Примечание: Timer Delay (TD) задержка таймера, Setup time (TS) время установки данных, Hold time (TH) время удержания данных.
Формат данных. Выборки, полученные блоком SPI в режиме I2S или SPI, могут быть сохранены в памяти либо с помощью DMA, либо с помощью сигнализации прерываний. В этой конфигурации данные, прочитанные с микрофонов, представляют чередующиеся биты левого и правого каналов. Данные, сохраненные в регистр SPIx_DR в виде чередующегося потока показаны ниже в примере для формата 16 бит:
M1_bxx представляют биты данных цифрового микрофона 1, и M1_bN показывает самый старый бит. M2_bxx представляют биты данных цифрового микрофона 2, и M2_bN показывает самый старый бит.
Блоки SPI-V1 и SPI-V2 предоставляют несколько форматов данных. Например, можно изменить порядок следования поступающих бит, в зависимости от того, как запрограммирован интерфейс - можно запрограммировать, чтобы младший бит поступал первым (LSB first) вместо того, чтобы старший бит поступал первым (MSB first). Однако важно отметить, что в любом случае биты от микрофона 1 (M1) и биты от микрофона 2 (M2) всегда чередуются. Необходим программный модуль, который разбирает это чередование, генерируя отдельный сигнал для каждого из микрофонов, что нужно для последующего преобразования из PDM в PCM.
[Интерфейс SAI]
Интерфейс SAI (расшифровывается как Serial Audio Interface), встроенный в STM32, предоставляет микроконтроллеру возможность обмениваться данными с внешними звуковыми устройствами, такими как усилители, микрофоны, динамики или аудиопроцессоры. SAI состоит из двух независимых субблоков, которые могут работать синхронно или не синхронно. Каждый субблок предоставляет свой собственный генератор тактов звука. Некоторые SAI также предоставляют выделенный интерфейс PDM, который может поддерживать до 8 цифровых микрофонов.
Использование одного субблока в конфигурации моно. Цифровой микрофон подключен к одному из субблоков периферии SAI в конфигурации моно. Субблок SAI сконфигурирован в режиме в режиме master receive. В этой конфигурации субблок SAI предоставляет такты для цифрового микрофона. Выборки звука, захваченные субблоком SAI с выхода цифрового микрофона (DOUT) через вывод последовательных данных (Serial Data, SD).
Рис. 14. Подключение цифрового микрофона через SAI в конфигурации моно.
Примечание (1): x обозначает субблок A или B.
Ножка выбор L/R канала (LR) микрофона может быть подключена либо к Vdd, либо к GND. Микрофон выводит данные по фронту или спаду поступающих тактов в зависимости от выбранного канала. Перепад выборки тактов SAI должен быть сконфигурирован соответствующим образом.
Примечание: другой субблок SAI полностью независим, и может использоваться для другой цели. Например, его можно подключить в внешнему аудиокодеку.
Формат данных. Выборки, захваченные субблоком SAI, могут быть сохранены в памяти с использованием либо DMA, либо сигнализации прерываний. Регистр прима данных (SAI_ADR, SAI_BDR) предоставляет часть непрерывного потока бит от микрофона, наподобие показанного ниже:
M1_bxx представляет биты данных от цифрового микрофона 1, и M1_bN представляет позицию самого старого бита в регистрах SAI_ADR и SAI_BDR. Например, если биты DS[2:0] установлены в 010 (8 бит), то k равно 7.
Разрядность данных, сохраненных в регистры SAI_ADR/SAI_BDR, зависит от размера данных (DS[2:0]), в дополнение к битам SLOTSZ[1:0], которые должны быть установлены в 0.
Обратите внимание, что порядок бит принимаемых выборок может быть поменян на обратный, если запрограммировать в интерфейсе получение первыми младших бит (LSB first) вместо получения первыми старших бит (MSB first).
Примечание: данные в регистрах SAI_ADR/SAI_BDR всегда выровнены вправо.
Конфигурация стерео. Два цифровых микрофона могут быть подключены к одному из субблоков SAI с помощью внутреннего таймера. Субблок SAI также конфигурируется в режиме master receiver. В этой конфигурации субблок SAI работает на двойной частоте тактов микрофона, чтобы прочитать данные от обоих микрофонов, по одному и тому же перепаду их тактов. Это позволяет совместно использовать один сигнал данных для двух микрофонов (см. рис. 15).
Субблок SAI предоставляет такты (SAI_SCK_x) для встроенного таймера, который делит частоту на 2. Поделенная частота тактов поступает на цифровые микрофоны.
Примечание: другой субблок SAI полностью независим, и может использоваться для другой цели. Например, его можно подключить в внешнему аудиокодеку.
Диаграмма времени, показанная на рис. 13, также соответствует этому случаю подключения. Также см. выше секцию "Использование таймера в качестве генератора тактов" для рекомендаций по использованию таймера.
Рис. 15. Подключение двух цифровых микрофонов к SAI в конфигурации стерео при использовании одного субблока SAI и таймера.
Примечание (1): x обозначает субблок A или B.
Формат данных. Выборки, захваченные субблоком SAI, могут быть сохранены в память с использованием либо DMA, либо сигнализации прерываний. В этой конфигурации биты данных, прочитанные из микрофонов, чередуются друг за другом - бит одного микрофона, бит другого, и так далее. Данные в регистре SAI_ADR/SAI_BDR, как показано в примере ниже:
M1_bxx представляют биты данных от микрофона 1, и M1_bN представляет самый старый бит. M2_bxx представляют биты данных от микрофона 2, и M2_bN представляет самый старый бит. Символ k обозначает позицию бита в регистре SAI_ADR/SAI_BDR, например если DS[2:0] установлены в 100 (16 бит), то k равно 15. Размер данных, сохраненных в регистры SAI_ADR/SAI_BDR, зависит от программирования размера данных (DS[2:0]), дополнительно биты SLOTSZ[1:0] должны быть установлены в 0.
Примечание: порядок следования бит принятых выборок может быть поменян на обратный, если интерфейс запрограммирован на получение первым младшего бита (LSB first) вместо получения первым старшего бита (MSB first). Однако следует отметить что в любом случае поступающие биты от микрофонов сохраняются с чередованием. Данные в регистрах SAI_ADR/SAI_BDR всегда выровнены вправо. Необходим программный модуль, который разбирает это чередование, генерируя отдельный сигнал для каждого из микрофонов, что нужно для последующего преобразования из PDM в PCM.
Использование двух синхронных субблока SAI. К периферии SAI могут быть подключены два цифровых микрофона с использованием встроенного таймера и синхронно работающих двух субблоков SAI. Каждый микрофон подключен к отдельному субблоку SAI. Один из субблоков SAI сконфигурирован в режиме master receive, в то время как другой субблок сконфигурирован в синхронном режиме slave receive. В этой конфигурации субблок, сконфигурированный в режиме master, предоставляет тактовую частоту как для цифровых микрофонов, так и для другого субблока SAI. Два субблока SAI синхронно считывают даных от микрофонов.
Рис. 16. Подключение двух цифровых микрофонов к SAI в конфигурации стерео, когда задействовано два синхронных субблока SAI.
Поскольку два микрофона не используют общую линию данных, ножка выбора канала L/R (LR) микрофона может быть подключена либо к Vdd, либо к GND. Выходные данные микрофонов захватываются либо по фронту, либо по спаду тактов, в зависимости от выбранного канала. Полярность тактов каждого субблока SAI должна быть сконфигурирована соответствующим образом.
Формат данных. Выборки, захваченные каждым субблоком SAI, могут быть сохранены в память либо с использованием DMA, либо по сигнализации прерываний. В этом случае запрашивается использование до 2 каналов DMA. Для каждого из субблоков используется такой же формат данных, который был описан в моно-конфигурации SAI.
Использование интерфейса PDM. Интерфейс PDM предоставляется для поддержки цифровых микрофонов. До 4 пар цифровых микрофонов можно подключить параллельно. Интерфейс PDM также предоставляет линии задержки, чтобы выполнить микрозадержки в каждом поступающем битовом потоке, что упрощает приложению формирование луча. Глубина каждой ячейки задержки составляет 8 выборок цифрового потока.
Функция PDM предназначена для использования совместно с субблоком SAI_A, сконфигурированном в master-режиме Time Division Multiplexing (TDM). Это не может использоваться с субблоком SAI_B.
Для уменьшения расхода памяти пользователь может выбрать количество микрофонов, которое требуется приложению. Можно выбрать 2, 4, 6 или 8 микрофона.
Например, если приложение использует 3 микрофона, то пользователь должен выбрать 4. В этом случае данные PDM захватывают через SAI_D1 и SAI_D2. SAI_D1 принимает данные от первой пары микрофонов, в то время как SAI_D2 принимает данные от третьего микрофона.
Таблица 5 показывает рекомендуемое количество линий IO в зависимости от количества подключенных цифровых микрофонов.
Таблица 5. Количество линий IO в зависимости от количества подключенных цифровых микрофонах.
Микрофонов
Рекомендуемые линии данных
Рекомендуемые линии тактов
1 или 2
SAI_D1
SAI_CK1, SAI_CK2, SAI_CK3 или SAI_CK4
3 или 4
SAI_D1 и SAI_D2
5 или 6
SAI_D1, SAI_D2 и SAI_D3
7 или 8
SAI_D1, SAI_D2, SAI_D3 и SAI_D4
Микрофоны могут тактироваться от одного и того же тактового сигнала SAI_CKx (x=0...3) или отдельно от разных SAI_CK, давая пользователю гибкость в разрешении или запрете получения аудио от отдельных микрофонов, в зависимости от приложения.
SAI работает на выбранном количестве микрофонов (2, 4, 6 или 8), кратном частоте микрофона, чтобы иметь возможность считывания данных со всех микрофонов в приложении.
Рис. 17. Возможности интерфейса PDM по подключению до 4 пар микрофонов.
Интерфейс PDM интерфейса SAI предоставляет оптимальное подключение к цифровому микрофону, с максимальной экономией линий IO, насколько это возможно. Дополнительно интерфейс PDM может побайтно разделить данные каждого микрофона, избавляя от операции удаления чередования бит.
Формат данных. Выборки, захватываемые субблоком SAI_A, могут быть сохранены в память с помощью одного канала DMA или по сигнализации прерываний. Регистр принимаемых данных (SAI_ADR) предоставляет 8 следующих друг за другом бит, как показано ниже:
Рис. 18. Формат данных при использовании интерфейса SAI PDM с размером слота 32 бита и 8 микрофонами.
Размер данных, сохраненных в SAI_ADR, зависит от программирования нескольких параметров SAI, см. руководство пользователя SAI для получения дополнительной информации о формате данных, когда используется интерфейс PDM.
Обратите внимание, что если размер слота установлен на 8 бит, то SAI_ADR содержит только байт данных от одного микрофона. SAI_ADR должен быть прочитан 8 раз для получения одного бата от 8 микрофонов.
Рис. 19. Формат данных при использовании интерфейса SAI PDM с размером слота 8 бит и 8 микрофонами.
[Интерфейс DFSDM]
DFSDM расшифровывается как Digital Filter for Sigma Delta Modulators, цифровой фильтр для сигма-дельта модуляторов, это цифровое периферийное устройство в STM32. Оно работает как стандартный ADC с масштабируемым скоростью/разрешением и внешним аналоговым фронт-эндом.
Цифровые MEMS-микрофоны предоставляют выходные данные в формате PDM, которые могут быть напрямую направлены в DFSDM. DFSDM предоставляет отфильтрованные и прошедшие децимацию выборки. Каждый фильтр имеет свой собственный канал DMA, вследствие чего выборки каждого канала разделяются. Это позволяет приложению избежать тяжелой нагрузки операций фильтрации и удаления чередования бит. И наконец некоторые блоки DFSDM предоставляют линии задержки, чтобы выполнить микрозадержки в каждом приходящем битовом потоке, что упрощает приложению формирование луча. Глубина каждой линии задержки равна как минимум коэффициенту децимации.
Можно подключить несколько цифровых микрофонов к одному DFSDM. Это зависит от количества интегрированных фильтров и количества интерфейсов.
DFSDM предоставляет тактовый выходной сигнал (DFSDM_CKOUT) для управления цифровыми микрофонами. У тактового выхода есть настраиваемый коэффициент деления. DFSDM_CKOUT может быть выведен на различные IO, давая пользователю гибкость при разрешении или запрете захвата звука от различных микрофонов, в зависимости от приложения. Конфигурация показана на рис. 20, DFSDM интерфейс с 4 цифровыми микрофонами, что обычно использует в приложениях с низким потреблением энергии: цифровой микрофон M1 может работать, в то время как другие переключаются в режим пониженного потребления энергии, поскольку они не тактируются. Чтобы сохранить больше энергии, также можно выключить M3 и M4.
Когда нужно активировать все микрофоны, одна и та же тактовая частота подается на все микрофоны через два разных вывода (PAD).
Рис. 20. Возможность DFSDM для подключения до 4 цифровых микрофонов.
Конфигурация стерео. Два цифровых микрофона подключаются к DFSDM в конфигурации стерео. DFSDM должен активизировать два соседних канала, управляемых внутренним тактовым сигналом. Периферийное устройство DFSDM предоставляет внешний тактовый сигнал (DFSDM_CKOUT) для подачи на цифровые микрофоны. В этой конфигурации DFSDM программируется так, чтобы позволить каналам x и x-1 принимать данные от вывода DFSDM_DATINx. Каждый канал читает данные на разных перепадах тактов, позволяя двум микрофонам использовать одну линию данных. Затем каждый канал перенаправляет захваченные данные на различные фильтры DFSDM для обработки.
Рис. 21. Конфигурация стерео.
Примечания:
1. x может быть от 1 до n, где n это количество каналов в DFSDM. 2. y может быть от 1 до m, где m это количество фильтров в DFSDM.
Формат данных. Данные, захваченные каждым цифровым фильтром, могут быть сохранены в память с использованием выделенного канала DMA или с использованием сигнализации прерываний. Здесь нет чередования, каждый фильтр предоставляет преобразованные выборки одного микрофона. Количество запрашиваемых каналов DMA равно количеству активированных цифровых фильтров.
[Тактирование]
Такты цифрового микрофона. Такты, предоставленные для цифрового микрофона, должны выполнять несколько функций:
• Когда такты отсутствуют, или имеют очень низкую частоту (см. даташит на используемый микрофон), то цифровой микрофон переключается в режим низкого энергопотребления. • Когда тактовая частота низкая (обычно между 400 и 800 кГц), микрофон работает в режиме пониженного потребления. Это означае, что происходит незначительное ухудшение его рабочих характеристик, чтобы максимально снизить энергопотребление. Эта функция недоступна для всех микрофонов. Такты должны быть максимально чистые, с малым джиттером. • И наконец, когда тактовая частота высокая (примерно от 1 до 4.8 МГц), микрофон работает в своем номинальном режиме. Такты также должны быть чистыми насколько это возможно, с минимальным джиттером. Имейте в виду, что допустимый диапазон частот тактов зависит от используемого микрофона, см. его даташит.
Следует также отметить, что когда цифровой микрофон только что вышел из режима пониженной потребляемой мощности из-за того, что его тактовый сигнал становится активным или находится в обнаруженном частотном диапазоне, требуется несколько миллисекунд времени, прежде чем микрофон предоставит выборки с ожидаемым качеством.
В таблице 6 показаны некоторые примеры приложений и связанные с ними тактовые частоты микрофона.
Таблица 6. Примеры приложений и соответствующие тактовые частоты микрофона.
Вариант использования
Тактовая частота для цифрового микрофона
Захват звука
От 400 до 800 кГц
Обработка голоса
От 1 до 1.5 МГц
Высококачественный звук
От 2.4 до 4.8 МГц
Тактирование периферийных устройств. Чтобы выбрать реализацию, приложение должно также учитывать возможности тактирования, которые микроконтроллер предоставляет для SPI, SAI или DFSDM. Также важно проверить возможности тактового генератора, встроенного в SPI, SAI и DFSDM.
Обычно блоки звуковых периферийных устройств имеют два тактовых входа:
• Такты, используемые для регистрового интерфейса управления (наподобие тактов шины APB). • Такты, используемые для генерации тайминга последовательного интерфейса, которые называются тактами ядра.
В соответствии с выбранным периферийным устройством и протоколом генератор тактов периферийного устройства использует интерфейс шины или выделенные опорные такты. Например, SPI-V1 использует такты APB в качестве опорных, если используется протокол SPI, в то время как протокол I2S использует такты I2S.
Управление частотой APB обычно не такое гибкое, как выделенные такты. Одна из причин в том, что такты APB влияют на все периферийные устройства, подключенные к этой шине APB. Однако в случае, когда для поддержки стереофонической конфигурации микрофонов используется таймер (наподобие таких же тактов, как и у таймера), решается одна из проблем, перечисленных выше в секции "Использование таймера в качестве генератора тактов".
Некоторые микроконтроллеры также имеют возможность предоставить копию тактов APB в качестве тактов ядра.
Рис. 22. Топология тактирования шины и ядра для SPI.
Другие периферийные устройства (SPI-V2, SAI и DFSDM) всегда предоставляют выделенные такты ядра для реализации тактирования. Эта опция более гибкая, и делает желаемую тактовую частоту независимой от частоты интерфейса шины.
Рис. 23. Топология тактирования шины и ядра для SAI и DFSDM.
Примечание: DFSDM предоставляет возможность выбрать либо независимые такты периферии (тактирование звука), либо выбрать такты DFSDM, которые синхронны с частотой тактов APB.
[Использование GPIO]
Эта секция поможет пользователю выбрать наиболее подходящее периферийное устройство STM32 (SPI, I2S, SAI, DFSDM) для подключения цифровых микрофонов в определенном приложении, в соответствии с количеством используемых ножек GPIO.
Таблицы 7, 8 и 9 показывают аппаратуру, используемую для подключения соответственно одного, двух и четырех цифровых микрофонов к различным звуковым и последовательным интерфейсам.
• Столбец "Количество GPIO" показывает количество ножек GPIO, необходимых для подключения цифровых микрофонов к звуковому интерфейсу. • Столбец "Таймер" показывает, нужен ли аудиоинтерфейсу таймер для формирования подходящих тактов для микрофонов.
Таблица 7. Аппаратура, используемая для подключения одного цифрового микрофона.
Интерфейс
Количество GPIO
Таймер
SPI
2
Нет
I2S
2
Нет
SAI
2
Нет
DFSDM
2
Нет
Таблица 8. Аппаратура, используемая для подключения двух цифровых микрофонов.
Интерфейс
Количество GPIO
Таймер
SPI
4
Да
I2S
4
Да
SAI
4
Да
SAI (два синхронных субблока)
4
Нет
SAI с интерфейсом PDM
2
Нет
DFSDM
2
Нет
Таблица 9. Аппаратура, используемая для подключения четырех цифровых микрофонов.
Интерфейс
Количество GPIO
Таймер
SAI (два синхронных субблока)
6
Да
SAI с интерфейсом PDM
3
Нет
DFSDM
3
Нет
[Цифровая обработка сигнала]
В этой секции представлены 2 способа преобразования данных PDM в данные PCM. Первый способ программный, когда используется специальная библиотека декодирования звука PDM, и второй способ аппаратный, использующий фильтры DFSDM.
Программная библиотека декодирования PDM. Библиотека декодирования звука PDM это оптимизированное программное обеспечение для реализации декодирования PDM и реконструкции сигнала, когда к STM32 подключаются MEMS-микрофоны. В этой библиотеке реализовано несколько фильтров для 1-битного высокочастотного выходного сигнала PDM цифрового микрофона, и есть преобразование этого сигнала в стандартный 16-битный формат PCM на правильной частоте выборок звука.
Как уже упоминалось, цифровой MEMS-микрофон выводит сигнал PDM, который представляет собой высокочастотный (от 1 до 3.25 МГц) поток 1-битных цифровых выборок. Данные PDM захватываются последовательным интерфейсом, встроенным в STM32. Эти данные перемещаются через DMA (что снижает вычислительную нагрузку) в системный буфер RAM для обработки. После преобразования сырые данные PCM могут быть обработаны в зависимости от приложения (сохранены как WAV/сжатые данные на носитель данных, переданы на внешний аудио кодек DAC).
Рис. 24. Блок-схема захвата цифровых данных и их обработки.
Библиотека декодирования звука PDM предоставляет 2 шага цифровой обработки сигнала: цифровой фильтр PDM и децимация, а также кондиционирование цифрового сигнала.
Рис. 25. Цифровая обработка сигнала.
На первом шаге сигнал PDM от микрофона фильтруется и децимируется, чтобы получить звуковой сигнал нужной частоты выборок и нужного разрешения.
На втором шаге цифровой звуковой сигнал, вышедший из предыдущего конвейера фильтра, дополнительно обрабатывается до нужной кондиции реализацией ФНЧ и ФВЧ. Оба этих фильтра могут быть разрешены/запрещены и сконфигурированы (по частотам среза) с использованием функции инициализации фильтра.
Примечание: в конфигурации стерео, если 2 микрофона используют общий сигнал данных, то в результате от микрофонов получаются данные PDM с чередованием. Поэтому программа выполняет дополнительный шаг удаления чередования, что необходимо для разделения данных двух микрофонов перед выполнением преобразования PDM в PCM.
Фильтры DFSDM для цифровой обработки сигнала. Цифровой MEMS-микрофон выводит сигнал PDM, который представляет собой высокочастотный (от 1 до 3.25 МГц) поток 1-битных цифровых выборок. Данные захватываются последовательным трансивером DFSDM, который предоставляет соединение с внешним Sigma-Delta модулятором цифрового микрофона. Цифровые фильтры выполняют аппаратную фильтрацию (не нагружая CPU), которая усредняет 1-битный входной поток данных от модулятора SD в поток данных более высокого разрешения и более низкой частоты дискретизации (получаются сырые данные PCM). Эти данные перемещаются через DMA (что снижает вычислительную нагрузку) в системный буфер RAM для последующей фильтрации. После этого сырые данные PCM могут быть обработаны в зависимости от приложения (сохранены как WAW/сжатые данные на носитель данных, переданы на внешний аудио кодек DAC).
Рис. 26. Блок-схема захвата цифровых данных и их обработки с использованием DFSDM.
[Примеры конфигураций, основанных на STM32CubeMX]
В этой секции показано выполнение различных шагов, необходимых для создания базового звукового приложения, которое захватывает данные PDM с цифровых микрофонов в режимах моно или стерео, и затем преобразует их в данные PCM.
Основные шаги состоят в выборе правильной конфигурации аппаратуры и генерации кода инициализации на языке C, используя утилиту STM32CubeMX. На втором шаге добавляется соответствующий код пользователя к сгенерированному проекту. В завершении дается ссылка на пакет примеров STM32Cube_FW звуковых приложений, и на пакетт X-CUBE-MEMSMIC1 для завершения построения необходимого кода пользователя каждого примера.
В этой секции подразумевается следующее:
• Пользователю нужно получить данные PCM с частотой дискретизации 16 или 48 кГц. • Цифровой микрофон принимает частоту тактов в 64 раза выше, чем частота дискретизации потока PCM (передискретизация на 64).
Этот пример основан реализован на плате разработчика NUCLEO-F413ZH, и использует внешние цифровые микрофоны, подключенные через I2S, SPI или SAI.
Чтобы получить данные PCM с частотой дискретизации 16 кГц, частота тактов микрофона, генерируемая интерфейсом, должна быть 1.024 МГц для режима моно и 2.048 МГц для режима стерео. Чтобы получить данные PCM с частотой дискретизации 48 кГц, частота тактов микрофона, генерируемая интерфейсом, должна быть 3.072 МГц для режима моно и 6.144 МГц для режима стерео.
[Конфигурация I2S, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. Из перечисленного оборудования на закладке Pinout выберите периферийное устройство I2S2, и сконфигурируйте его в режиме Half-duplex master. Рис. 27 показывает, как это делается.
Рис. 27. Конфигурация ножек GPIO для интерфейса I2S.
Разрешенные ножки I2S2_SD, I2S2_CK и I2S2_WS, выделяются зеленым цветом, как только GPIO периферии I2S корректно сконфигурированы.
Примечание: в этом примере ножка I2S2_WS не используется. Она может быть освобождена и превращена в обычный порт GPIO для выполнения других функций, что делается путем небольшой модификации кода в файле инициализации MSP (stm32f4xx_hal_msp.c) после завершения генерации проекта.
Конфигурация тактирования. Здесь описываются различные конфигурации тактов I2S в режимах моно и стерео для потоков PCM с частотой дискретизации 16 кГц и 48 кГц. В качестве базового источника тактирования используется кварц HSE = 8 МГц.
В режиме стерео таймер и I2S должны использовать такты от одного и того же источника, по этой причине PLLR выбран как источник тактов для I2S.
Примечание: в столбце "Точность (ppm)" таблицы 10 приведена ошибка, показывающая разницу между ожидаемой частотой выборок звука и реальной частотой. Единица ppm показывает, сколько значений приходится на миллион (ppm расшифровывается Parts Per Million).
Примечание (1): чтобы все работало правильно, тактовая частота I2S должна быть выше, чем его частота APB.
Рис. 28 показывает пример конфигурации тактирования I2S в режиме моно.
Рис. 28. Конфигурация тактов I2S, созданная утилитой STM32CubeMX.
Конфигурация I2S. Выберите закладку конфигурации (Configuration), и затем кликните на кнопку I2S2, как показано на рис. 29.
Рис. 29. Конфигурация I2S.
a) Установка параметров I2S.
В окне конфигурации I2S выберите закладку установки параметров (Parameter Settings) и сконфигурируйте параметры I2S следующим образом:
• Selected Audio Frequency (выбранная частота дискретизации звука) = AUDIO_SAMPLING_FREQUENCY • Communication Standard = MSB First (Left Justified): I2S считывает данные по спаду уровня тактов. В конфигурации моно ножка LR (L/R) микрофона должна быть соединена с GND.
Рис. 30 показывает пример настройки конфигурации I2S для Audio Sampling Frequency = 16 кГц в режиме моно.
Рис. 30. Установка параметров I2S.
b) Конфигурация I2S DMA.
В этом примере DMA обрабатывает перемещение данных PDM от I2S в память. В окне конфигурации I2S выберите закладку DMA Settings и добавьте запрос DMA (DMA Request). Рис. 31 показывает, как разрешить DMA.
Рис. 31. Настройка I2S DMA.
Чтобы завершить конфигурирование DMA, кликните на только что созданный запрос DMA, и выполните указания из врезки "Настройка запроса DMA", где приведено описание настройки DMA.
[Конфигурация SPI, выполненная с использованием STM32CubeMX]
Из аппаратных периферийных устройств, перечисленных на закладке Pinout, выберите периферию SPI1 и сконфигурируйте её в режиме Receive Only Master. Рис. 32 показывает, как это делается. Разрешенные выводы SPI1_SCK и SPI1_MISO будут выделены зеленым, когда правильно сконфигурированы ножки GPIO, работающие в режиме аппаратуры SPI.
Рис. 32. Конфигурация ножек GPIO, работающих в режиме SPI.
Конфигурация тактирования. Здесь описываются различные конфигурации тактов SPI в режимах моно и стерео для потоков PCM с частотой дискретизации 16 кГц и 48 кГц. В качестве базового источника тактирования используется кварц HSE = 8 МГц. SPI тактируется от частоты шины APB2.
Рис. 33 показывает пример конфигурации тактов SPI в режиме моно.
Рис. 33. Конфигурация тактов SPI, созданная утилитой STM32CubeMX.
Конфигурация SPI. Выберите закладку конфигурации (Configuration), затем кликните на кнопку SPI, как показано на рис. 34.
Рис. 34. Конфигурация SPI.
a) Установка параметров SPI.
В окне конфигурации SPI выберите закладку установки параметров (Parameter Settings) и сконфигурируйте параметры SPI.
В режиме моно полярность тактов Clock Polarity (CPOL) и фаза тактов Clock Phase (CPHA) выбираются в соответствии с состоянием ножки L/R (LR) микрофона.
Рис. 35 показывает пример конфигурации SPI для Audio Frequency = 16 кГц в режиме моно.
Рис. 35. Установка параметров SPI.
b) Конфигурация SPI DMA.
В этом примере DMA обрабатывает перемещение данных PDM от SPI в память. В окне конфигурации SPI выберите закладку DMA Settings и добавьте запрос DMA (DMA Request). Рис. 36 показывает, как разрешить DMA.
Рис. 36. Настройка I2S DMA.
Чтобы завершить конфигурирование DMA, кликните на только что созданный запрос DMA, и выполните указания из врезки "Настройка запроса DMA", где приведено описание настройки DMA.
[Конфигурация SAI, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. Из перечисленного оборудования на закладке Pinout выберите периферийное устройство SAI1, и разрешите его субблок A в режиме Master. Рис. 37 показывает, как это делается. Разрешенные выводы SAI1_SD_A, SAI1_SCK_A и SAI1_FS_A будут выделены зеленым, когда правильно сконфигурированы ножки GPIO, работающие в режиме аппаратуры SAI.
Рис. 37. Конфигурация ножек GPIO, работающих в аппаратном режиме SAI.
Примечание: в этом примере ножка SAI1FS_A не может использоваться. При необходимости она освобождается и превращается обратно в обычный вывод порта GPIO путем незначительной модификации кода в файле инициализации MSP (stm32f4xx_hal_msp.c) после того, как будет сгенерирован проект.
Конфигурация тактов. Закладка Clock Configuration устанавливает тактовую частоту SAI. Таблица 12 предоставляет значения точности установки частоты выборок звука для разных вариантов конфигурирования тактов. В качестве источника тактов SAI используется PLLI2SR.
Таблица 12. Конфигурации тактов и соответствующая точность установки частоты выборок звука.
Целевая частота выборок
Режим микрофона
DivM
PLLN
DivR
DivP
Такты SAI (МГц)
Точность (ppm)
16 кГц
Моно
5
128
5
6
40.96
0
Стерео (с таймером)
5
128
5
6
40.96
0
48 кГц
Моно
5
192
25
4
12.29
0
Стерео (с таймером)
5
192
25
4
12.29
0
Рис. 38 показывает пример конфигурирования тактов SAI.
Рис. 38. Конфигурация тактов SAI на частоте выборок 16 кГц для режима моно.
Конфигурация SAI. Выберите закладку конфигурации (Configuration) и кликните на кнопку SAI1, как показано на рис. 39.
Рис. 39. Конфигурация SAI.
a) Установка параметров SAI.
В окне конфигурации SAI выберите закладку Parameter Settings и сконфигурируйте параметры. Разрешенный субблок SAI конфигурируется следующим образом:
• Data Size = 16 Bits • Output Mode = Stereo (этот параметр устанавливается одинаково, независимо от того, сколько подключено микрофонов к SAI, один или два) • Companding Mode = No companding mode • Frame Synchro definition = Channel Identification • Number of Slots = 4 • Slot Active = All • Frame Synchro Active Length = Frame Length / 2 • Master Clock Divider = Enabled (другое возможное решение: Master Clock Divider = Disabled) • Audio Frequency = Audio Sampling Frequency • В режиме моно Clock Strobing выбирается в зависимости от состояния вывода L/R (LR) микрофона.
Рис. 40 показывает пример конфигурации SAI для Audio Frequency = 16 кГц в режиме моно.
Рис. 40. Настройка параметров SAI.
b) Конфигурация SAI DMA.
В этом примере DMA обрабатывает перемещение данных PDM от SPI в память. В окне конфигурации SAI выберите закладку DMA Settings и добавьте запрос DMA (DMA Request). Рис. 41 показывает, как разрешить DMA.
Рис. 41. Настройка SAI DMA.
Чтобы завершить конфигурирование DMA, кликните на только что созданный запрос DMA, и выполните указания из врезки "Настройка запроса DMA", где приведено описание настройки DMA.
[Таймер]
В режиме стерео таймер используется для деления тактовой частоты, генерируемой аудиоинтерфейсом, и передачи поделенной частоты на цифровые микрофоны.
Конфигурация GPIO и аппаратных выводов. На закладке Pinout выберите таймер 3 (TIM3) из перечисленных аппаратных периферийных устройств, и разрешите режим slave путем выбора External Clock Mode 1. Выберите TI1FP1 в качестве источника для триггера таймера (Trigger Source) и разрешите Channel 2 в PWM Generation CH2. Рис. 43 показывает, как разрешить TIM3. Используемые выводы TIM3_CH1 и TIM3_CH2 подсвечиваются зеленым, как только были корректно сконфигурированы ножки GPIO, привязанные к аппаратным функциям таймера TIM3.
Рис. 43. Конфигурация ножек GPIO таймера.
Конфигурация таймера. Выберите закладку конфигурации (Configuration) и кликните на кнопку TIM3, как показано на рис. 44.
Рис. 44. Конфигурация таймера.
Установка параметров таймера. В окне конфигурации TIM3 выберите закладку Parameter Settings. Рис. 45 показывает, как сконфигурировать TIM3 для деления на 2 частоты тактов Trigger Source.
Выберите используемую среду разработки, сгенерируйте проект с помощью STM32CubeMX и откройте в среде разработки сгенерированный проект.
Для STM32F413xx MCU библиотека декодирования звука PDM включает один файл заголовка pdm_filter.h и двоичные/объектные коды для следующих платформ:
• libPDMFilter_CM4F_IAR.a: для компилятора среды разработки IAR. • libPDMFilter_CM4F_Keil.lib: для компилятора ARM. • libPDMFilter_CM4F_GCC.a: для компилятора GNU.
Эта библиотека предоставляется в пакете STM32Cube_FW_F4 компании ST (начиная с версии V1.16), и она находится в каталоге Middlewares\ST\STM32_Audio\Addons\PDM. Убедитесь, что заголовочный файл pdm_filter.h находится среди путей поиска заголовочных файлов проекта (Include Paths) и также в проект добавлен соответствующий двоичный библиотечный файл.
Этот пример также основан на плате NUCLEO-F413ZH, и использует 2 внешних цифровых микрофона, каждый из которых подключен к отдельному субблоку SAI. Это один из допустимых вариантов аппаратного соединения, описанного выше в секции "Использование двух синхронных субблока SAI".
[Конфигурация SAI, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. После создания проекта STM32CubeMX выберите периферийное устройство SAI1 среди перечисленных на закладке Pinout периферийных устройств, сконфигурируйте субблок A в режиме Master и субблок B в режиме Synchronous Slave. Рис. 46 показывает, как это делается. Для этого случая сигнал тактов бит и синхронизации фрейма используются общими для двух субблоков, чтобы снизить количество внешних выводов для коммуникации с микрофонами. Разрешенные выводы SAI1_SD_A, SAI1_SD_B, SAI1_SCK_A и SAI1_FS_A подсвечиваются зеленым, как только были корректно сконфигурированы ножки GPIO, привязанные к аппаратным функциям SAI.
Рис. 46. Конфигурация ножек GPIO аппаратуры SAI.
Конфигурация тактов. Здесь описывается конфигурация тактов SAI с использованием двух синхронных субблоков для генерации потоков с частотой выборок 16 кГц и 48 кГц. Для получения выходных данных с частотой выборок 16 кГц частота тактов SAI должна быть 1.024 МГц. Для получения выходных данных с частотой выборок 48 кГц частота тактов SAI должна быть 3.072 МГц. В качестве источника тактов используется PLLI2SR. Чтобы получить точную частоту бит, необходимо соответствующим образом сконфигурировать MCKIDV.
Таблица 13. Конфигурация тактов SAI и соответствующая точность частоты выборок.
Целевая частота выборок
DivM
PLLN
DivR
Такты SAI (МГц)
Точность (ppm)
16 кГц
5
128
5
40.96
0
48 кГц
5
192
25
12.29
0
Рис. 47 показывает конфигурацию тактов SAI, используемую в этом примере.
Рис. 47. Конфигурация тактов SAI.
Установка параметров. В окне конфигурации SAI выберите закладку Parameter Settings и сконфигурируйте параметры. Субблоки SAI должны быть сконфигурированы следующим образом:
• Data Size = 16 Bits • Frame Length = 4 x Data Size • Output Mode = Stereo • Companding Mode = No companding mode • Frame Synchro definition = Channel Identification • Number of Slots = 4 • Slot Active = All • Frame Synchro Active Length = Frame Length / 2 • Master Clock Divider = Enabled • Audio Frequency = AUDIO_SAMPLING_FREQUENCY
Параметр Clock Strobing выбирается в соответствии с состояние вывода L/R (LR) микрофона, подключенного к каждому субблоку. Рисунки 48 и 49 показывают как конфигурировать соответственно субблоки SAIA и SAIB для получения частоты выборок звука (audio sampling frequency) 16 кГц.
Рис. 48. Настройка параметров SAIA.
Рис. 49. Настройка параметров SAIB.
Установка параметров DMA. В этом примере DMA обрабатывает перемещение данных PDM в память, поступающих от каждого субблока SAI. В окне конфигурации SAI выберите закладку DMA Settings и добавьте запрос DMA (DMA Request) для каждого субблока. Рис. 50 показывет, как разрешить DMA.
Рис. 50. Настройка DMA для субблоков SAI.
Для завершения настройки кликните на только что созданные запросы DMA и выполните указания из врезки "Настройка запроса DMA", где приведено описание настройки DMA.
Этот пример основан на плате NUCLEO-H743ZI и использует 2 цифровых микрофона, подключенных в режиме стерео к SAI через интерфейс PDM.
[Конфигурация SAI, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. После создания проекта STM32CubeMX выберите периферийное устройство SAI1 среди перечисленных на закладке Pinout периферийных устройств, и сконфигурируйте его в режиме Pulse Density Modulation. Выберите количество микрофонов и выходную тактовую частоту. Рис. 51 показывает, как разрешить субблок A интерфейса SAI1 в режиме Pulse Density Modulation с поддержкой двух микрофонов и CK1 в качестве выхода тактов. Разрешенные выводы SAI1_CK1 и SAI1_D1 подсвечиваются зеленым, как только были корректно сконфигурированы ножки GPIO, привязанные к аппаратным функциям SAI.
Рис. 51. Конфигурация ножек GPIO аппаратуры SAI.
Конфигурация тактов. Рис. 52 показывает конфигурацию тактов SAI для этого примера. Более подробно про конфигурацию тактирования см. таблицу "Allowed TDM frame configuration" в руководстве RM0433 [4].
Рис. 52. Конфигурация тактов SAI для двух микрофонов, чтобы получить PCM с частотой выборок 16 кГц.
Конфигурация SAI. Выберите закладку конфигурации (Configuration) и кликните на кнопку SAI1, как показано на рис. 53.
Рис. 53. Конфигурация SAI.
Установка параметров SAI. В окне конфигурации SAI выберите закладку Parameter Settings и сконфигурируйте параметры. Субблок A интерфейса SAI должен быть сконфигурирован следующим образом:
• Data Size = 16 Bits • Frame Length = 16 • Output Mode = Stereo • Companding Mode = No companding mode • Frame Synchro definition = Start Frame • Number of Slots = 1 • Slot Active = All • Frame Synchro Active Length = 1 • Frame Synchro Polarity = Active High • Master Clock Divider = Disabled
Рис. 54 показывает, как сконфигурировать субблок SAIA для получения частоты выборок звука (audio sampling frequency) 16 кГц.
Рис. 54. Настройка параметров SAI.
Настройки DMA. В этом примере DMA управляет перемещением данных PDM в память, поступающих от интерфейса SAI. В окне конфигурации SAI выберите закладку DMA Settings и добавьте запрос DMA (DMA Request). Рис. 55 показывает, как сконфигурировать DMA.
Рис. 55. Настройки SAI DMA.
Конфигурация Cortex M7. Выберите закладку конфигурации (Configuration) и кликните на кнопку CORTEX_M7, как показано на рис. 56.
Рис. 56. Конфигурация CORTEX_M7.
Установка параметров Cortex M7. В окне конфигурации CORTEX_M7 выберите закладку Parameter Settings для конфигурирования кеша (Cache) и блока защиты памяти (Memory Protection Unit, MPU). Это позволит улучшить производительность в случае использования интерфейса AXI с несколькими мастерами.
Для типовой конфигурации MPU обратитесь к проекту-шаблону в пакете STM32Cube_FW_H7_V1.0.0 (начиная с версии V1.0.0), который находится в каталоге Projects\STM32H743ZI-Nucleo\Templates.
Более подробно по конфигурацию и использование блока защиты памяти см. апноут AN4838 [5]. Рис. 57 показывает, как для этого примера конфигурируется Cache и MPU.
Рис. 57. Настройка параметров Cortex M7.
[Добавление библиотеки декодирования PDM]
Выберите используемую среду разработки (тулчейн), сгенерируйте проект в утилите STM32CubeMX и откройте проект в среде разработки.
Для серии микроконтроллеров STM32H7 библиотека декодирования PDM включает заголовочный файл pdm2pcm_glo.h и двоичные/объектные коды для следующих платформ:
• libPDMFilter_CM7_IAR.a: для компилятора среды разработки IAR. • libPDMFilter_CM7_Keil.lib: для компилятора ARM. • libPDMFilter_CM7_GCC.a: для компилятора GNU.
Эта библиотека предоставляется в пакете STM32Cube_FW_H7 (начиная с версии V1.0.0), и она находится в каталоге Middlewares\ST\STM32_Audio\Addons\PDM. Убедитесь, что добавили заголовочный файл pdm2pcm_glo.h в пути поиска заголовочных файлов проекта (Include Paths), и добавили в проект соответствующий двоичный файл библиотеки.
Этот пример основан на плате NUCLEO-F413ZH с использованием внешних цифровых микрофонов, подключенных к DFSDM в режиме стерео. Это применимо к конфигурации аппаратуры, описанной выше в разделе "Интерфейс DFSDM".
[Конфигурация DFSDM, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. После создания проекта STM32CubeMX выберите периферийное устройство DFSDM1 среди перечисленных на закладке Pinout периферийных устройств, и разрешите необходимые каналы DFSDM. Рис. 58 показывает, как разрешить каналы DFSDM в режиме стерео. В этом режиме разрешенные каналы должны следовать друг за другом в порядке возрастания номера канала.
Рис. 58. Конфигурация ножек GPIO аппаратуры DFSDM в режиме стерео.
Разрешенные выводы DFSDM1_DATIN1 и DFSDM1_CKOUT подсвечиваются зеленым, как только были корректно сконфигурированы ножки GPIO, привязанные к аппаратным функциям DFSDM, что показано на рис. 59.
Рис. 59. Конфигурация ножек DFSDM.
Конфигурация канала. В окне конфигурации DFSDM выберите закладку Parameter Settings и сконфигуруйте параметры. Значение поля Type выбирается в соответствии с состоянием ножки L/R (LR) микрофонов, подключенных к каналам DFSDM. В режиме стерео каждый канал должен считывать данные на разных перепадах тактов, чтобы микрофоны могли использовать общий сигнал данных.
Рисунки 60 и 61 показывают, как сконфигурировать каналы Channel 1 и Channel 0 соответственно для получения частоты выборок звука (Audio Frequency) 16 кГц.
Рис. 60. Конфигурация DFSDM Channel 1.
Рис. 61. Конфигурация DFSDM Channel 0.
Конфигурация фильтра. В этом примере Filter 0 и Filter 1 привязаны соответственно к Channel 1 и Channel 0 как к обычным каналам. Параметр Sinc Order конфигурируется в соответствии с частотой выборок звука (audio sampling frequency). Таблица 11 показывает эти возможные значения.
Таблица 11. Значения для порядка фильтра DFSDFM.
Целевая частота выборок
Порядок фильтра
16 кГц
Тип фильтра Sinc 4 или Sinc 5
48 кГц
Поле параметра Fosr содержит значение коэффициента децимации. На рисунках 62 и 63 показан пример конфигурации Filter 1 и Filter 0 для частоты выборок звука (Audio Sampling Frequency) 16 кГц.
Рис. 62. Конфигурация DFSDM Filter 0.
Рис. 63. Конфигурация DFSDM Filter 1.
Конфигурация выхода тактов. В этом примере Audio Clock выбирается как источник тактов для выхода тактов DFSDM, что дает больше гибкости в конфигурировании тактов.
Значение делителя тактов (Divider) должно соответствовать следующей формуле:
Divider = DFSDM Clock Source / (AUDIO_SAMPLING_FREQUENCY x DECIAMTION_FACTOR)
Рис. 64 показывает пример конфигурации DFSDM Clock Source = 48 МГц, Audio Sampling Frequency = 16 кГц и Decimation Factor = 64.
Рис. 64. Конфигурация выхода тактов DFSDM.
Настройки DFSDM DMA. В этом примере под управлением DMA в память перемещаются данные, поступающие от каналов DFSDM, что снижает вычислительную нагрузку на микроконтроллер.
В окне конфигурации DFSDM выберите закладку DMA Settings и добавьте запрос DMA (DMA Request) для каждого Filter. Кликните на только что созданные запросы DMA и сконфигурируйте настройки, как показано на рис. 65.
Рис. 65. Настройки DFSDM DMA.
Конфигурация тактов DFSDM. В этом примере выходные такты DFSDM генерируются из тактов аудио при подаче тактовой частоты 61.44 МГц на блок DFSDM, как показано на рис. 66.
Рис. 66. Конфигурация тактов DFSDM.
Таблица 15 предоставляет значения точности полученной частоты выборок звука (audio sampling frequency) для следующих конфигураций тактов:
• Для потока 16 кГц частота CKOUT должна быть 1.024 МГц. • Для потока 48 кГц частота CKOUT должна быть 3.072 МГц. • Коэффициент передискретизации равен 64.