I2C Wire.onRequest не обнаружен

Я хочу знать, почему Wire.onRequest не может обнаружить сообщение ниже и что я могу сделать для его обнаружения. (Я не могу изменить сообщение I2C)

Я смог прочитать эту часть сообщения с помощью wire.onReceive:

Но я вообще не могу прочитать это сообщение, которое требует:

#include <Wire.h>
byte val = 170;
int sendv;

char c;

byte dataArray[16];

void setup() {
  Wire.begin(0x77);                // присоединяемся к шине i2c с адресом #8
  Wire.onReceive(receiveEvent); // регистрируем событие
  Wire.onRequest(requestEvent); // регистрируем событие
  Serial.begin(9600);           // запускаем сериал для вывода
}

void loop() { }

void receiveEvent(int howMany) {
  Serial.println(howMany);

  if (howMany >= 2) {
    for (int i = 0 ; i < howMany; i++) {
      dataArray[i] =  Wire.read();
      Serial.println(dataArray[i], HEX);
    }

  } else {
    c =  Wire.read();
    Serial.println(c, HEX);
  }
}

void requestEvent() {
  Serial.println("REqEVENT");
}

, 👍0

Обсуждение

То есть вы имеете в виду, что в своем коде вы никогда не видите REqEVENT в последовательном мониторе? Обычно в обратном вызове onRequest вы записываете данные в буфер I2C, чтобы их можно было отправить., @chrisl

Да, когда я запускаю код, я никогда не захожу внутрь события запроса и не вижу REqEVENT, который должен быть, потому что 0xEFm или 0xEE - правильный адрес., @Shahreza

Являются ли изображения из передачи из вашего кода? Это будет соответствовать вашему коду, поскольку вы не отправляете данные по запросу. Возможно, отправка через последовательный порт здесь не является хорошим тестом, поскольку функция get вызывается из ISR. Попробуйте зажечь светодиод внутри функции, чтобы проверить, попал ли туда код. Также попробуйте на самом деле отправить данные и посмотрите, действительно ли эти данные отправляются, наблюдая за своим логическим анализатором., @chrisl

Я пытался отправить сообщение, но это не сработало, я просто попробовал светодиод и не включился. Также вы можете видеть, что логический анализатор получает 0xFF., @Shahreza


1 ответ


1

Мне удалось решить проблему, добавив twi_stop(); на twi.c

база на этом сайте введите здесь описание ссылки

,