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.
#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.