Wir haben soeben neue Brick Firmwares veröffentlicht, die drei entscheidene Fehler (Bugs) bereinigen:
- Fix für RS485 Timing-Bug. Dies ist ein sehr alter Fehler, den wir seit Jahren nicht finden konnten. Bricklets die I2C nutzen (zum Beispiel das Temperature Bricklet) konnten alle paar tausend Nachrichten falsche Werte liefern, wenn RS485 genutzt wurde. Dies wurde auf Grund von nichterfüllten I2C/RS485 Timing-Anforderungen erzeugt. Ab jetzt nutzten wir DMA für I2C um dieses Problem zu lösen.
- Das Verhalten der ersten Enumeration (Enumerate-Callback vom Typ CONNECTED) wurde komplet überarbeitet. Doppelte Ennummerierungen kommen nun nicht mehr vor. Es gibt auch keine Probleme für den Fall, dass die Module bereits mit Strom versorgt wurden und anschließend erst USB angeschlossen wird. Dadurch wird auch ein weitere Unschönheit entfernt: Bisher war es notwendig die RS485 Slaves neuzustarten, wenn der RS485 Master neu gestartet wurde. Wurde dies nicht gemacht, so gab es keine erneuten Enumerierungsnachrichten. Mit dem Update ist dies nicht mehr notwendig. In allen Fällen erhält man Enummierungsnachrichten.
- Ab jetzt wird niemals ein Hardwarereset wegen USB durchgeführt: Bisher war es so, dass die Hardware neugestartet wurde, wenn USB Reset-/Suspend-/Resume-Nachrichten geschickt hat (interne Nachrichten). Diese Nachrichten werden vom PC, zum Beispiel nach dem Booten geschickt oder aber auch wenn EMI erkannt wurde. Bisher haben wir bei den Nachrichten einfach den kompletten Brick neugestartet. Ab jetzt wird kein Reset deswegen mehr durchgeführt. Die USB Statemachine der neuen Firmwares führt ein eigenes Reset in diesem Fall durch, das eigentliche Brick läuft aber durch. Somit wird nur kurzzeitig die Kommunikation unterbrochen, der Zustand des Bricks bleibt aber ansonsten erhalten. Als Beispiel läuft ein Schrittmotor einfach weiter und führt den letzten Befehl aus, anstatt schlagartig auf Grund des Resets stehen zu bleiben. Aus PC-Sicht wurde der Brick nur kurz entfernt und direkt wieder verbunden. Eine neue Enummerierungsnachricht wird in diesem Fall verschickt. Hattest du bisher Probleme mit ungewollten Resets (als Beispiel beim Schalten von Induktiven Lasten mittels eines Relais), so wird die neuen Frmwares vermutlich dein Problem lösen! Der PC wird weiterhin USB Resetten, aber aus Nutzersicht läuft die Hardware einfach weiter.
Insbesondere von dem letzten Punkt, dass zum Beispiel das Schalten eines Relais zu Problemen führt, hatten wir hin und wieder gehört, konnten es aber nie reproduzieren. Ein paar Wochen zuvor, konnten wir aber einen Aufbau erstellen, bei dem wir das Problem reproduzieren konnten. Nach mehreren Stunden Fehlersuche stellte sich heraus, dass der PC ein EMI Event auf dem USB Kabel registriert und deswegen dem Brick mitteilt, sich doch zu resetten (auf Linux passiert dies, wenn man zum Beispiel die Nachricht "disabled by hub (EMI?), re-enabling ..." vom Kernel bekommt). Ab jetzt führt dies nicht mehr dazu, dass der Brick sich neustartet. Es läuft alles weiter, selbst wenn sich der genutzte USB Hub neustartet.
Um das Resetproblem zulösen, haben wir einiges an Code umgeschrieben und gleichzeitig das Hotplug/Enummerierung deutlich verbessert.
Die Firmware der Bricks können einfach mittels des Brick Viewers aktualisiert werden.