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
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
Hallo Frank, vielen, vielen Dank für Deine umfassende Antwort! Damit hast Du sehr geholfen. LG Dieter
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
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.