Перейти к содержанию
    

stm32f4 + ICS43432 I2S цифровые микрофоны

Привет

Входные данные:

-STM32F4 Discovery Kit

- ICS43432 I2S цифровые микрофоны( https://www.tindie.com/products/onehorse/ic...tal-microphone/ https://store.invensense.com/datasheets/inv...CS-43432_DS.pdf )

Задача

-настроить совместную работу двух ус-в

 

Контроллер работает в качестве мастера те выдает SCK и WS на соответствующие входы микрофона

микрофон в свою очередь отдает данные. I2S можно передавать даные левого и правого каналов

 

 

Screenshot_56.png

 

В моем случае микрофонов два

даные выходяшие с микро имееют разрядность 24 бита

пользую простенький код для тестов

 

 

void SPI2_IRQHandler(void) {

  // Receiving data
  if(SPI_GetITStatus(SPI2, SPI_I2S_IT_RXNE) == SET) {
      uint16_t data = SPI2->DR;
  }
}
int main(void)
{
    //RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY));
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    RCC_PLLI2SCmd(ENABLE);

    //RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    // GPIO
    GPIO_InitTypeDef  GPIO_InitStructure;
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource12, GPIO_AF_SPI2);   // WCLK
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource13, GPIO_AF_SPI2);   // BCLK
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource15, GPIO_AF_SPI2); // SDATA

    GPIO_StructInit(&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15; // WCLK-BCLK-SDATA
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init (&NVIC_InitStructure);

    I2S_InitTypeDef I2S_InitStructure;
    I2S_StructInit(&I2S_InitStructure);
    SPI_I2S_DeInit(SPI2);
    I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_48k;
    I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips;
    I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
    I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
    I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b;
    I2S_InitStructure.I2S_Mode = I2S_Mode_MasterRx;
    I2S_Init(SPI2, &I2S_InitStructure);

    /* Enable the Rx buffer not empty interrupt */
    SPI_I2S_ITConfig (SPI2, SPI_I2S_IT_RXNE, ENABLE);
    /* Enable the I2S2 */
    I2S_Cmd(SPI2, ENABLE);

    while(1);
}

 

 

конфиг

Screenshot_51.png

 

 

 

Проблемы:

подключился анализатором чтоб за верефицировать правильность работы

SCK - частота плавает 3МГц - 3,429МГц

WS - 48,48кГц, 48,39кГц

SD - тут ваще каша(

 

время,канал,значение прешедшее с микро

0.468853083333333,2,0xFFF9A7

0.468863375000000,1,0x7FFF88

0.468873708333333,2,0xFFF33E

0.468884000000000,1,0x0000BB

0.468894333333333,2,0xFFF676

0.468904666666667,1,0x00023F

0.468914958333333,2,0x7FFF87

0.468925291666667,1,0x000612

0.468935625000000,2,0xFFFE47

0.468945916666667,1,0x000187

0.468956250000000,2,0xFFFE41

0.468966541666667,1,0x0004BE

0.468976875000000,2,0xFFFF9D

0.468987166666667,1,0x000778

0.468997500000000,2,0xFFFC3D

0.469007791666667,1,0x000046

0.469018125000000,2,0xFFFF2F

0.469028416666667,1,0x0003C3

0.469038750000000,2,0xFFFF20

0.469049041666667,1,0x000374

 

4.237883500000000,1,0x7FF8B8

4.237893833333334,2,0xFFFE1C

4.237904125000000,1,0x7FFA5C

4.237914458333333,2,0xFFFE67

4.237924791666667,1,0xFFF13C

4.237935083333333,2,0x7FFBFC

4.237945416666666,1,0xFFF711

4.237955750000000,2,0xFFFDC2

4.237966041666667,1,0x7FF48F

4.237976375000000,2,0xFFFC02

4.237986666666667,1,0x7FF348

4.237997000000000,2,0xFFFCD1

4.238007333333333,1,0xFFFE43

4.238017625000000,2,0x7FF87F

4.238027958333333,1,0xFFF678

4.238038291666666,2,0xFFF223

4.238048625000000,1,0xFFFC5B

4.238058916666667,2,0x7FFB40

4.238069250000000,1,0xFFF618

 

9.606433708333334,2,0x0003B9

9.606444000000000,1,0x7FFCC9

9.606454333333334,2,0x0002E1

9.606464624999999,1,0x7FFC37

9.606474958333333,2,0x0007E0

9.606485291666667,1,0xFFFEFD

9.606495583333333,2,0x000088

9.606505916666666,1,0xFFFE6F

9.606516250000000,2,0x000C5F

9.606526541666666,1,0x7FFCC6

9.606536875000000,2,0x000E3C

9.606547166666667,1,0x000087

9.606557499999999,2,0x000D3E

9.606567791666667,1,0x7FFF0B

9.606578125000000,2,0x000E63

9.606588458333333,1,0x0001B8

9.606598750000000,2,0x000718

9.606609083333334,1,0xFFFE7E

9.606619374999999,2,0x00070B

9.606629708333333,1,0x0000FF

9.606640000000001,2,0x00060C

 

те смущает наличие таких случаев тогда на смену уровня WS микрофон никак не реагирует

 

Screenshot_57.png

 

Спасибо)

 

 

 

 

 

post-48271-1477930819_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

" на смену уровня WS микрофон никак не реагирует "

 

А вы хотели увидеть 3-е состояние на шине? При наличии обоих ведомых? И при подтягивающем резисторе 100к?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Согласно рисунку иш даташита

 

 

Screenshot_58.png

 

микро должет реагировать на смену WS те должен перейти в HIGH-Z а начиная со второго периода должен выставить на шину валидные данные

и продолжатсо это должно до средины 25

 

НО реальные графики отличаются

 

 

Screenshot_59.png

 

Screenshot_60.png

 

есть какието идеи почему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Последняя картинка очень похожа на правду. У Вас, похоже, не аналоговый осциллограф, а логический. Как Вы собирались смотреть на нем tristate? Кроме того, на этих микрофонах довольно дохлый выход, вопрос - какая подтяжка у Вас используется? Чтобы увидеть tristate как он нарисован в DS, нужно подвесить два резистора - один к земле, другой к питанию. И осциллограф должен отображать не два уровня.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Вас, похоже, не аналоговый осциллограф, а логический.

так и есть(

 

Кроме того, на этих микрофонах довольно дохлый выход, вопрос - какая подтяжка у Вас используется?

используем готовое решение https://www.tindie.com/products/onehorse/ic...al-microphone/#

нет редактора PCB( глянуть номинал резисторов мож посоветуете?

 

из даташита

The SD trace should have a pulldown resistor to discharge the line during the time that all microphones on the bus have tri-stated their outputs. A 100 kΩ resistor is sufficient for this, as shown in Figure 10. If the SD line needs to be discharged faster than a 100 kΩ resistor can, a smaller resistor, such as 10 kΩ, can be used

 

 

Screenshot_61.png

 

пробывал 10к 100к какбы лучше не становилось

 

Чтобы увидеть tristate как он нарисован в DS, нужно подвесить два резистора - один к земле, другой к питанию. И осциллограф должен отображать не два уровня.

Спасибо за лекбез я к вам из страны где правят компиляторы))

Изменено пользователем rukudia

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Чтобы увидеть tristate как он нарисован в DS" - молодцы!!! 5 баллов… Вы бы ещё точно такой же сигнал "SD (24-BIT)" (глазковый) как в DS попытались получить (: - ШУТКА.

 

ТС, вы данные с микрофонов на ЦАП выведите, а в микрофоны побубните (:

Судя по "осциллограммам", всё у вас нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...