Hab ich die falsche Stelle im Flash ausgewählt?
Mein Board ist ein D1 mini aus China. Ich habe bereits ein simples
Arduino-Beispiel geflasht, das hat einwandfrei funktioniert. Der ESP8266
funktioniert also.
ich habe noch nichts mit dem orig. espressif sdk gamacht, aber der
fehler besagt, dass an der Stelle wo die WiFi Kalibrationsdaten erwartet
werden keine oder Müll liegen.
Eigentlich sollte das sdk den Block initialisieren wenn leer oder man
legt dort die "esp_init_data_default.bin" ab; wo sagt die flash map
(readme.txt).
Ich würde es mal mit komplettem erase vor flash versuchen.
Ich hab mir das IoT-Example heruntergeladen und mit meinem Makefile
versucht zu kompilieren, bekomme allerdings diese Fehlermeldungen (nur
ein kleiner Ausschnitt):
user/user_main.c:40:2:error:#error"The flash map is not supported"
5
#error "The flash map is not supported"
Wenn ich das Makefile von espressif verwende und
1
make
ausführe, bekomme ich diese Ausgabe:
1
make:Nothingtobedonefor'FORCE'.
.
Die gen_misc.bat sieht schon eher danach aus, als würde sie etwas
kompilieren. Wenn man sich durch das kurze Menü durchklickt, wird am
Ende doch wieder das Makefile aufgerufen, dass dann erneut "Nothing to
be done" liefert.
Emil schrieb:> Du musst auch die Partitionstabelle implementieren, sonst weiß das SDK> gar nicht, wo es suchen soll.
Danke, anscheinend kam das mit SDK v3.0 hinzu. Den Sinn davon verstehe
ich zwar nicht, aber gut.
G. H. schrieb:> also könnte das Dokument helfen:
Ich verstehe das Dokument nicht. Daraus erschließt sich mir nicht, was
ich wirklich brauche und welche Zusammenhänge es gibt bzw. welche
imports ich benötige.
Edit: Ich hab mir nun auch das wesentlich simplere Beispiel
https://github.com/espressif/ESP8266_NONOS_SDK/tree/master/examples/simple_pair
angeschaut. Ich hab mal versucht, die main.c auf das wesentliche zu
reduzieren:
Max M. schrieb:> Nun bekomme ich mit meinem Makefile (siehe 1. Post) diese Ausgabe:>>
1
>CCuser/user_main.c
2
>user/user_main.c:32:2:error:stray'\357'inprogram
3
>{EAGLE_FLASH_BIN_ADDR,0x00000,0x10000},
4
>^
5
>user/user_main.c:32:2:error:stray'\274'inprogram
6
>user/user_main.c:32:2:error:stray'\210'inprogram
7
>user/user_main.c:32:2:error:stray'\357'inprogram
8
>user/user_main.c:32:2:error:stray'\274'inprogram
9
>user/user_main.c:32:2:error:stray'\211'inprogram
10
>user/user_main.c:33:5:error:stray'\357'inprogram
11
>{EAGLE_IROM0TEXT_BIN_ADDR,0x10000,0x60000},
12
>
>> Ich weiß nicht - sind diese geschweiften Klammern nicht konform zur> C-Syntax? Macht meine eingedampfte main.c überhaupt noch Sinn?
Hast Du sinnlos Copy&Paste von der Webseite gemacht oder die Datei
runtergeladen und bearbeitet?
Bei ersterem solltest Du die fehlerhaften Zeilen löschen und von Hand
neu tippen.
John Doe schrieb:> Hast Du sinnlos Copy&Paste von der Webseite gemacht
Schuldig.
John Doe schrieb:> und von Hand> neu tippen.
Hab ich gemacht, jetzt kommt der Fehler nicht mehr. Allerdings:
Max M. schrieb:> Wo ist denn das #define von dieser Konstante?
Ich übergebe bei mir SPI_SIZE_MAP als Define Parameter dem make Aufruf.
In den Makefiles von Espressif wird dann daraus SPI_FLASH_SIZE_MAP
erzeugt.
John Doe schrieb:> Ich übergebe bei mir SPI_SIZE_MAP als Define Parameter dem make Aufruf.
Magst du bitte erläutern, wie genau das abläuft? Woher hast du den Wert
von SPI_SIZE_MAP? Was genau gibst du in die Kommandozeile ein? Wie
sieht dein Makefile aus?
Ich hab nun einfach selbst
1
#define SPI_FLASH_SIZE_MAP 5
gesetzt und dabei alle Werte von 2 - 6 ausprobiert. Bei keinem Wert hat
sich das Verhalten irgendwie verändert (kompilieren und flashen hat aber
funktioniert).
Ich bezweifle langsam, dass die Partitionierung überhaupt helfen kann.
Diese greift ja nur, wenn mein Code überhaupt aufgerufen bzw. ausgeführt
wird. Das wird er solange nicht, wie der ESP8266 ständig neu startet und
abstürzt.
Auch liefert dieses Tutorial:
https://cutmywire.wordpress.com/2017/05/08/esp8266-windows-10-sdk-installation/comment-page-1/#comment-943
keinen Hinweis auf Partitionierung seit SDK v3.0.
Es kann doch nicht sein, dass Espressif die letzten Jahre in Sachen
Benutzerfreundlichkeit nichts dazu gelernt hat. Hat noch jemand
irgendeine Idee?
Ich vermute stark, dass ich den Code an die falsche Stelle schreiben
lasse.
Guck mal hier ganz unten.
https://github.com/espressif/ESP8266_NONOS_SDK
Da ist der Hinweis auf die Partitionstabelle.
Du kannst die Adressen und Größen der Partitionen auch ohne Weiteres per
Hand fest vergeben. Einfach die Werte, die du auch beim Flashen
verwendest.
Franz schrieb:> Da ist der Hinweis auf die Partitionstabelle.
Tut mir leid, aber ich kann damit überhaupt nix anfangen. Zum einen
liegt das am unverständlichen Englisch und daran, dass ich
"If you donot use Non-FOTA bin, eagle.irom0.text.bin and irom0.text MUST
be downloaded the fixed address"
diese Dateien nicht habe. Was sind denn "the fixed address"?
Wenn ich mir das angehängte Bild in der Doku anschaue, finde ich auch
Dateien wieder, die ich nicht habe. Eine 0x0000.bin und eine 0x10000.bin
kommen auch nicht vor.
Ich hab das Gefühl, die Doku ist entweder völlig veraltet oder für einen
anderen Controller oder anderes SDK geschrieben.
Franz schrieb:> Einfach die Werte, die du auch beim Flashen> verwendest.
Ich vergebe beim Flashen keine Werte für
SYSTEM_PARTITION_SYSTEM_PARAMETER
SYSTEM_PARTITION_PHY_DATA
SYSTEM_PARTITION_RF_CAL
Und ob meine Firmware nun SYSTEM_PARTITION_OTA_2 oder
SYSTEM_PARTITION_OTA_1 ist, weiß ich auch nicht. Ich vermute, die Datei
0x00000.bin entspricht SYSTEM_PARTITION_BOOTLOADER?
Ok, aber wenn du esp_init_data_default.bin nicht flashst, ist es kein
Wunder, dass es nicht klappt. Auch die anderen beiden sollte man
flashen, bzw. eben auf 0xFF erasen.
Franz schrieb:> Ok, aber wenn du esp_init_data_default.bin nicht flashst, ist es kein> Wunder, dass es nicht klappt. Auch die anderen beiden sollte man> flashen, bzw. eben auf 0xFF erasen.
Ich hab nun mal das versucht:
Du bringst aber Non-OTA und OTA durcheinander. Kompilierst für Non-OTA,
aber deine Partitionstabelle enthält zwei Firmwarepartitionen und den
Bootloader. Kann funktionieren, aber hat eventuell Nebenwirkungen, wenn
das SDK irgendwas schreibt.
Franz schrieb:> Du bringst aber Non-OTA und OTA durcheinander.
Wie müsste die Tabelle denn umgeschrieben werden, damit sie kompatibel
mit Non-OTA ist?
Franz schrieb:> Kompilierst für Non-OTA
Woran machst du das fest?
Während Villariba schon feiert, wird in Villabacho noch geschrubbt.
https://www.youtube.com/watch?v=B37JGubAcSU
Villariba ist in diesem Fall Italien/Arduino.
Villabacho ist Max in Deutschland.
Naja, du benutzt als Linkerscript eagle.app.v6.ld und Adresse 0.
Für OTA musst du zwei Mal kompilieren, einmal für Adresse 0x01000 und
nochmal für 0x81000, mit jeweils dem passenden Linkerschript für dein
Flashlayout:
https://github.com/espressif/ESP8266_NONOS_SDK/tree/master/ld
An 0x00000 käme der Bootloader:
https://github.com/espressif/ESP8266_NONOS_SDK/tree/master/bin
Eventuell wärst du bei Arduino wirklich besser aufgehoben. Du müsstest
halt damit leben, dass Bugfixes und neuere Features nicht immer sofort
verfügbar sind.