Чтение данных I2C из регистра SW6106

Я использую микросхему внешнего аккумулятора SW6106 в качестве I2C, но, как бы я ни старался, я не смог прочитать ничего, кроме «FF».

Техническое описание микросхемы.

Временная диаграмма чтения данных: Чтение временной диаграммы

Временная диаграмма записи данных: Записать временную диаграмму

Код, который я использую:

#include <Wire.h>

byte ADDRESS_SLAVE = 0x3C; 
byte REGISTER_XY = 0xB0;
byte READ_LENGTH = 1;

void setup() {
  Serial.begin(115200);

  Wire.begin();
  Wire.setClock(400000); // установить I2C на «полную скорость»

  Wire.beginTransmission(ADDRESS_SLAVE);  
  Wire.write(REGISTER_XY);  // устанавливаем регистр для чтения
  Wire.endTransmission();
}

void loop() {
   Wire.requestFrom(ADDRESS_SLAVE,READ_LENGTH); 
   byte buff[READ_LENGTH];    
   Wire.readBytes(buff, READ_LENGTH);
   for (int i = 0; i < READ_LENGTH; i++) {
     Serial.println(buff[i], HEX);
   }
   Serial.println();
   delay(1000);
}

Выход последовательного монитора: Последовательный монитор

Я действительно ничего не понял из этой временной диаграммы и не смог ничего прочитать из IC. Буду признателен за любую помощь.

Редактировать: Я немного отредактировал код, чтобы увидеть, что возвращает Wire.endTransmission();.

#include <Wire.h>

byte ADDRESS_SLAVE = 0x3C; 
byte REGISTER_XY = 0xB0;
byte READ_LENGTH = 1;

void setup() {
  Serial.begin(115200);

  Wire.begin();
  Wire.setClock(400000); // установить I2C на «полную скорость»
}

void loop() {
  Wire.beginTransmission(ADDRESS_SLAVE);  
  Wire.write(REGISTER_XY);  // устанавливаем регистр для чтения
  int x = Wire.endTransmission();
  Serial.println(x, DEC);
  delay(200);
}

И он повторяет следующее: endTransmission

Я действительно не знаю, где я ошибаюсь.

, 👍0


1 ответ


1

Я знаю, что этот пост очень старый, но мне удалось получить карту регистров от производителя Ismartware. Вот ссылка на пакет данных для тех, кто может оказаться здесь в поисках того же самого.

,