Forum: Mikrocontroller und Digitale Elektronik PIC24FJ64GA705 Firmware auf einem PIC24FJ256GA705 flashen


von Dieter S. (dsteinwe)


Lesenswert?

Hallo,

ich starte mein erstes Projekt auf einem PIC24FJ64GA705. Ich habe es nun 
endlich geschafft, mein eigenes Board mit einem PicKit4 unter MPLAB 
erfolgreich zu programmieren und zum Testen eine LED zum Blinken zu 
bringen.

Aufgrund der geringen Anforderungen an das Projekt brauche ich nur einen 
PIC24FJ64GA705. Allerdings hatte ich aufgrund des Chipmangels zum 
Prototyping ein paar PIC24FJ256GA705 erworben. Die beiden MCUs sind bis 
auf die Größe des Speichers funktional identisch. Nun hatte ich das 
Projekt für den PIC24FJ64GA705 konfiguriert und konnte mit dieser 
Konfiguration den PIC24FJ256GA705 nicht programmieren. Erst nachdem ich 
in der "default" Konfiguration das "Device" auf "PIC24FJ256GA705" 
gesetzt hatte, konnte ich dem PIC programmieren und die Fehlermeldung 
"Target Device ID (0x750f0000) is an Invalid Device ID. Please check 
your connections to the Target Device." trat dann nicht mehr auf.

Aufgrund der oben geschilderten Erfahrungen sind nun bei mir 2 Fragen 
entstanden:

1.) Kann man einen PIC24FJ256GA705 nicht doch irgendwie mit einer 
Firmware PIC24FJ64GA705 programmieren? Wenn ja, was könnte ich falsch 
gemacht haben? Wenn nein, woran scheitert es, denn ich hätte erwartet, 
dass eine Firmware auch immer in eine baugleiche MCU mit einem größeren 
Speicher passt?

2.) Später werden im Feld Boards mit PIC24FJ64GA705, PIC24FJ128GA705 und 
PIC24FJ256GA705 im Einsatz seien, je nachdem, wie die ICs verfügbar 
sind. Wenn ich diese Boards mit einem Firmwareupdate versehe, muss ich 
für jede MCU-Variante dann eine eigene Firmware erzeugen oder passt dann 
die Firmware für den PIC24FJ64GA705 für alle Varianten?

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Dieter S. schrieb:

> 1.) Kann man einen PIC24FJ256GA705 nicht doch irgendwie mit einer
> Firmware PIC24FJ64GA705 programmieren? Wenn ja, was könnte ich falsch
> gemacht haben? Wenn nein, woran scheitert es, denn ich hätte erwartet,
> dass eine Firmware auch immer in eine baugleiche MCU mit einem größeren
> Speicher passt?

Nein, das funktioniert nicht. Siehe aktuelles Datenblatt Seite 42 Figure 
4-1 "PROGRAM SPACE MEMORY MAP FOR PIC24FJ256GA705 DEVICES"

Am Ende des Flashes sind die Config Words, die wichtige 
Systemeigenschaften setzen. Die werden in den ersten Prozessorzyklen in 
die entsprechenden Hardwareregister geladen, bevor der Prozessor 
anläuft. Bei den unterschiedlichen Verianten ist das Ende natürlich 
immer woanders.

Zu den Configuration words siehe Kapitel 29.1 ab Seite 329 im 
Datenblatt.

> 2.) Später werden im Feld Boards mit PIC24FJ64GA705, PIC24FJ128GA705 und
> PIC24FJ256GA705 im Einsatz seien, je nachdem, wie die ICs verfügbar
> sind. Wenn ich diese Boards mit einem Firmwareupdate versehe, muss ich
> für jede MCU-Variante dann eine eigene Firmware erzeugen oder passt dann
> die Firmware für den PIC24FJ64GA705 für alle Varianten?
Wenn Du die Firmware über ICSP flashst, wirst Du immer verschiedene 
Varianten brauchen. Wenn Du einen eigenen Bootloader über seriell etc 
baust, könntest Du mit einer einzigen Firmware auskommen, die die Config 
Words jeweils an die passende Stelle schreiben. (wenn die Config words 
überhaupt neu geschrieben werden müssen, meist bleiben die gleich)

Vielleicht gibts da doch noch eine Lösung. Probiere mal, ob Deine 
Hardware anläuft, wenn die Configuration words alle auf FFFFFF sind 
(Defaultzustand). Wenn ja, dann wäre das erste, was Du in Deinem Code 
machen müsstest:
* Device ID auslesen (siehe Seite 340) und Ende des Flashes bestimmen
* Config words auslesen und auf Richtigkeit prüfen
* Wenn Config words falsch sind:
  - letzte Page löschen
  - Config Words schreiben
  - Reset auslösen (RESET-Instruktion oder wenn das nicht reicht, 
Hardware Reset)

fchk


fchk

von Dieter S. (dsteinwe)


Lesenswert?

Hallo Frank,

vielen, vielen Dank für Deine umfassende Antwort! Damit hast Du sehr 
geholfen.

LG
Dieter

von Achim M. (minifloat)


Lesenswert?

Frank K. schrieb:
> Bei den unterschiedlichen Verianten ist das Ende natürlich immer
> woanders.

Damit haben sie sich aber selber ein Ei gelegt.
mfg mf

von Dieter S. (dsteinwe)


Lesenswert?

Die Motivation, bei Bedarf zwischen den PIC-Varianten zu wechseln, ist 
der aktuellen Chip-Knappheit geschuldet. Die erste Board-Version hatte 
ich erfolgreich mit einem STM32F030xxx gebaut. Als mir dann für die 
Bestellung der MCUs ein Liefertermin in 2024 genannt wurde, hatte ich 
mich für ein Redesign mit den PICs entschieden.

In der Tat bin ich aber nicht so glücklich darüber, dass ich für die 
Unterstützung der unterschiedlichen Varianten einen Mehraufwand habe. 
Für den niedrigen Preis der PICs gehe ich aber dieses Übel ein; und 
leider muss ich auf den Preis schauen. Wenn es mir aber die 
Lieferbarkeit der MCU ermöglicht, bleibe ich natürlich beim 
PIC24FJ64GA705 und vielleicht muss ich diesen Aufwand mir dann nicht 
machen. Die Hoffnung stirbt ja bekanntlich zuletzt ...

von Dieter S. (dsteinwe)


Lesenswert?

Nun endlich bin ich tiefer in die PIC-Programmierung eingestiegen und 
beginne nun, meinen eigenen Bootloader für das Firmware Update zu 
implementieren, da die bestehenden Lösungen (EZBL oder UBHA) nicht meine 
Anforderungen genügen. Ich habe mal die hex-Dateien für den 
PIC24FJ64GA705, PIC24FJ128GA705 und PIC24FJ245GA705 verglichen. Ich 
konnte am Programm-Anfang Unterschiede feststellen. Vermutlich hat Frank 
K. hier zu oben schon korrekt die Ursache beschrieben:

> Am Ende des Flashes sind die Config Words, die wichtige
> Systemeigenschaften setzen. Die werden in den ersten Prozessorzyklen in
> die entsprechenden Hardwareregister geladen, bevor der Prozessor
> anläuft. Bei den unterschiedlichen Verianten ist das Ende natürlich
> immer woanders.

Eine weitergehende Analyse habe ich nicht mehr durchgeführt, da der 
Flash-Vorgang in meinem Anwendungsfall die Ausnahme ist und ich da nicht 
so viel Schmalz investieren will, enthält die zu flaschende Datei alle 
hex-Dateien mit MCU-Kennung. Das ist nicht elegant aber einfach.

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.