I looked at 2 yr old posting here regarding modification of the USB Vendor Class Bootloader from Microchip written in C18 and ran into a couple of issues that are now resolved. But, FYI:
1st, I was modifying this to use an EPROM value set from within PicBasic Pro to jump into the bootloader vs. a jumper setting etc. One problem I had was going over the size limit for the boot block. Once I removed the BlinkUSB() routines it was able to fit again. Adding the read and write to the EEPROM was pushing it.
2nd, I could not get the EEPROM read or write to work properly. I started with the more discrete routines accessing EECON2bits, etc. and finally switched to Read_B_eep() et al. None of this worked until I hit the following routine which actually reads and writes successfully. From main.c:
Simply doing something like "eeTemp = Read_b_eep(address);" did not return the correct value for me on read. Also, the only reason I broke out the bootload into a separate routine was that I was trying to also have the PORTB bits as a secondary option. I could easily put that into the if eeTemp portion.Code:void enterbootload(void) { //Bootload Mode mInitializeUSBDriver(); // See usbdrv.h USBCheckBusStatus(); // Modified to always enable USB module while(1) { USBDriverService(); // See usbdrv.c BootService(); // See boot.c } } void main(void) { unsigned char eeTemp; unsigned int address; address = 0x0009; EEADR = address; Read_b_eep(address); eeTemp = EEDATA; // Check EEProm-based Bootload Entry Condition if(eeTemp == 0x01) { Write_b_eep(address, 0x00); // write into to EEPROM Busy_eep(); enterbootload(); } _asm goto 0x1000 _endasm }




Bookmarks