I2C Kabelverbindung unterbrechen und resume

OP Persönliche Seite #5121985
Hallo,

ich habe ein zusätzliches Display (TWI Basiert) an meinem Board.
Nun möchte ich dieses im Betrieb abziehen und wieder anstecken können 
ohne den Atmega 16 in einen deadlock zu befördern.

Ist meine folgende Abänderung der Lib eine vernünftige Lösung, oder 
sollte man das anders lösen?
1
void I2C_WriteByte(uint8_t busAddr, uint8_t data) {
2
  uint8_t error = i2c_start(busAddr); // send bus address
3
  if (error) {//Own snipped
4
    scanForDevicesOnBus();
5
    return;
6
  }
7
  i2c_write(data); // then send the data byte
8
  i2c_stop();
9
}
10
void I2C_WriteRegister(uint8_t busAddr, uint8_t deviceRegister, uint8_t data) {
11
  uint8_t error = i2c_start(busAddr); // send bus address
12
  if (error) {//Own snipped
13
    scanForDevicesOnBus();
14
    return;
15
  }
16
  i2c_write(deviceRegister); // first byte = device register address
17
  i2c_write(data); // second byte = data for device register
18
  i2c_stop();
19
}
20
uint8_t I2C_ReadRegister(uint8_t busAddr, uint8_t deviceRegister) {
21
  uint8_t data = 0;
22
  uint8_t error = i2c_start(busAddr); // send device address
23
  if (error) {//Own snipped
24
    scanForDevicesOnBus();
25
    return data;
26
  }
27
  i2c_write(deviceRegister); // set register pointer
28
  i2c_start(busAddr + I2C_READ); // restart as a read operation
29
  data = i2c_readNak(); // read the register data
30
  i2c_stop(); // stop
31
  return data;
32
}

Grüße Oekel
Moderator (Firma: Titel) Persönliche Seite #5121989
D a v i d K. schrieb:
> sollte man das anders lösen?
Ich würde erst mal (z.B. mit einem zusätzlichen Pin) versuchen zu 
erkennen, ob das Display angesteckt ist.

Und immer dran denken: generell ist der I2C kein HotPlug Bus. Wenn an 
diesem Bus noch andere Teilnehmer hängen, dann werden bei Einstecken 
evtl. deren Daten oder Adressen korrumpiert...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.