Hallo zusammen, es gibt hier einen Beitrag Beitrag "ESP8266MOD als SPI Slave? Firmware?" der auch mein Problem beschreibt. Leider gibt es in dem Beitrag kein Ergebnis / Lösung. Ich möchte den ESP als "dummen" WLAN-Adapter nutzen und quasi alternativ zu einem W5500 LAN Adapter betreiben können. Das Hauptsystem, in meinem System auf einem Arduino DUE basierend, soll dazu als MASTER mit dem ESP als SLAVE kommunizieren. Den ESP programmneiere ich (noch) über die Arduino-SW-Plattform, und die gibt keine Möglichkeit, die SPI (HSPI) Schnittstelle des ESP als Slave zu betreiben. (Den DUE programmiere ich über ATMEL Studio ohne ASF Nutzung) Ich habe nun gesucht und gesucht. Es gibt da bei GITHUB ein paar Lösungen, die aber für mich eher nicht brauchbar sind. Ich habe mir dann bei Expressiv die "Technical Reference" zum ESP8266 heruntergeladen. Dort ist "eigentlich" alles vorhanden, was ich benötige, aber, wie es fehlen, wie bei vielen chinesischen Programmbeispielen, die Listings der notwendigen Headerdateien. Daher meine Frage an euch: Hat jemand die HSPI-Schnittstelle in Standdard C als Slave auf einem ESP8266 zum Spielen gebracht? Wo sind die passenden Header-Dateien zu finden oder gar ein Tutorial? Wäre toll. Ach ja, die Verwendung der SPI-Schnittstelle ist zwingend, die RS232 Schnittstelle oder gar eine SW Emulation kommen aus Geschwindigkeitsgründen nicht infrage. Danke im Voraus, Yoygy
Hanns-Jürgen M. schrieb: > Ach ja, die Verwendung der SPI-Schnittstelle ist zwingend, die RS232 > Schnittstelle oder gar eine SW Emulation kommen aus > Geschwindigkeitsgründen nicht infrage. Ja, dann also lieber eine Nichtfunktion anstelle einer praktikablen Implementierung. I2C geht ja auch gaaaaar nicht, gell?
Vielleicht sollte ich erwähnen, daß es sich konkret um ein ESP8266MOD auf einem D1 mini Board handelt. Und dieses Modul hat sowohl eine serielle Schnittstelle (okay, keine RS232-Pegel) als auch eine irgendwie geartete SPI-Schnittstelle und eine I2C Schnittstelle. Letztere kann ich bei mir leider auch nicht verwenden. Aber ich bin ein Schrittchen weiter (Github), ich gebe also noch nicht auf. Ich werde berichten.
Soweit ich dieses Thema im Forum seit etwa 10 Jahren beobachte habe ich noch von keiner zufriedenstellend funktionierenden SPI-Slave Lösung gelesen. Zwischenzeit hieß es mal, dass es doch mit Tricks gehen soll, wurde dann aber kurze Zeit später doch wieder als unzuverlässig widerrufen.
@Stefan Ja, es sieht wirklich nicht gut aus. Damit meine nicht die Funktionsmöglichkeit, sondern meine Befähigung, die Espressif Vorlage (ist wohl c++) in den Arduino Rahmen einzubringen. Compilerfehler ohne Ende, deren Lösung mich sinnfreie Stunden gekostet hat. Und dabei geht es doch nur um so etwas Einfaches wie SPI. So, ich muß jetzt meine Spielereien für einige Tage unterbrechen, dann setze ich mich noch einmal an das Thema. Ich habe da noch eine andere Vorlage bei Github gefunden, die ich dann vlt. auch ausprobieren werde, Ein Umdrehen der Geschichte (ESP als MASTER, DUE als SLAVE) ist nicht möglich, da in der Gesamt-HW die Richtungen von MISI und MISO nicht umkehrbar sind und die Leitungen zu den /SS-Pins des DUE anderweitig verdrahtet sind. Das wäre ein Workaround gewesen. Ich melde mich wieder, so oder so.
Ich habe das Gefühl, dass ESP als Slave nur seriell vernünftig funktionieren.
@Stefan et altera Tja, ich habe aufgegeben. Ich bekomme es nicht auf die Schnelle zum Spielen. Da ist nicht nur GPIO15 (D8), der beim Start des ESP "offen", zumindest nicht positiv, sein muß, sondern auch die beiden versuchten Ansätze (Github) sind für mich mehr oder weniger undurchschaubar. CPP und die dort verwendete C-Nutzung sind mir ziemlich unverständlich. Da Ding liegt nun in der Ecke. Leider habe ich aktuell nicht die Zeit, die EXPRESSIF-Programmierumgebung zu installieren und mich darin einzuarbeiten. Schließen wir das Thema erst einmal ab. Viele Grüße, Yogy
Ich keine Dein Projekt ja nicht aber da du schon einen ESP vorschlägst ... Wäre es für dich eine Option auf einen ESP32 umzusteigen, der kann LAN und WLAN und du sparst dir das Daten hin und her gehampple.
Andreas schrieb: > Ich keine Dein Projekt ja nicht aber da du schon einen ESP vorschlägst > ... > > Wäre es für dich eine Option auf einen ESP32 umzusteigen, der kann LAN > und WLAN und du sparst dir das Daten hin und her gehampple. Danke für den Tip. sehe ich mir mal an.
Ich habe mir ein paar ESP32-Module (DOIT ESP32 Wroom Devkit V4) besorgt und versucht, eine ESP-Slave Funktion zum Spielen zu bringen. (Wie erwähnt, habe ich von C++ kaum Ahnung) Die erste benutzte Library (Cpp) konnte ich nicht eininden bzw. kompilieren. Die zweite Lib (https://github.com/iPAS/esp32-slave-spi) ließ sich kompilieren und installieren. Aber die SW "schmiert" ab und der ESP bootet neu, sobald SPI-Daten empfangen worden sind und diese ausgelesen werden sollen: Fehlermeldung: slave input in HEX: (gibt meine SW aus, bevor der Buffer ausgelesen werden soll) CORRUPT HEAP: Bad head at 0x3ffba63c. Expected 0xabba1234 got 0x3ffba990 abort() was called at PC 0x40087139 on core 1 ELF file SHA256: 0000000000000000 Backtrace: 0x40088cf0:0x3ffb1ad0 0x40088f6d:0x3ffb1af0 0x40087139:0x3ffb1b10 0x40087265:0x3ffb1b40 0x400f0a17:0x3ffb1b60 0x400ecd05:0x3ffb1e20 0x400ecc94:0x3ffb1e70 0x4008d649:0x3ffb1ea0 0x40081c92:0x3ffb1ec0 0x40087031:0x3ffb1ee0 0x4000bec7:0x3ffb1f00 0x40138229:0x3ffb1f20 0x40137f69:0x3ffb1f40 0x400d08e3:0x3ffb1f60 0x400d07db:0x3ffb1f80 0x400d2601:0x3ffb1fb0 0x40089f7e:0x3ffb1fd0 Rebooting... ets Jun 8 2016 00:22:57 Die Library nutzt Buffer auf dem Heap, dies habe ich nun umgewandelt, so daß "eigentlich" kein Raum auf dem Heap von mir genutzt wird. Aber wer weiß, was der Arduinokram so treibt. Vielleicht bin ich auch nur zu blöde. Ich habe mich etwas in den ESP32 und die RTOS Funktionen eingelesen und komme auch mit der Library einigermaßen zurecht, aber hier stehe ich nun wie der Ochs vorm Berg. Die Funktion, bei der die Fehlermeldung und der Neustart auftreten ist: Aufruf im Hauptprogramm (Loop)
1 | if (slave.getInputStream()->length() && digitalRead(SS) == HIGH) { |
2 | //Inhalt zum Test disabled
|
3 | }
|
(Sourcecode bei Github, s.o.) oder besser: Kennt irgendjemand hier eine SPI-SLAVE Library, die in Standard C geschrieben wurde?
So, Ergänzung: Ich habe angefangen, die Vorlage (für meine Zwecke) zu vereinfachen und kann nun den ESP als SPI-Slave betreiben und damit Werte vom Mastersystem (basierend auf einem Arduino-DUE) empfangen. Die SPI des DUE ist der Master und arbeitet Mode 0, der ESP (SPI-Slave) aber in Mode 1 ohne DMA. Lasse ich beide im Mode 0 arbeiten, ist die Datenübertragung fehlerhaft, genauer, um ein bit verschoben. Äusserst dubios. Entspräche aber der Darstellung in der Expressif ESP32_rechnical_reference auf Seite 121. Oder sehe ich das falsch. Als nächstes versuche ich die Rückübertragung vom Slave zum Master.
So, nachdem ich mich am WE nochmals mir dem Thema SPI-SLAVE auf ESP32 beschäftigt habe, habe ich die grundsätzliche Frage gelöst. Ich kann nun von einem SPI-Master aus Daten zum ESP32 übertragen und auch Daten abholen. Ich habe schlußendlich die Vorlage nach (https://github.com/iPAS/esp32-slave-spi) von für mich unnötigen Ballast befreit. Heap und ähnliches verwende ich nicht. Ich habe auch mit der Umstellung dieser Routinen von C++ nach Ansii-C begonnen. Nochmals danke für eure Hilfe und Anregungen. Yogy.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.