View previous topic :: View next topic |
Author |
Message |
Kilobravo
Joined: 09 Sep 2011 Posts: 6
|
Fuse Question |
Posted: Mon Sep 12, 2011 8:50 am |
|
|
I am trying to get a BootLoader to run on a 16F87. It looks like the jump to the BL code gets trashed when I download a program to the PIC
I have used #ORG 0x0F00,0x0FFF {} to protect the BL code.
Is their a way to prevent CCS C from setting the fuses ???
.................... #Fuses HS,NOWDT,PUT,MCLR,
.................... #Fuses NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG
.................... #Fuses NOPROTECT,INTRC_IO
.................... #Fuses NOFCMEN,NOIESO
Configuration Fuses:
Word 1: 3F30 NOWDT PUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IO
Word 2: 3FFC NOFCMEN NOIESO
with #FUSES Commented out the .lst file has this ?????????????????????
Configuration Fuses:
Word 1: 3F73 NOWDT PUT MCLR BROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT RC
Word 2: 3FFF FCMEN IESO |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19500
|
|
Posted: Mon Sep 12, 2011 9:04 am |
|
|
What you are describing, has nothing to do with the fuses. It sounds as if you have a high memory bootloader (the #ORG says this). You still need to offset the CCS code above the small block at the bottom of memory containing the jump to the bootloader, and (if interrupts are used) the relocation for the interrupt vector, with the #build instruction in the CCS code. The build origin woud need to be the one your bootloader jumps to after it has finished.
On the fuses, normally the bootloader would be written to not change the fuses, so whatever the CCS code puts won't matter.
Best Wsihes |
|
|
Kilobravo
Joined: 09 Sep 2011 Posts: 6
|
|
Posted: Mon Sep 12, 2011 10:39 am |
|
|
I do have
#build(reset=0x1, interrupt=0x5) in the CCS code
The BL starts at 0xF00
Read of the chip with just the BL
:200000008A15002FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FAE
Then after the BL downloads the CCS program the chip is unresponsonsive
:20000000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F00
The jump to the BL is gone ?
I will ask the Developer of the DS30 loader if the BL write the fuses or not. I am trying to eliminate the variables that may be causing this.
Thanks ! |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19500
|
|
Posted: Mon Sep 12, 2011 2:53 pm |
|
|
Can your bootloader correctly handle partial page updates?.
Remember that when programming the program memory, you have to erase an entire 'page' at a time. You haven't said your chip, but unless the page size is one byte. The bootloader will have to erase address 0, to write address 1. Hence it is normal to start the CCS code one page 'up' in memory, or the bootloader needs to understand partial page writes, and read the whole page, and just change the required bytes....
Best Wishes |
|
|
Kilobravo
Joined: 09 Sep 2011 Posts: 6
|
|
Posted: Mon Sep 12, 2011 3:05 pm |
|
|
PIC16F87
OK, I got it working somewhat.
from the DS30 compile
0000 158A 00237 PAGESEL blstart
0001 2F00 00238 goto blstart
00239
00240
00241 ;------------------------------------------------------------------------------
00242 ; GOTO user application
00243 ;------------------------------------------------------------------------------
0EFD 00244 org STARTADDR - 3 ;space to deposit goto to user application
0EFD 00245 loadusr
0EFD 0000 00246 nop ;page select, replaced by gui
0EFE 0000 00247 nop ;page select, replaced by gui
0EFF 0000 00248 nop ;goto, replaced by gui
00249
00250
00251 ;------------------------------------------------------------------------------
MPASM 5.42 DS30LOADER.ASM 9-12-2011 14:34:26 PAGE 18
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00252 ; Start of bootloader code
00253 ;------------------------------------------------------------------------------
0F00 00254 org STARTADDR
This is from my CCS C program.
#build(reset=0x0EFC)
which causes this
*
0EFC: MOVLW 00
0EFD: MOVWF 0A
0EFE: GOTO 0C4
0EFF: NOP
Then on the gui I select custom BL 8 pages from then end and 8 pages long
I also checked "Don't write GOTO to the user app"
The BL stays on the chip and will download a small blinky led "hello world" test program. The led flashing works the "hello world" does not. Based on the flashing led rate I think the timing for rs232 is off.
I will keep working on it as time permits. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19500
|
|
Posted: Tue Sep 13, 2011 3:05 am |
|
|
Notice, that in the assembler, your jump to the bootloader, is not at address 0. It is at address 1, which is where you were putting the CCS jump. No wonder it was getting overwritten.... The instruction at address 0, is the page select before the jump is performed.
Best Wishes |
|
|
|