You don't need reset for bootloader. Why bootloader must start first?
I always load hex file via main app in external eeprom, or in upper half of PIC FLASH memory.
In main app there is already all you need to connect to PC or whatever. So use that to load HEX from PC.
And at end of code there is bootloader that copy from upper half to a lower half of FLASH. That bootloader is precompiled.Code:INTCON=0 FOR Adr=32768 TO 65023 STEP BlockSize ERASECODE Adr NEXT Adr FOR Adr=0 TO 32255 Err=0 FwReceive: Err=Err+1 IF Err=250 THEN GOTO DeliteAndReset ENDIF HSEROUT2 ["A:",DEC6 Adr,3] HSERIN2 100, FwReceive, [WAIT("D:"), Tmp0, Tmp1] IF Tmp0<>Tmp1 THEN GOTO FwReceive Adr.15=1 WRITECODE Adr,Tmp0 Adr.15=0 NEXT Adr GOTO StartBootloader
Code for that is:Code:@ ORG .65024 StartBootloader: ASM dw 0EF3Dh, 0F07Fh, 06EF6h, 06AF8h, 00E94h, 06E7Fh, 00E55h, 06E7Eh, 00EAAh, 06E7Eh, 0827Fh, 00000h, 0947Fh, 0EF3Ah, 0F07Fh, 06AF8h dw 00E80h, 06E7Fh, 00009h, 050F5h, 0EF3Ah, 0F07Fh, 06AF8h, 06EF5h, 0000Ch, 028F6h, 00B3Fh, 0E109h, 00E84h, 06E7Fh, 00E55h, 06E7Eh ETC...
EDIT:Code:DEFINE RESET_ORG .65024 Adr VAR WORD Tmp VAR BYTE BlockSize VAR BYTE BANKA SYSTEM @ MovLW BLOCK_SIZE @ MovWF BlockSize FOR Adr=0 TO 32255 STEP BlockSize ERASECODE Adr NEXT Adr FOR Adr=0 TO 32255 'Ne diraj zadnjih 512B Adr.15=1 READCODE Adr,Tmp Adr.15=0 WRITECODE Adr,Tmp NEXT Adr @ RESET
Hope that this is not too confusing...
EDIT2:




Bookmarks