Schritt 7: Bootloader - das PicKit loswerden
1. Warum brauchen wir einen Bootloader?
Ein PicKit herum ist notwendig, aber es liegen rund um unseren Arbeitsbereich mit keinen guten Grund nicht zu haben ist. Zunächst nicht ich wollte mein Leben mit Bootloader zu erschweren, aber später kam ich an die Wahrheit zu erkennen: dieses Projekt ist besser ohne PicKit. Ein einziges Kabel zur Programmierung ist schön, vor allem, wenn es eine extrem häufige USB-Mini Kabel, die jeden Bastler eine Reihe von hat. Glück für mich, Fehler musste auf beiden Platinen befestigt werden so gab es eine gute Gelegenheit, Bootloader Hardware und Funktionen hinzuzufügen. Die fünf Stiftleiste ICSP wurde das Design absichtlich ausgelassen, und ich hatte zu wickeln Drähte um den Bootloader flash Löten. Natürlich - Verkabelung kann nicht dort bleiben, es würde alles vom Tisch zu werfen, wenn der Rotor sich dreht - zum Glück der USB-Steckplatz ist kompakt und kann bleiben. Bei der Programmierung einstecken, Stecker aus testen und Spinnen.
2. USB-Bootloader, einfach und gut
Blick auf das Datenblatt des Prozessors habe ich beschlossen, eine verwenden kann sehen, dass es UART und USB zur Verfügung. Wenn ich UART holen, ich brauche noch ein USB-UART Wandler und ein Bündel von Drähten - Niederlagen der Zweck. So ist die beste, einfachste und schönste Wahl USB. Microchip bietet alle Arten von Code-Beispiele für die Bilder, Bootloader auch. Wenn Sie herunterladen und "Mikrochip Bibliotheken für Anwendungen installieren", werden ein ganzen Ordner über alle Art von USB-Bootloader, Werkzeuge, Anwendungen und andere nützliche Dinge. Im Unterordner "Bootloader" Ich hob "USB-HID Bootloader" und in MPLAB X eröffnet. Nach der Lektüre durch ihn ein paar Mal, die Logik zu verstehen, begann ich zu implementieren die Änderungen die Bretter perfekt, denen ich es verwenden soll.
(3) ein paar Worte über Bootloader
Ein Bootloader ist ein besonderer Abschnitt des Codes, der einmal in Mikrocontrollern geschrieben, und bietet eine Möglichkeit zum Hochladen der Firmware ohne die Notwendigkeit eines besonderen (Hochspannung) Programmierer wie die PicKit in unserem Fall. Leider gibt es keine Möglichkeit, die PicKit komplett verzichten, der Bootloader hat irgendwie in das Bild zu bekommen. Das gute daran: können Sie ein PicKit, ICD2 oder alle PIC-Flasher von einem Freund ausleihen, und geben es wieder einmal den Bootloader in den Microcontroller geschrieben. Danach - können je nachdem, welche Art von Bootloader geflasht haben, Sie Firmware auf Programmspeicher über UART, USB, CAN oder was auch immer hochladen.
Mit Bootloader ist einfach, aber es kommt mit dem Nachteil des Verlustes kostbaren Programmspeicher. Einige Bootloader Essen weniger Platz, einige fressen mehr - dieses habe ich beschlossen, zu verwenden ist ca. 1 K. Beim Start jedes einzelne Bild Befugnisse bei Adresse 0 und beginnt mit der Ausführung jeder Code hat der Programmierer es geschrieben. Wenn es den Bootloader = PIC läuft den Bootloader. Wenn es den Benutzercode = PIC läuft den Benutzercode. Ziemlich einfach!
Um beide verwenden, müssen wir irgendwie zwischen diesen beiden Programmen wechseln. Diese Umstellung kann basierend auf einer Bedingung, Veranstaltung oder was auch immer getan werden - wird es sehr ähnlich wie eine riesige "If"-Anweisung sein. Ich entschied mich für diese Bedingung auf das Spannungsniveau auf ein input-Pin, IO RD3 des Registers PORTD werden. Dieser Pin wurde mit den 5V Pin des USB-Steckers durch einen Widerstand verbunden. Ist die Pin bei 5V beim Start, hat die PIC die Bootloader-Zweig der großen ausführen "Wenn", wenn es auf 0V ist, musste der Anwendung Benutzercode ausgeführt werden. Ich legte den Benutzercode direkt nach dem Bootloader-Code unter Adresse 1000h. Die PIC18F4550 überprüft die RD3-Pin wiederholt, also wenn das USB-Kabel entfernt wird und die 5V aus RD3 verschwindet, das Bild auf den Code an 1000 h, der Anwendungscode platziert springen wird. In der Anwendungscode überprüfe ich wieder den Spannungspegel am RD3, wenn das Programm 5V drauf sieht, das USB-Kabel wieder eingesteckt ist und das Bild hat, um den Bootloader zu springen. Ich mache diesen Sprung in den Bootloader Modus mit einer Inline-Montageanleitung "Zurücksetzen".
Da das Bild beginnt mit der Ausführung von Adresse 0, ist die einfachste und häufigste, was zu tun, die Bootloader-Code und der Code direkt nach dem Bootloader zu platzieren. Der Bootloader-Code kann geändert werden, um zu überprüfen, ob oder nicht es eine gültige Firmware in das Bild geschrieben ist. Dies geschieht durch die Überprüfung des Speicherinhalts auf Adresse 1006-1007 Uhr. Nach jeder erfolgreichen Programmierung wird die Bootloader-Einsätze "600D" (Leet für "gut") an dieser Stelle, was bedeutet, dass der Code erfolgreich in den PIC geschrieben wurde-das ist, was es auf Gültigkeit überprüft. Wir müssen in den Benutzer-Anwendung-Projekt-Einstellungen angeben, dass dieser Lage sollte nicht überschrieben werden, sehen Sie die Bilder zu sehen, wie dies geschehen ist (Röm Bereiche sind, diesen Standort zu überspringen, wenn der Benutzercode Anwendung kompiliert wird angegeben). Nichtbeachtung führt zu Fehlern, die wirklich hart, um später zu erkennen. Der Abschnitt der Bootloader liegt so gut geschützt werden müssen: Dies erfolgt durch Verrechnung des ganzen Anwendungscodes von 1000h (Code offset Parameter auf Linker-Optionen). Bootloader befinden sich in der Regel am Anfang oder am Ende der Programmspeicher - muss darauf geachtet werden, nicht um es zu überschreiben!
Ich wollte einige Parametrisierung für dieses Gerät hinzufügen, das ist, warum die 3000-3100-Palette ist auch geschützt. Sie brauchen nicht, dass nur die eine andere!
4. Probleme habe ich bei der Arbeit mit dem bootloader
Kompilieren des Projekts führt in ein hex-File erzeugt werden - dies hat in der PIC mit einem PicKit oder was auch immer geflasht werden. Mir nicht wollte beginnen, für eine ganze Weile, konnte nicht das USB-Bootloader Tool nichts erkennen. Habe ich beschlossen, Messungen auf dem VUSB-Pin des PIC mit meinem Rahmen und den Moment, den ich habe die Pin mit der Rahmen-Sonde berührt, der bekannteste USB-Sound wiedergegeben und das Board bekam anerkannt! Ich dachte das Problem ging weg, aber sobald ich die Sonde entfernt, die Sache funktionierte wieder. Ich erkannte, dass alles funktioniert, wenn die Umfang Sonde auf, selbst schreibt, setzt ist-das Problem musste etwas sein, das die Sonde fixiert. Dann ich dachte: Was haben Umfang Sonden? Parasitäre Kapazität. Der Kondensator am VUSB-Pin war riesig an Wert und konnte nicht hochfrequente Geräusche herausfiltern. Ein 100nF Kondensator parallel hinzugefügt wurde, und der Vorstand wurde sofort erkannt. Problem gelöst!