Forum: Mikrocontroller und Digitale Elektronik st-linkv2 (china) mit st-flash (linux) nicht alles loeschen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ralph S. (jjflash)


Bewertung
-1 lesenswert
nicht lesenswert
Auch wenn ich nicht Howard Carpendale bin:

Hello again..

(du ich moechte ... das Problem nicht sehn, viel zu schad ist die Zeit 
... uhuhuuuuu)

Aaalso, ich werkel mit einem STM32F030 und beschreibe aus diesem heraus 
seinen eigenen Flash-Speicher ab Adresse 0x8003800 (zum Ablegen von 
Daten - ich weiß dass der Flash nicht so oft beschrieben werden kann wie 
ein EEPROM).

Das funktioniert auch alles supi...

Einziger Wermutstropfen:

wenn ich mittels

st-flash write meinedatei.bin 0x800000

die Firmware update, sind auch die geloescht. Wie kann ich verhindern, 
dass beim reprogramming der Firmware der Bereich ab 0x800300 NICHT 
geloescht wird ?

von Christopher J. (christopher_j23)


Bewertung
0 lesenswert
nicht lesenswert
Ohne es selber getestet zu haben würde ich es mal mit
1
st-flash write asdf.bin 0x8000000 0x3800

versuchen. Der letzte Parameter wird jedenfalls bei st-flash --help als 
"<size>" bezeichnet.

Edit:
Ansonsten würde ich es mit OpenOCD versuchen. Da verwendet man meistens 
den Befehl "write_image erase firmware.bin 0x8000000", wobei das "erase" 
ebenfalls optional ist und falls nicht explizit gewählt, nur so viel in 
den Flash geschrieben wird, wie in der firmware.bin steckt.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Bewertung
0 lesenswert
nicht lesenswert
Ralph S. schrieb:
> wenn ich mittels
>
> st-flash write meinedatei.bin 0x800000
>
> die Firmware update, sind auch die geloescht. Wie kann ich verhindern,
> dass beim reprogramming der Firmware der Bereich ab 0x800300 NICHT
> geloescht wird ?

Die Ausgaben von st-flash legen nahe, daß das Programm die Größe der zu 
schreibenden Firmware vorher testet und dann nur die Pages löscht, die 
nachher auch beschrieben werden sollen. Wenn dein Datenbereich auf einer 
Page nach der letzten von der Firmware benutzten anfängt, sollte 
st-flash den in Ruhe lassen.

von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht lesenswert
Christopher J. schrieb:
> Ohne es selber getestet zu haben würde ich es mal mit
> st-flash write asdf.bin 0x8000000 0x3800
> versuchen. Der letzte Parameter wird jedenfalls bei st-flash --help als
> "<size>" bezeichnet.

... das war das erste was ich versucht hatte:
1
stm32@linux:/home/f030_example/flashwrite# st-flash write flashwrite.bin 0x8000000 0x3800
2
2016-11-16T23:31:02 WARN src/stlink-sg.c: Failed to find an stlink v1 by VID:PID
3
2016-11-16T23:31:02 ERROR src/stlink-sg.c: Could not open stlink device

Scheinbar sucht er hier einen st-link v1 (den ich nicht habe)

Christopher J. schrieb:
> Ansonsten würde ich es mit OpenOCD versuchen. Da verwendet man meistens
> den Befehl "write_image erase firmware.bin 0x8000000", wobei das "erase"

Hmmm, ich hab mir noch keine Gedanken darüber gemacht, wie ich openocd 
über ein Makefile laufen lassen kann !

Axel S. schrieb:
> Wenn dein Datenbereich auf einer
> Page nach der letzten von der Firmware benutzten anfängt, sollte
> st-flash den in Ruhe lassen.

leider tut er genau das eben nicht !

Kann das vllt. auch daran liegen, dass ich im Linkerscript den ganzen 
Speicherbereich angebe und im erzeugten Hexfile des Compilats die 
höchste Adresse angegeben ist (und deshalb alles gelöscht wird).

===> Hexfile genauer ansehen und Linkerscript verändern

von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht lesenswert
Hexfile und Linkerscript überprüft, daran liegt es leider nicht !

von Christopher J. (christopher_j23)


Bewertung
0 lesenswert
nicht lesenswert
Ralph S. schrieb:
> ... das war das erste was ich versucht hatte:
> stm32@linux:/home/f030_example/flashwrite# st-flash write flashwrite.bin
> 0x8000000 0x3800
> 2016-11-16T23:31:02 WARN src/stlink-sg.c: Failed to find an stlink v1 by
> VID:PID
> 2016-11-16T23:31:02 ERROR src/stlink-sg.c: Could not open stlink device
>
> Scheinbar sucht er hier einen st-link v1 (den ich nicht habe)

Sieht für mich nach einem Bug aus.

Ralph S. schrieb:
> Hmmm, ich hab mir noch keine Gedanken darüber gemacht, wie ich openocd
> über ein Makefile laufen lassen kann !

Das hier ist mal ganz dreist aus der libopencm3 zusammenkopiert 
(Beispiel für F0-Disco):
1
# Be silent per default, but 'make V=1' will show all compiler calls.
2
ifneq ($(V),1)
3
Q    := @
4
NULL    := 2>/dev/null
5
endif
6
7
OOCD    ?= openocd
8
OOCD_INTERFACE  ?= stlink-v2-1
9
OOCD_TARGET  ?= stm32f0x
10
11
ifeq ($(OOCD_FILE),)
12
%.flash: %.elf
13
  @printf "  FLASH   $<\n"
14
  $(Q)(echo "halt; program $(*).elf verify reset" | nc -4 localhost 4444 2>/dev/null) || \
15
    $(OOCD) -f interface/$(OOCD_INTERFACE).cfg \
16
    -f target/$(OOCD_TARGET).cfg \
17
    -c "program $(*).elf verify reset exit" \
18
    $(NULL)
19
else
20
%.flash: %.elf
21
  @printf "  FLASH   $<\n"
22
  $(Q)(echo "halt; program $(*).elf verify reset" | nc -4 localhost 4444 2>/dev/null) || \
23
    $(OOCD) -f $(OOCD_FILE) \
24
    -c "program $(*).elf verify reset exit" \
25
    $(NULL)
26
endif

Was OpenOCD wiederum mit "program firmware.elf" genau mit dem Flash 
anstellt weiß ich nicht aber du kannst dir das ja anpassen.

Edit: $(NULL) vergessen ;)

: Bearbeitet durch User
von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ralph S. schrieb:
> Wie kann ich verhindern,
> dass beim reprogramming der Firmware der Bereich ab 0x800300 NICHT
> geloescht wird ?

Das hängt von deinem Flascher-Programm ab. Entweder kannst du ihm sagen, 
daß es nur die benutzten Sektoren löschen soll oder eben nicht, dann 
wird eben alles gelöscht, bevor dein Programm einprogrammiert wird.

W.S.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.