Всем привет!!! В общем проблемка такая, есть парочка аудиопроцессоров, ADAU1701, ADAU1452. Есть отладочная плата на stm32f407vet6, заливаю в нее i2cscaner стандартный, и вот отсюда начинается собственно проблема. Отладочная плата ни в какую не хочет общаться с adau1452, она просто говорит что устройство не найдено, при этом с процессором adau1701 работает отлично, так же отлично работает с цапом es9038. И я бы уже подумал что у меня процессор нерабочий, но есть программатор для этих процессоров USBI, так вот через него все заливается и работает, так же если залить тот же i2cscanner в плату ардуино уно, то она прекрасно видит аудио процессор. Собственно вопрос, сталкивался ли кто с чем то подобным? и как с этим бороться?
нет, я не сталкивался, ибо не знаю как в вашем случае
подключена к
и как инициализируются вышеупомянутые интерфейсы.
если все как и положено, то и проблем быть не должно.
#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); например. Тут частота указывается в герцах.
А осциллограф есть ? Может с подтяжкой что не так в варианте с STM ?
в STM32 (да и вообще применительно ко всему) отлаживать интерфейс без ЛогАнализатора - боль и печать.
Сам с I2C в свое время намучался.
В общем разобрался))) Проблема была с питанием, не знаю почему но когда я подключаю питание к отладочной плате проц не стартует, следовательно по шине управления он не будет общаться, питание не просаживается, пульсации в норме, чего он так себя ведет непонятно, будем разбираться, что то ему не нравиться в питании. Залил в него тестовый генератор синуса, убедился что на выходе есть сигнал и попробовал просканировать, сканер нашел устройство с адресом 0х38, как и должно быть))) Всем спасибо кто откликнулся)))
C 1452 дела не имел, а 1701 может работать в различных режимах: I2C-master, I2C-slave, SPI в зависимости от начальных условиях. Думаю, с 1452 что-то похожее: посмотрите в дэйташите, при каких условиях он стартует именно как I2C-slave. Может он изначально включается как SPI или I2C-master.