Продолжение возни с I2C на Due

Нет ответов
mal333
Offline
Зарегистрирован: 23.04.2014

"Уже всю голову поломал" - так часто начинают темы, и моя, к сожалению, не исключение :(
Суть вопроса вот в этом (вкратце, не нужно подавать сигнал "стоп" на шину после записи номера регистра для чтения),мануал по стандартным библиотекам утверждает, что все так и есть, как в обсуждении, но, черт побери, как ни пытался, конструкции вида:

void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  
  Serial.begin(9600);  // start serial for output

 inputString.reserve(3); //for debug
}

void loop()
{
     if (stringComplete) {
     pos = inputString.toInt();
  switch (pos) {
      case 1: 
  Wire.beginTransmission(0x5a);
  Wire.write(7);
  Wire.endTransmission(false);
  //delay(100);
  Wire.beginTransmission(0x5a);
  Wire.requestFrom(0x5a, 3);    // request 3 bytes from slave device #

  
    case 2:
  Wire.beginTransmission(0x5a);
  Wire.write(7);
  Wire.endTransmission(true);
  //delay(100);
  Wire.beginTransmission(0x5a);
  Wire.requestFrom(0x5a, 3);   
    
    
    case 3:
  Wire.beginTransmission(0x5a);
  Wire.write(7);
  Wire.endTransmission(false);
  //delay(100);
  //Wire.beginTransmission(0x5a);
  Wire.requestFrom(0x5a, 3);   
  
    case 4:
  Wire.beginTransmission(0x5a);
  Wire.write(7);
  //Wire.endTransmission(false);
  //delay(100);
  Wire.beginTransmission(0x5a);
  Wire.requestFrom(0x5a, 3);   
  
    //case 5:
   }  //end switch
   
    while(Wire.available())    // slave may send less than requested
  { 
    char c = Wire.read(); // receive a byte as character
    Serial.println(c, HEX);         // print the character
  }
  Wire.endTransmission();
  inputString = ""; //for debug
  stringComplete = false; //for debug
  //Serial.println(res, HEX);
     }
  delay(500);
}

не дают нужного результата ни в одном случае. Ковыряние в библиотеке Wire.cpp вызвало у меня недоумение- там нет проверки параметра, передаваемого в функцию endTransmission. Или я этого не вижу? На мой взгляд "стоп" в 

if (error == 0) {
TWI_Stop(twi);
будет всегда выполняться, если передача буфера прошла успешно, не взирая на параметр, передаваемый в endTransmission.
Прошу помочь, кто может и кому не лень. :)