Forum: Projekte & Code Mischaka- USB- PIC- Bootloader für PIC18F2550 Ver.2


von Mischaka (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Gameboy (Gast)


Lesenswert?

Ich habe Gefühl das ich habe in falsche Forum gepostet.

von Bernd (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>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 :(

von zinsserudo (Gast)


Lesenswert?

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

von Rimini (Gast)


Lesenswert?

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

von Jog3k (Gast)


Lesenswert?

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.

von tobiasK (Gast)


Lesenswert?

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?

von tobiasK (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.