Motivation

Die TwoWire-Klasse der Standard-ESP8266-Bibliothek legt ihre Methoden im Flash ab. Das hat den großen Nachteil, dass der Aufruf dieser Methoden innerhalb einer ISR regelmäßig zum Absturz des Systems führt. UrsTwi ist i.W. eine Kopie von TwoWire (aus Version 2.5.x), legt aber die relevanten Methoden im IRAM ab (s. auch ESP8266 FAQ: IRAM & ISR). Weiterhin werden keine statischen Variablen oder Methoden benutzt. Man kann also mehrere Interfaces parallel betreiben.

Siehe auch: FLASH, DRAM, IRAM, .data, .rodata, .bss, .text, .irom0.text und IRAM & Interrupt-Service-Routinen (ISR)


Versionshistorie

Version Anpassungen
1.0 (2018-03-01) Basis-Version
1.1 (2020-12-21) - Kann vom ESP32 benutzt werden.
- BUFFER_LENGTH auf 128 erhöht
- mit "#if defined" für ESP8266 oder ESP32 spezifiziert
- Parameter initPins im Konstruktor hinzugefügt

Bibliothek UrsTwi

Die Methoden entsprechen i.W. denen der TwoWire-Klasse.

Die Schnittstelle bedient die Pins mit der Bit-Banging-Methode. Die ESP8266-Variante der TwoWire-Schnittstelle macht das auch in der aktuellen Version (2.7.3). Die ESP32-Original-Variante benutzt zwar das eingebaute Interface. Allerdings ist der zugehörige Arduino-Wrapper recht unübersichtlich implementiert. Es gibt hier keine Chance, den mit erträglichem Aufwand ins IRAM zu verlagern.

Der einzige Nachteil des Bit-Banging ist, dass der Prozessor während der Übertragung blockiert ist. Da man aber i.d.R. sowieso auf das Ende der Übertragung warten muss, ist dies aber bis auf spezielle Anwendungen unkritisch. Der Vorteil ist, dass man beliebige Pins nutzen und mehrere Instanzen der Klasse einrichten kann. Sie müssen nur unterschiedliche Pins benutzen.

Hinweis: die TWI-Taktfrequenz für den ESP32 ist nicht justiert und etwas zu niedrig. Dies kann durch Anpassung der Konstanten in UrsTwi::setClock verbessert werden (Ein guter Wert für TWI_CLOCK_STRETCH_MULTIPLIER bei 240 MHz Takt könnte 9 sein (ohne Garantie)).

Download

Das ZIP-Archiv für Bibliothek UrsTwi zum Download. Die entpackten Dateien ins Verzeichnis <user>\Documents\Arduino\libraries kopieren (siehe Installing Additional Arduino Libraries).

Das Archiv enthält die Bibliotheksdateien

Beispiele findet man unten in der Arduino-Dokumentation.