Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: микрофон в STM32F4-DISCOVERY не должен работать, а работает
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
victorovich2004
Добрый день.
Обнаружил странную особенность в discovery касательно микрофона, особенность подтвердилась и при разработке собственной платы с микрофоном на базе STM32F4
Суть в том, что вывод DATA микрофона подключен к MOSI-пину контроллера, а не MISO! И в тестовом примере, идет инициализация этого пина как MOSI при типе инициализации MasterRX (т.е. контроллер принимает). А какой же здесь MOSI, когда должен быть MISO! Т.е. Master принимает, а Slave отдает данные. Но не наоборот! Почему тогда это работает?
Когда сделали свою плату и начали инициализировать нужный для MISO-пин, то ничего не работало - контроллер не принимал данные. Переключились на MOSI - все пошло.
Просьба объяснить, что за бред? По-другому не назовешь.
Спасибо.
Tarbal
MOSI Master Output Slave Input
MISO Master Input Slave Output
Как видно из названия, ножки меняют свое направление в зависимости от роли устройства.
Мастер тот кто дает синхроимпульсы. Когда вы определите кто в шине мастер, то все встанет на свои места.
victorovich2004
Определения из википедии я читал, спасибо.
Master - это контроллер и инициализируется в режиме MasterRx (т.е. контроллер получает),
следовательно в таком режиме микрофон должен отдавать данные как Slave в пин Master Input Slave Output (т.е. Slave-микрофон данные отдает).
А по факту микрофон подключен на пин для которого допустима инициализация только в режиме MOSI и в примерах константы описаны как MOSI. С MISO контроллер данные не принимает. Почему?

Вот части кода из стандартного примера waverecorder.c:
Код
  I2S_InitStructure.I2S_AudioFreq = Freq*2;//i2s two channel mode
  I2S_InitStructure.I2S_Standard = I2S_Standard_LSB;
  I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b;
  I2S_InitStructure.I2S_CPOL = I2S_CPOL_High;
  I2S_InitStructure.I2S_Mode = [b]I2S_Mode_MasterRx[/b];
  I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;

#define SPI_[b]MOSI[/b]_PIN                      GPIO_Pin_3
#define SPI_[b]MOSI[/b]_GPIO_PORT                GPIOC
#define SPI_[b]MOSI[/b]_GPIO_CLK                 RCC_AHB1Periph_GPIOC
#define SPI_[b]MOSI[/b]_SOURCE                   GPIO_PinSource3
#define SPI_[b]MOSI[/b]_AF                       GPIO_AF_SPI2

Исходя из документации пин PC3 может быть инициализирован только как MOSI.

Вот и мой вопрос - почему в режиме MasterRx данные приходят через MOSI ???
Tarbal
У вас две шины I2S и SPI. Мастер в I2S фиолетово для SPI. В каждой из шин мастер и слейв выбираются независимо.
victorovich2004
Вы могли бы конкретно ответить на мой вопрос - почему с микрофона discovery данные поступают в MOSI-пин, а не MISO? По такой логике мастером должен быть микрофон, но тогда режим инициализации был бы MasterTx, а не MasterRx как в стандартном примере.
Tarbal
Цитата(victorovich2004 @ Apr 11 2016, 14:27) *
Вы могли бы конкретно ответить на мой вопрос - почему с микрофона discovery данные поступают в MOSI-пин, а не MISO? По такой логике мастером должен быть микрофон, но тогда режим инициализации был бы MasterTx, а не MasterRx как в стандартном примере.


Так ответил же очень даже конкретно. Ну если вам разжевать до деталей, то пожалуйста:
По SPI микрофон является мастером. Судя по всему по i2s микрофон slave. Вы отчего-то полагаете, что раз по i2s микрофон slave, то и по SPI он тоже должен быть slave. Ваше предположение ошибочно.
victorovich2004
Спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.