Stm32 в Arduino IDE, проблема с шиной I2C

Всем привет!!! В общем проблемка такая, есть парочка аудиопроцессоров, ADAU1701, ADAU1452. Есть отладочная плата на stm32f407vet6, заливаю в нее i2cscaner стандартный, и вот отсюда начинается собственно проблема. Отладочная плата ни в какую не хочет общаться с adau1452, она просто говорит что устройство не найдено, при этом с процессором adau1701 работает отлично, так же отлично работает с цапом es9038. И я бы уже подумал что у меня процессор нерабочий, но есть программатор для этих процессоров USBI, так вот через него все заливается и работает, так же если залить тот же i2cscanner в плату ардуино уно, то она прекрасно видит аудио процессор. Собственно вопрос, сталкивался ли кто с чем то подобным? и как с этим бороться?

нет, я не сталкивался, ибо не знаю как в вашем случае

подключена к

и как инициализируются вышеупомянутые интерфейсы.

если все как и положено, то и проблем быть не должно.

1 лайк
#include <Wire.h>


void setup() {

  Serial.begin(9600);
  Wire.setSDA(PB7);
  Wire.setSCL(PB6);                                      
  Wire.begin();
  Serial.println("\nI2C Scanner");
}


void loop() {
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++) {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.

    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);

      nDevices++;
    }
    else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found");
  else
    Serial.println("done");

  delay(5000);           // wait 5 seconds for next scan
}

Стандартный пример для стм32 из ардуино IDE, адрес у процессора без смещения 0х78, со смещением 0х38, но плата в упор не видит его, при этом спокойно обнаруживает 1701 и флешку еепром, цапы и прочие устройства, проблема именно с процессором 1452, в документации на него сказано что что там 7 бит и нулевой бит R/W, в общем все стандартно

А у этих ADAU1701, ADAU1452 какая макс. скорость по I2C? Может стоит снизить? Вставьте после 9-й строки Wire.setClock(50000); например. Тут частота указывается в герцах.

1 лайк

А осциллограф есть ? Может с подтяжкой что не так в варианте с STM ?

1 лайк

в STM32 (да и вообще применительно ко всему) отлаживать интерфейс без ЛогАнализатора - боль и печать.

Сам с I2C в свое время намучался.

2 лайка

В общем разобрался))) Проблема была с питанием, не знаю почему но когда я подключаю питание к отладочной плате проц не стартует, следовательно по шине управления он не будет общаться, питание не просаживается, пульсации в норме, чего он так себя ведет непонятно, будем разбираться, что то ему не нравиться в питании. Залил в него тестовый генератор синуса, убедился что на выходе есть сигнал и попробовал просканировать, сканер нашел устройство с адресом 0х38, как и должно быть))) Всем спасибо кто откликнулся)))

C 1452 дела не имел, а 1701 может работать в различных режимах: I2C-master, I2C-slave, SPI в зависимости от начальных условиях. Думаю, с 1452 что-то похожее: посмотрите в дэйташите, при каких условиях он стартует именно как I2C-slave. Может он изначально включается как SPI или I2C-master.

1 лайк