Forum: Mikrocontroller und Digitale Elektronik RX210 flashen


von Matthias G. (matthias1102)


Lesenswert?

Hallo alle zusammen.
Ich habe einen STM32 an einen RX210 angeschlossen. Der STM32 soll den RX 
programmieren. Das Programm für den RX kommt aus einem Memory-Stick der 
über USB an den STM32 angeschlossen ist. Soweit funktioniert auch alles: 
Der STM öffnet und liest das File, steuert die erforderlichen Eingänge 
um den RX in den Boot mode zu bringen und programmiert die aus dem File 
gelesenen Bytes ins Flash des RX über die Standart-UART die das 
Bootprogramm des RX benutzt (SPI1). Der STM kann dann auch den 
programmierten Code aus dem RX auslesen und darstellen (über eine 2. 
UART im STM auf einem Terminal). Alles scheint überein zu stimmen.
Der Code im RX läuft aber nicht an. Ich kann nicht feststellen ob der RX 
überhaupt den Reset-Vector liest. Der tut offenbar einfach nichts. Das 
geflashte Programm läuft aber einwandfrei, wenn ich es mit einem 
Emulator/Programmer in den RX flashe. Hat irgendjemand sowas abgedrehtes 
schon mal gemacht?
Letztlich beschränkt sich diese Frage auf: Hat jmd schon mal den RX mit 
einem eigenen Programm geflasht? Ohne Zurhilfenahme eines Renesas-Tools?

Ich mache damit jetzt schon eine Woche rum und bin für jeden Hinweis 
oder Tipp dankbar. Vor Allem: Ich bin jetzt, glaube ich, betriebsblind 
und sehe den Wald vor lauter Bäumen nicht mehr...

Übrigens, das Programm das ich im Moment flashe toggelt einen Portpin, 
mehr nicht.

Matthias

von Bla (Gast)


Lesenswert?

Hier gibt's ein Tool zum Flashen von RX Controllern, evtl. kannst du ja 
mal Quellcode vergleichen ob du am Protokoll etwas gravierend anders 
machst oder so?

http://www.delorie.com/electronics/rx-stick/flash-tool/flash-tool.tar.gz

von m.n. (Gast)


Lesenswert?

Matthias G. schrieb:
> Das
> geflashte Programm läuft aber einwandfrei, wenn ich es mit einem
> Emulator/Programmer in den RX flashe.

Kann es sein, dass es dabei im RAM und nicht im Flash landet?
Wenn ja, dürfte es beim Aus- Einschalten nicht mehr laufen.
Überprüf mal das Linker-Listing bzw. die Einstellungen für 
DEBUG/RELEASE.

von Matthias G. (matthias1102)


Lesenswert?

Danke für die Antwort.
Ich hab das Archiv eben geöffnet. Der Code scheint für die 
M32-Controller zu sein, die benutzen aber ein ganz ähnliches Protokoll 
zum Flashen. Ich schue es mir an.
Danke nochmal, Matthias

von Matthias G. (matthias1102)


Lesenswert?

Also ich habe mittlerweile mein Programm erweitert. Nach dem 
eigentlichen Flash-Vorgang wird das File auf dem USB-Stick nochmals 
geöffnet und mit dem Inhalt des Flash verglichen. Es gibt keine 
Unterschiede. Das Flash wird einwandfrei programmiert.
Der Zielort RAM ist abwegig, da diese Vergleichsroutine gezielt die 
Adressen ausliest die die einzelne S-Record vorgibt.
Aber nichts desto trotz, danke an alle die mir helfen wollen !!

Matthias

von Dr. Sommer (Gast)


Lesenswert?

Schuss ins Blaue: Nach dem Flashen per STM32 den RX abstöpseln und per 
normalem Programmer auslesen und gucken ob es so aussieht wie es soll?

von Matthias G. (matthias1102)


Lesenswert?

...per normalem Programmer auslesen und gucken...

Tja, wenn das mal so einfach wäre. Sobald der RX in den Boot-Mode geht 
löscht er automatisch sein internes Flash, die User Boot Area und sein 
Data Flash. Das Ding ist dann komplett leer. Ich hab diesbezüglich mit 
Glyn gesprochen - es gibt keine Möglichkeit in den RX hinein zu schauen 
ohne in den Boot-Mode zu gehen.
Ich bin aber sicher, das der STM den RX richtig programmiert, der RX 
"springt nur nicht an". Ich denke, das ist ein Hardware-Problem. Ich 
bekomme noch diese Woche eine Platine die einen solideren Aufbau aller 
Komponenten (RX210, STM32F401, FT800 und Grafikdisplay) ermöglicht. Die 
Platine dient mir als Prototyp für das spätere endgültige Design. Ich 
bin gespannt, wie sich der RX auf der neuen Platine verhält.

Trotzdem danke, Deine Idee war schon richtig - nur nicht durchführbar.

Matthias

von Matthias G. (matthias1102)


Lesenswert?

Spät melde ich mich wieder, ich weiß.
Mittlerweile habe ich das Problem gelöst. Der Teufel steckte, wie immer, 
im Detail.
Beim Auslesen eines "Registers" des Controllers werden 2 Kennungen 
zurückgegeben, eine Kennung für "Big Endian" und eine für "Little 
Endian". Eine der beiden Kennungen muss dann im Verlauf des 
Programmierens an den Controller zurück gegeben werden. Und ich hab aus 
Schusseligkeit die falsche übergeben.
Mein Code lag im Format "Big Endian" vor, die Kennung die ich 
fälschlicherweise übergab war aber die für "Little Endian". Die Tools, 
mit denen ich mir den internen Flash angesehen habe, haben die 
Einstellung "Little Endian" erkannt und die Darstellung auf dem 
Bildschirm entsprechend angepasst. So dachte ich stets, alles sei 
richtig programmiert, was es tatsächlich aber nicht war.
Darauf bin ich gekommen, nachdem ich jedes Byte untersucht habe das vom 
Controller kam bzw. ging. Und da fiel mir der Fehler auf.

Allen, die mir helfen wollten, nochmals meinen Dank.

Matthias

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.