00_RPII2C ??? HWaccess read/write error

Begonnen von joco, 16 November 2020, 11:32:21

Vorheriges Thema - Nächstes Thema

joco

hallo
in einem anderen Thread haben wir schon einige Fehler ausgeschlossen.
https://forum.fhem.de/index.php/topic,115543.0.html

setup: rpi3 einen Adafruit TCA9548A 1-to-8 I2C Multiplexer mehrere HDC1080  und ein dot-matrix-Anzeigemodul auch über I2C
habe es hinbekommen, dass alles läuft -- aber im logfile steht


2020.11.15 10:12:03 3: i2cBus5: HWaccess blockweise nach 0x40 schreiben, Reg: 0x02 Inh: 16 0, laenge: 3| -> syswrite failure: Remote I/O error
2020.11.15 11:07:04 3: i2cBus4: HWaccess blockweise von 0x40 lesen, -> sysread failure: Remote I/O error
2020.11.15 11:17:04 3: i2cBus4: HWaccess blockweise von 0x40 lesen, -> sysread failure: Remote I/O error
2020.11.15 12:27:05 3: i2cBus4: HWaccess blockweise nach 0x40 schreiben, Reg: 0x02 Inh: 16 0, laenge: 3| -> syswrite failure: Remote I/O error
2020.11.15 12:27:05 3: i2cBus4: HWaccess blockweise von 0x40 lesen, -> sysread failure: Remote I/O error
2020.11.15 12:32:05 3: i2cBus4: HWaccess blockweise von 0x40 lesen, -> sysread failure: Remote I/O error

nun im Moment ist es erträglich. Es sind für 2 Busse nur 55 Zeilen/Tag

Mich interessiert woran das liegen könnte....
Sind es evtl solche Momente, in denen der Bus schon busy ist, oder steckt da ein anderes Problem drin ????

Wenn dem so ist könnte man vielleicht dem Modul sagen, es soll für ne halbe Sekunde seine Aktion wiederholen, bevor es einen Fehler ausgibt??

Oder bin ich auf dem Holzweg und es liegt an was völlig anderem ??

Für einen Tip wäre ich dankbar
Gruss

Adimarantis

Ich verstehe nicht ganz warum du von zwei Bussen redest? Bei mir steuert ein RPII2C Modul viele I2C devices (jeweils als IODevice die selbe Instanz angeben) - hast du evtl. zwei RPII2C devices auf dem selben /dev/i2c-x ? Dann könnte ich mir schon vorstellen, dass die sich in die Quere kommen.

Gruß,
Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

joco

Hallo Adimarantis,
ganz recht. Du hast wahrscheinlich alles verschiedene i2c-Module.
Ich benutze in diesem Szenario mehrere HDC1080.
Diese haben alle dieselbe Adresse (lassen sich nicht ändern) - darum behindern sie sich gegenseitg,

Um das zu verhindern habe ich den TCA9548A 1-to-8 I2C Multiplexer eingebaut.

Der macht aus dem einen Bus 8 Busse.

Somit kann ich dann theoretisch 8 HDC1080 benutzen und gaaaanz viele andere i2c-Module.

implementiert habe ich das so: (laut commandref)
define <name> RPII2C <I2C Bus Number>
Die <I2C Bus Number> ist die Nummer des I2C Bus an den die I2C IC's angeschlossen werden

und name ist bei mir halt i2cBus4 und i2cBus5

wie gesagt, es funktioniert ja alles soweit. Da ich nicht permanent auf das Display starre und im Millisekunden-Takt eine Temperatur erwarte,
habe ich ja erst keine Probleme festgestellt. (erst als der rPi eingefroren ist, aus Platzmangel auf der SD-Karte)

Trotzdem lieben Dank für deine Antwort/Idee

Gruss
Jörg

klausw

Hallo Jörg,

mit deiner Vermutung liegst du vermutlich richtig. Der syswrite Fehler deutet darauf hin, das du keinen Zugriff auf den Bus hast bzw. der Bus blockiert ist.
Wenn alle angeschlossenen I2C Teilnehmer funktionieren, kann es schonmal kein Rechteproblem sein.

Mit I2C Multiplexern habe ich mich bisher nicht befasst.
Über dtoverlay eingebunden wir es wohl vom Kernel unterstützt und es werden transparent 8 I2C Busse unter "ls -l /dev/i2c*" gelistet?
Dann ist der i2c-1 vom Raspberry selbst nicht mehr verfügbar und alles geht über den Multiplexer?

Meine Vermutung ist, dass sich die Busse gegenseitig blockieren. Hardwaremäßig ist vom Pi aus nur ein Bus verfügbar. Auch wenn quasi 8 vorhanden sind, können diese nur sequentiell bedient werden.
Beispielsweise von den SHT Feuchtesensoren kenne ich, das ein Auslesevorgang erst angestoßen werden, und nach einem gewissen Zeitraum das Ergebnis abgeholt werden kann. Wenn innerhalb eines solchen Zeitraumes ein weiterer Sensor an einem anderen Bus seine Abfrage startet, ist der Bus blockiert.

Als Abhilfe fällt mir nur ein, die Abfrage über ein at zu steuern und dafür zu sorgen, das die Abfragen sich nicht in die Quere kommen.

Grüße
Klaus




RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

joco

Hallo Klaus,
jaja ich gebe es ja zu
meine Hoffnung war das du antwortest in etwa wie
Ja kein Problem, Frage ich den Sensor eben nochmal ab.
so ca. 5x und wenn dann immer noch nix kommt
schreibe ich dann erst die Fehlermeldung

--grins--

Aber OK. Scheint dann doch wohl nicht so einfach.

Das mit dem at ist ne Idee, die ich nächste Woche mal genauer
untersuchen werde.
Danke für den Tip.

Schönes WE
Jörg

klausw

Hallo Jörg,

Zitat von: joco am 05 Dezember 2020, 00:46:04
jaja ich gebe es ja zu
meine Hoffnung war das du antwortest in etwa wie
Ja kein Problem, Frage ich den Sensor eben nochmal ab.
so ca. 5x und wenn dann immer noch nix kommt
schreibe ich dann erst die Fehlermeldung
--grins--

nie die Hoffnung aufgeben ;)

Der I2C Bus an sich ist sehr stabil. Da möchte ich die Fehlerüberwachung nicht aufblasen.
Zumal dann bei "Normalnutzung" Probleme erst spät erkannt werden.

Wenn es an sich funktioniert kannst du auch noch den Loglevel vom RPII2C runter setzen.
Nutzt du eigentlich den /dev/i2c-1 auch in FHEM? Wenn ja, liegt es vielleicht auch nur daran.

Ändern sich die Temperaturen bei dir eigentlich so schnell? Ich habe bei mir 5min Aktualisierungsrate drin.
Im Sekunden Bereich würde ich in FHEM nicht unbedingt was abfragen. Das System ist darauf nicht wirklich ausgelegt.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

joco

#6
Hallo Klaus,

ja den i2c-1 benutze ich auch.
habe da einen MPC23017 mit 8-fach RelaisBord und ein 8-fach-Taster-Led-Panel zur manuellen Steuerung angeschlossen.

das halte ich aber nicht für relevant, da ja bis zu 112 Knoten pro Bus erlaubt sind.
Den Multiplexer kann man "programmieren" um verschiedene Adressen zu benuten
default ist 0x70 und geht bis 0x77 also 8 Adressen
zusätzlich auf i2c-1
also dort 112-8 und weitere 8 x 8 x 112
das sind echt viele......

Gängiger Einsatzzweck ist ja auch die mögliche Verwendung von mehreren Sensoren oder ic's deren Adresse sich nicht ändern lässt.

Also bei mir:
ein Sensor misst im 5-Minuten-Abstand Temperatur und Luftfeuchtigkeit um ggf, einen Luftentfeuchter anzuwerfen.
ein anderer misst eigentlich gar nicht. Damit er sich nicht langweilt halt ein mal in der Stunde
ABER da er in einer Sauna verbaut ist soll er alle 5 Minuten messen, denn wenn es zu heiss wird klappen die Fussnägel hoch
UND wenn jemand in der Sauna ist wird auch eine elektronische Sanduhr angeworfen (läuft 20 Minuten)
die ist sekundengenau. ausserdem zeigt sie auch Temperatur und Luftfeuchtigkeit an (sinnigerweise auch im Sekundentakt)
weil wenn du einen Aufguss machst ist es schon sehr interessant wie sich die Luftfeuchtigkeit ändert.
Ach ja. Anzeige auf dot-Matrix.Modul mit Ansteuerung über i2c

wenn diese 20 Minuten um sind wird wieder auf 5-Minuten-Zyklus gewechselt und wenn Sauna aus ist wieder auf 1-Std

Naja und noch etliches mehr ........ (welches aber nicht so Zeitkritisch ist)

So genug erstmal
Gruss Jörg

joco

Beinahe vergessen
das mit meinem anderen Problem habe ich mit yoda gelöst.
Er hat auch diese Fehlermeldungen ...
Er hat auch das log level runtergesetzt.

Ich kann/werde das auch machen (müssen)

Also wenn sich echt keiner beschwert ausser mir
brauchst du dir keinen Stress anzutun
wollte es einfach mal ansprechen
Hätte je evtl ne einfache Lösung geben können.

Gruss
Jörg

joco

Mist. Ich sollte jetzt endlich mal schlafen gehen ;-)
Hatte vergessen zu erwähnen dass Yoda keinen Multiplexer benutzt.
Quasi ein straight User des i2c ist

klausw

Zitat von: joco am 09 Dezember 2020, 05:05:58
Mist. Ich sollte jetzt endlich mal schlafen gehen ;-)
Hatte vergessen zu erwähnen dass Yoda keinen Multiplexer benutzt.
Quasi ein straight User des i2c ist

Dann sollte es bei Yoda keine Fehler geben.
Bitte PN mit dem Link zum Thread an mich.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

joco