Я намагаюся прочитати мікросхему EEPROM, яка підтримує протокол I2C (неможливо вказати номер моделі IC, оскільки він не друкується). Напевно, він підтримує протокол I2C, оскільки я написав код для виявлення його за допомогою бібліотеки I2C, а адреса пристрою, яку я отримав, - 0x51 . Тепер я намагаюся написати код, який читає дані з цього IC-чіпа. Код виглядає наступним чином:
#include
int addr = 0;
void setup() {
Wire.begin();//initialise the connection
Serial.begin(9600);
while (!Serial) {}
delay(100);
}
void loop() {
byte deviceAddress = 0x51;
byte data = readData(addr, deviceAddress);
Serial.print(data, HEX);
Serial.print(" ");
addr++;
if(addr%16 == 0) {
Serial.print('\n');
}
//check for 1Kbits first
if (addr%128 == 0) {
Serial.println("round complete");
Serial.println();
addr = 0;
}
delay(100);
}
byte readData(int address, int deviceAddress) {
//sending device address
Wire.beginTransmission(deviceAddress);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom((short int)deviceAddress, 1);
if(Wire.available()) {
byte data = Wire.read();
return data;
}
return 0xAA;//random data
}
Проблема, з якою я стикаюсь, полягає в тому, що я повернув адресу (з якої я хочу прочитати дані) як самі дані (наприклад, читати (0) повертає 0, читати (1) повертає 1 і так далі). Я навіть намагався налагодити зв'язок I2C за допомогою логічного аналізатора (логіка Sellale у цьому випадку). Знімок екрана показано нижче.

На знімку екрана показано логіку операції читання з однієї адреси (0x78), але історія зберігається для кожної адреси, тобто я повертаю адресу замість даних з адреси.
Вихід вищезазначеного коду виглядає наступним чином:
0 1 2 3 4 5 6 7 8 9 A B C D E F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
круглий комплект
Ви можете допомогти мені визначити, що я можу робити тут неправильно?
Дякую.