Dieser Bootloader + PIC18F2550 ist praktisch das gleiche wie ein FTDI-Chip + PIC. Bootloader regelt USB-Kommunikation des Anwenderprogramms. Grundidee: Ein Bootloader dessen Routinen zum USB-Kommunikation gemeinsam vom Anwenderprogramm und Bootloader genutzt werden. Mit diesem Bootloader können Sie USB-Schnittstelle aus dem Anwenderprogramm nutzen. Dabei müssen Sie sich nicht mit USB-Programmierung auseinander setzen. Das heißt, das Anfänger auch USB nutzen können. Das Prinzip: Bootloader schaft eine Virtuelle serielle Schnittstelle. Wartet 1s auf PC-Bootloader-Teil und dann geht zu Anwenderprogramm. Dabei bleibt virtuelle serielle Schnittstelle erhalten. Wenn ein Zeichen vom Anwenderprogramm über USB gesendet werden soll dann wird eine Funktion aufgerufen die sich in bereich des Botloaders befindet. CALL 0x0F08 und ab Adresse 0x0F08 befindet sich die Funktion zum senden an USB. So siet das einfachste Programm (CCS-Compiler) zum Senden und empfangen mit USB. Code: #include <18F2550.h> #reserve 0x5:0xF9 // Dieses RAM-Bereich wird vom Bootloader und USB genuzt #reserve 0x400:0x5C7 // Dieses RAM-Bereich Ist USB-Stack #ORG 0x0F08, 0x0F0A // An dieser stelle befindet sich Unterprogramm zum senden eines Zeichens über USB void USB_Char_send(char k) // So heißt diese Unterprogramm in unserem Programm { #locate k=0x0CE } #ORG 0x0F2A, 0x0F2C //Dummy Empfangen eines Zeichens char USB_Char_empf() { } #build(reset=0x1140,interrupt=0x1148) // Resetvektor verbiegen #ORG 0x1200, 0x4000 default // Benutzerprogramm liegt im Speicher ab hier #use delay(clock=48000000) #use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) void main() { char a; while(1) { a=USB_Char_empf(); //Empfange ein Zeichen über USB USB_Char_send(a); // Sende ein Zeichen über USB } } Im Zip-Archive sind Beispielcode für CC8E-Compieler und Assembler enthalten. Am PC schauen Sie im Geräte-Manager bei Anschlüsse unter welchem Nummer der Mischaka Port sich angerichtet hat (Bei mir war es COM4). Dann starten Sie beliebige Terminalprogramm und können sofort mit Ihrer Anwendung im PIC kommunizieren. Noch ein Vorteil bei diesem System. Es ist Programmiersprache und Compiler unabhängig. Sie können im Assembler programmieren und dabei USB Funktionen des Bootloaders nutzen. Einzige Bedienung ist das Anwenderprogramm soll an richtiger Stelle anfangen und reservierte RAM-Bereich nicht beschreiben. Eigenschaften: Resetvektor 0x1140 hier wird Anwenderprogramm gestartet Interruptvektor 0x1148 high priority interrupt Frei verfügbare Speicher(RAM) 1344 Byte Schutz gegen Überschreiben des Bootloaders ist im PIC-Teil und PC-Teil realisiert. Daten die in hex-Datei unter der Adresse 0x1140 liegen werden nicht geflasht. Einschränkungen: Es wird USB-Interrupt benutzt. Anwender darf Interrupts für nicht länger als 10mS abschalten. Sonst trennt PC das USB-Gerät ab. Low priority Interrupt wird nicht Unterstützt. Bootloader kann weder EEPROM noch Konfigurationsbyts beschreiben. Systemclock ist fest 48MHz. Quarz ist 20MHz. Weitere Anwenderprogramm-Beispiele werde ich später posten.
Ich habe Gefühl das ich habe in falsche Forum gepostet.
Vielleicht, ich finde es super, die PIC18-er Anhängerschaft ist hier nicht so groß. Ich habe ihn zwar noch nicht nachgebaut, kommt aber noch. Ich bastel mit dem MBasic Compiler auf PIC18-er, bin zu dusselig für C.
Fettes Teil!! Jetzt noch Analog Digital, Portlese, Portschreibe -Routinen rein dann ist die Haustechnikwelt begeistert!!! Gute 18F-Seite ist auch: http://www.sprut.de/electronic/pic/8bit/18f/programm/usb2550/usb2550.htm und sehr gut: http://www.purebasic.fr/german/viewtopic.php?t=10568&highlight=usb+pic
Hmm. Was soll das Teil denn kosten? Wie stell ich VID + PID ein? oder haben alle Mischaka-Geräte da immer die gleichen? Wofür braucht dein Bootloader so irre viel Flash? Der original Microchip Bootloader geht in 2kb, eine CDC-Implementierung geht in vielleicht 3kb, dein Bootloader allein braucht fast soviel wie beide zusammen. Wieso reicht dein Loader den zweiten IRQ nicht weiter? der PIC hat eh so wenige davon? Was für ein Protokoll spricht der Bootloader? Xmodem? oder irgendwas eigenes, was nicht dokumentiert ist? Kann man wenigstens deine Bootloader-PC-Applikation in eine IDE einbinden? vom Makefile aus starten? Playing Devils advocate, /Ernst
>Ich habe Gefühl das ich habe in falsche Forum gepostet.
Nö, nicht unbedingt. Aber was soll man mit einem HEX File
für einen Bootloader ? Ohne Source kann man den nicht an
die eigenen Bedürfnisse anpassen.
Die Bootdownloader die auch nur als *.exe vorliegen, werden
die erfahrenen Anwender sicher auch nicht mal eben so
ausprobieren. Da könnte ja sonst was drin stecken.
Also: Warum kein Quellcode für den Bootloader ?
Warum kein Quellcode für die Programme zum Bootloader ?
Da muss man ja auf dumme Gedanken kommen :(
Guten Tag, wenn ich bedenke wie lange man braucht um sich in die Tiefen der USB- Funtionalität einzuarbeiten find ich diesen Bootloader eine sehr brauchbare Sache. Und wenn ich sehe, daß sich jemand soviel Arbeit macht soetwas zu entwickeln und es dann frei zur Verfügung stellt und dann dafür noch von Vielen dumm angemacht wird, dann kann ich dafür nur mein Unverständnis zum Ausdruck bringen. Wem es nicht hilft der braucht es ja nicht nutzen. Von mir ein Lob und ein Dankeschön an Mischaka ! Gruß Udo
Einen vollkommen im Source-Code veröffentlichten CDC-Bootloader für den PIC18F2550, der recourcenschonend vollständig in Assembler programmiert ist, findet man unter: http://home.datacomm.ch/str/usbolo.asm
usbolo sieht gut aus, auf meinem 24j50 läuft er nicht. Ich habe UCFG, UADDR, UIE und UEPO..15 nicht in der access bank and zwischendurch wird ja auch noch das USB RAM angewählt. Ich bin total fertig mit den Nerven.
Hallo allerseits Das ist mein erster Beitrag im Forum und ich habe eine Frage zum Bootloader. Ich habe ihn auf einem PIC18F4550 mit dem CC8e Compieler zum Laufen gebracht aber die Interrupts gehen nicht. Mit dem Bootloader von Sprut schon. Also das Programm stimmt soweit.
1 | #pragma origin 0x1140 //x800
|
2 | void reset (void) |
3 | {
|
4 | main(); |
5 | }
|
6 | |
7 | #pragma origin 0x1148 //0x808
|
8 | interrupt highPriorityIntServer(void) |
9 | {
|
10 | _highPriorityInt(); |
11 | |
12 | #pragma fastMode
|
13 | }
|
14 | |
15 | void main(void) |
16 | {
|
Die auskommentierten Adressen sind die für den Bootloader von Sprut. Wenn ich die Interrupts abschalte. GIE = 0; Und den Teil mit dem Interrupt auskommentiere dann geht’s. Mit lässt es sich compilieren, aber der Bootloader brennt es nicht. Wenn man das Programm lädt und Flashen betätigt ist er in 1sek fertig. Es scheint so als würde der Bootloader das HEX ignorieren. Zitat Daten die in hex-Datei unter der Adresse 0x1140 liegen werden nicht geflasht. Hat jemand die Interrupt schon erfolgreich verwendet?
Sorry war wohl etwas übereilt. Habs selbst herausgefunden. Aber vielleicht freut sich jemand über die Lösung.
1 | #pragma origin 0x1140 // 0x800
|
2 | void reset (void) |
3 | {
|
4 | main(); |
5 | }
|
6 | |
7 | #pragma origin 0x1148 // 0x808
|
8 | interrupt highPriorityIntServer(void) |
9 | {
|
10 | _highPriorityInt(); |
11 | |
12 | #pragma fastMode
|
13 | }
|
14 | |
15 | #pragma origin 0x1200
|
16 | void main(void) |
17 | {
|
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.