Forum: Mikrocontroller und Digitale Elektronik CAN Bootloader - PIC


von Florian J. (fjay24)


Lesenswert?

Hallo zusammen,

ich habe die schöne Aufgabe die Updatefähigkeit über CAN bei einem 
PIC18F26K80 sicherzustellen.

Nun habe ich bzgl. dieses Themas noch gar keine Erfahrungen gemacht.

Zunächst mal wollte ich das ganze Konzept mal Symbolisch darstellen:


  __________                          _____________
  |         |                          |             |
  |   PC    |----- USB2CAN-Adapter-----| PIC18F26K80 |
  |_________|                          |_____________|

Jetzt mal zu den Komponenten die ich Benötige:

- Bootloader auf dem PIC
- Konfigurationsprogramm auf dem PC, welches die neuen HEX Files nimmt 
und über den USB2CAN-Adapter überträgt.

Und nun meine Fragen:

1. Der PIC hat einen 64KB großen Flash-Speicher, nun weis ich nicht ob 
ich ca. die hälfte des Speichers für neue SW-Versionen reservieren muss 
weil der Prozess zunächst über CAN die kompletten Daten empfängt und 
anschließend brennt oder ob die Daten Paketweise gebrannt werden, so 
dass ich mehr als die Hälfte für meine SW zur Verfügung habe.

2. Hat jemand Codebeispiele oder jegliche Informationen zu dieser 
Thematik?


Das wars vorerst, wäre wirklich sehr dankbar über jede noch so kleine 
Information.

Viele Grüße

Flo

von Volker S. (vloki)


Lesenswert?

1. Denk noch mal drüber nach. Wenn zuerst das ganze Programm irgendwo im 
ROM gespeichert werden müsste und dann nochmal woanders hin im ROM warum 
dann nicht gleich an die richtige Stelle?
Der Bootloader erhält die Daten Blockweise und schreibt die dann an die 
mitgelieferte Adresse.

2. Da gibt es einen Haufen Application Notes zum Thema Bootloader.
z.B. AN247 - A CAN Bootloader for PIC18F CAN Microcontrollers

Wenn du die MLA installiert hast, dann kannst du auch mal unter
...mla\v2015_08_10\apps\usb\device\bootloaders nachschauen.
Da ist auch Sourcecode für eine PC Software dabei (Qt5)
Die ist eigentlich für USB HID, aber ich könnte mir vorstellen,
dass man das mit nicht allzu großem Aufwand anpassen könnte.
Wollte ich selber schon mal machen, bin aber bisher noch nicht dazu 
gekommen.

von Florian J. (fjay24)


Lesenswert?

Hallo Volker,

vielen Dank für deine Infos, da bin ich erleichtert, sonst wäre der 
Speicherplatz des Chips wsl. zu klein gewesen.

Also ich habe die CANIO.ASM jetzt kompiliert, diese muss ich nun in den 
PIC schreiben mit der entsprechenden Adresse in den Linker 
Einstellungen, sodass der Bootloader seinen festen platz findet hat.

Da wartet noch einiges an Arbeit aber es ist schon mal ein Anfang, bin 
gerade noch am einlesen.

MFG

Flo

von FChK (Gast)


Lesenswert?

Du könntest auch ein externes spi-RAM wie zB 23lc512 verwenden, dort die 
empfangenen Blöcke Zwischenspeichern, Prüfsumme bilden, und erst wenn 
alles ok ist, den RAM-Inhalt ins Flash schreiben.

fchk

von Thomas E. (picalic)


Lesenswert?

Bei meinem Bootloader (http://www.picalic.de/bootloader/) mache ich es 
so, daß der Bootloader nach einem Reset eine Prüfsumme über den 
Applikationscode bildet. Wenn irgendwas beim Upload schief gelaufen ist, 
bleibt er nach Reset halt im Bootloader und man muß es nochmal 
versuchen...

von Florian J. (fjay24)


Lesenswert?

Hallo zusammen,

danke für eure Tipps.

@ Thomas: Ja so etwas habe ich mir dann auch vorgestellt um eben 
fehlerhafte Übertragungen zu detektieren.

Bin aber grad noch am einlesen und ausarbeiten von AN247 von Microchip. 
Im Grunde hab ichs jetzt einigermaßen verstanden.

Meine Vorgehensweise jetzt:

- Ich lade den CANIO.asm Bootloader von Microchip (in AN247) in den PIC 
und schütze diesen dann vorm Überschreiben.
- Anschließend suche ich mir alle Commands die über den CAN-Bus 
eintreffen können und liste diese auf.
- Dann brauche ich noch die Applikation auf dem HOST-PC welche dann das 
Hex-File interpretiert und mit den richtigen CAN-Botschaften (PUT/GET, 
CONTROL/DATA) über den USB2CAN-Adapter auf den PIC lädt.

So jetzt mal mein grober Plan... aber der Teufel steckt natürlich wie 
immer im Detail :P

Gruß

Flo

von Volker S. (vloki)


Lesenswert?

Florian J. schrieb:
> Bin aber grad noch am einlesen und ausarbeiten von AN247 von Microchip.
> Im Grunde hab ichs jetzt einigermaßen verstanden.

Weil ich es schon ewig vorhatte um unseren Studierenden auch nach dem 
Labor und der Rückgabe der ausgeliehenen Programmiergeräte (PICKIT3) 
noch die Programmierung ihrer Boards zu ermöglichen, habe ich mich jetzt 
mal an die AN1310 "High-Speed Bootloader for PIC16 and PIC18 Devices" 
dran gesetzt.

Ich muss sagen das ging echt fix. Auch da ist neben dem Bootloader 
Projekt wie bei USB-HID auch noch eine PC Software dabei.
Schade, dass das bei dem AN247 CAN Bootloader nicht der Fall ist.

: Bearbeitet durch User
von Bad U. (bad_urban)


Lesenswert?

Bei einem CAN-Bootloader gehts ja auch um die Frage, wie dieser 
eingesetzt wird. Bei einer Punkt-zu-Punkt Verbindung kann man leicht 
bestehende Libs und PC-Software nutzen. Da gibts einiges, genau wie bei 
USB oder UART Bootloadern.
Hängt das upzudatende Device an einem Bus wird das Ganze komplizierter 
und es gibt keine allgemeinen Lösungen mehr. Das ist zumindest meine 
Erfahrung.

von Florian J. (fjay24)


Lesenswert?

Hallo Leute,

nach längerer Zeit berichte ich mal wieder:

Ich hab jetzt mal ein Hostprogramm erstellt welches in der Lage ist ein 
Hexfile zu konvertieren und über den CAN zu übertragen. Weiterhin bin 
ich immer noch dran die "CANIO.asm" von "AN247" an meine bedürfnisse 
(Hardware) anzupassen, aber der assemblercode ist einfach nur ein 
wirrwarr ohne sinnvolle Kommentare oder einen Leitfaden.

Hat jemand schon mal mit dem sample bootloader von AN247 gearbeitet?

MFG

Florian

von Bad U. (bad_urban)


Lesenswert?

Florian J. schrieb:
> aber der assemblercode ist einfach nur ein
> wirrwarr

Ich weiß ja nicht wie fit Du in ASM bist. Ich bins nicht und hab ASM 
seit meiner Lehrzeit nicht mehr benutzt. Darum habe ich mich auch beim 
Bootloader für C entschieden. Klar, Codegröße und 
Ausführungsgeschwindigkeit leiden darunter. Das ist aber bei meiner 
Anwendung kein Problem.

von Marcel W. (macew)


Lesenswert?

Hallo,
das Thema ist zwar schon etwas älter und länger nicht mehr aktualisiert 
worden, aber ich habe die gleiche Aufgabenstellung wie Florian und 
verwende ebenfalls den PIC18F26K80 und wollte deshalb mal nachfragen, ob 
es dazu ein Update oder eine bereits funktioniernde Software-Lösung 
gibt? Problematisch für mich ist, dass ich keinerlei Erfahrung mit 
Assembler habe und im angegebenen AN247 Dokument von microchip nur 
Assembler Beispielcode zu finden ist :-/...

MFG

Marcel

von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?

Ich nutze diesen:
https://wiki.kewl.org/dokuwiki/projects:wellington
http://hg.kewl.org/pub/wellington/

Wellington ist an Tiny PIC Bootloader angelehnt und ist GPL3 lizensiert.

von Marcel W. (macew)


Lesenswert?

Neuer Thread zum Thema Wellington Bootloader

Beitrag "Wellington PIC18 Bootloader"

: Bearbeitet durch User
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.