Hallo Mischaka,
jetzt habe ich verstanden, was dein BL bezwecken soll.
Aber trotzdem habe ich paar Anmerkungen:
Mein Bootloader regelt noch Zusätzlich USB-Kommunikation des Anwenderprogramms.
Genau diese Idee hatte ich auch, dass der Anwender auch die USB Routinen benutzt. Leider handelt man sich dabei fast nur Probleme ein, v.a. wegen den Interrupts, aber das hatte ich in meinem vorherigen Post ja schon angesprochen.
Letztendlich habe ich im FLASH-ROM zwei mal Deskriptoren und Routinen zum USB–Kommunikation. Einmal vom Bootloader und einmal vom meinem Programm.(nicht gerade sparsame Umgang mit dem Speicher).
Es ist richtig, dass die USB Routinen doppelt sind. Da sie aber im Normalfall kleiner als 2kB sind, passt der BL in den dafür vorgesehenen Bereich, der sich per Config gegen Überschreiben sichern lässt. Daher noch mal die Frage: Wie groß ist dein BL und ist er gegen ein eigenes Überschreiben geschützt?
2kB sind im Vergleich zu 32kB ein ziemlich kleiner Teil (6,25%), die man doch wirklich opfern kann. Bei einem 18FxxJ50 entspricht das bei 128kB Flash gerade mal 1,5%.
Keine Ahnung steht so im Datenblatt des PICs. Wenn USB benutzt wird dann braucht PIC 1k speicher für USB.
Da hast du was nicht verstanden. :angel1: Die USB-Engine braucht nur 1kB, wenn alle Endpoints (inklusive PingPong-Buffering) benutzt werden. Pro verwendetem Endpunkt sind das 8Byte (je 4byte für In und Out, das dopplete bei Odd und Even Buffern, vgl Datasheet S.177, Fig 17-7) . Da ich davon ausgehe, dass deine Schnittstelle Interrupt Transfers benutzt, kommst mit 8Byte für die Endpoints und 8Byte für die Nutzdaten pro Übertragung aus. Den Rest kannst du frei verwenden.
Mein Bootloader + PIC18F2550 ist praktisch das gleiche wie ein FDTI-Chip + PIC.
Das erreichst du auch, wenn du den MC BL nutzt, und sich die Anwendung zB als HID am PC anmeldet (sozusagen 2 "Geräte" in einem). Dann kannst du doch auch ganz easy deine Daten übertragen, notfalls auch über die emulierte RS232 Schnittstelle wie du es tust. Und die Problematik mit den Interrupts besteht dann nicht mehr. Hast du dir denn da schon was überlegt, wie du das verbessern möchtest? Wie schnell ist der Loader eigentlich?
Auch nach deiner Erklärung möchte ich an meinem Fazit aus dem obigen Post festhalten: Die von dir erstelle Funktionalität lässt sich mit getrennten USB Routinen eleganter und mit weniger Einschränkungen erreichen.
Nichtsdestotrotz möchte ich deine Arbeit loben, da ich weiß, wie aufwendig und schwierig ist, eine ordentlich funkionierende USB Schnittstelle zu programmieren.
Gruß Stefan