Forum: Mikrocontroller und Digitale Elektronik ESP: An welche Adresse flashen?


von Lars N. (larsn)


Lesenswert?

Ich versuche gerade, einen esp8266 von einem anderen Controller aus mit 
dem esp-serial-flasher von Espressif zu flashen (also kein OTA!). Dabei 
verlangt das Programm (vielleicht auch das Protokoll) die Startadresse, 
von der ab erased und geflashed werden soll.

In den Datenblättern von Espressif habe ich leider keine 
Speicherarchitektur gefunden. Ich nehme an, ich kann nicht einfach das 
Datenblatt von einem beliebigen Cortex M3-Controller nehmen?

Kurzum: Wo starten beim esp8266(ex) Programme normalerweise?

von Stefan F. (Gast)


Lesenswert?

Die Adressen müssen mit dem Programmcode überein stimmen. Build von der 
Arduino IDE werden zum Beispiel an Adresse 0x0000 gespeichert. Aber das 
SDK von Espressif (zumindest v1.5) zerlegt die Firmware in mehrere 
Dateien die an ganz bestimmte Adressen geladen werden müssen. Das war in 
irgendeinem Readme File beschrieben.

von John P. (brushlesspower)


Lesenswert?

Zumindestens beim ESP32 steht in der Arduino Umgebung ganz genau welches 
Binary an welche Adresse gehört und wo das Binary zu finden ist.

habe mit diesen Informationen schon des öfteren den Serial flasher 
genutzt.

von Lars N. (larsn)


Lesenswert?

John P. schrieb:
> Zumindestens beim ESP32 steht in der Arduino Umgebung ganz genau welches
> Binary an welche Adresse gehört und wo das Binary zu finden ist.

Wie zeigst Du denn das an? Bei mir zeigt die Arduino-IDE am Ende des 
Übersetzens die Größe der div. Programmteile, aber nicht deren Adressen:
1
Executable segment sizes:
2
IROM   : 243612          - code in flash         (default or ICACHE_FLASH_ATTR) 
3
IRAM   : 26652   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...) 
4
DATA   : 1264  )         - initialized variables (global, static) in RAM/HEAP 
5
RODATA : 888   ) / 81920 - constants             (global, static) in RAM/HEAP 
6
BSS    : 25576 )         - zeroed variables      (global, static) in RAM/HEAP 
7
Sketch uses 272416 bytes (26%) of program storage space. Maximum is 1044464 bytes.
8
Global variables use 27728 bytes (33%) of dynamic memory, leaving 54192 bytes for local variables. Maximum is 81920 bytes.

von John P. (brushlesspower)


Lesenswert?

Der Sketch verwendet 952067 Bytes (72%) des Programmspeicherplatzes. Das 
Maximum sind 1310720 Bytes.
Globale Variablen verwenden 36744 Bytes (11%) des dynamischen Speichers, 
290936 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 
Bytes.
C:\Users\john\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\2. 
6.1/esptool.exe  --chip esp32 --port COM13 --baud 921600 --before 
default_reset --after hard_reset write_flash -z --flash_mode dio 
--flash_freq 80m --flash_size detect 0xe000 
C:\Users\john\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0. 
4/tools/partitions/boot_app0.bin  0x1000 
C:\Users\john\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0. 
4/tools/sdk/bin/bootloader_qio_80m.bin  0x10000 
C:\Users\john\AppData\Local\Temp\arduino_build_937227/ESP32_App_Inventor 
.ino.bin  0x8000 
C:\Users\john\AppData\Local\Temp\arduino_build_937227/ESP32_App_Inventor 
.ino.partitions.bin


0xe000 -> boot_app0.bin
0x1000 -> bootloader_qio_80m.bin
0x10000 -> ESP32_App_Inventor.ino.bin
0x8000 -> ESP32_App_Inventor.ino.partitions.bin


Aber wie gesagt, das gilt für den ESP32

: Bearbeitet durch User
von John P. (brushlesspower)


Lesenswert?

Ansonsten ist das auch in der platform.txt in den Arduino Tiefen zu 
finden.

tools.esptool_py.upload.protocol=esp32
tools.esptool_py.upload.params.verbose=
tools.esptool_py.upload.params.quiet=
tools.esptool_py.upload.pattern="{path}/{cmd}" --chip esp32 --port 
"{serial.port}" --baud {upload.speed}  --before default_reset --after 
hard_reset write_flash -z --flash_mode {build.flash_mode} --flash_freq 
{build.flash_freq} --flash_size detect 0xe000 
"{runtime.platform.path}/tools/partitions/boot_app0.bin" 0x1000 
"{runtime.platform.path}/tools/sdk/bin/bootloader_{build.boot}_{build.fl 
ash_freq}.bin"  0x10000 "{build.path}/{build.project_name}.bin" 0x8000 
"{build.path}/{build.project_name}.partitions.bin"
tools.esptool_py.upload.pattern.linux=python "{path}/{cmd}" --chip esp32 
--port "{serial.port}" --baud {upload.speed}  --before default_reset 
--after hard_reset write_flash -z --flash_mode {build.flash_mode} 
--flash_freq {build.flash_freq} --flash_size detect 0xe000 
"{runtime.platform.path}/tools/partitions/boot_app0.bin" 0x1000 
"{runtime.platform.path}/tools/sdk/bin/bootloader_{build.boot}_{build.fl 
ash_freq}.bin"  0x10000 "{build.path}/{build.project_name}.bin" 0x8000 
"{build.path}/{build.project_name}.partitions.bin"
tools.esptool_py.upload.network_pattern={network_cmd} -i "{serial.port}" 
-p "{network.port}" "--auth={network.password}" -f 
"{build.path}/{build.project_name}.bin"

von Lars N. (larsn)


Lesenswert?

Du meinst, die korrekten Adressen werden beim Flashen mit der 
Arduino-IDE angezeigt? Das wäre OK.

Was mich etwas verwirrt ist, daß Du da vier Unterprogramme hast. Ist das 
eine ESP32-Spezialität bzw. hängt das mit Deinem Programm zusammen?

Eigentlich will ich nur das eine Binary flaschen, was die IDE beim 
Export ausspuckt.

von John P. (brushlesspower)


Lesenswert?

Beim ESP32 werden immer diese 4 Binarys mit Arduino geflasht.

Beim ESP8266 scheint es nur ein Binary zu sein an Adresse 0x0 wie 
bereits von stefanus gesagt.

steht alles in der platform.txt

von Lars N. (larsn)


Lesenswert?

John P. schrieb:
> Beim ESP8266 scheint es nur ein Binary zu sein an Adresse 0x0 wie
> bereits von stefanus gesagt.
>
> steht alles in der platform.txt

Na, dann ist ja alles geritzt! In die Datei schau ich mal rein.

Vielen Dank euch beiden!

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
Noch kein Account? Hier anmelden.