bottloader with dspic30F4013 [solved] - d2inc - 2012-04-23
Good afternoon,
I am trying to incorporate a boot loader into a project. I have read through microchip's AN1094 and then I saw a link to this boot loader with the idea that changing the script file would not be necessary. So I thought this might be an easier way to get up and running. I have downloaded the code and have actually gotten things off the ground and running... I edited the settings file with my chip particulars, compiled the boot loader for the chip and programmed it into the chip. I have also got the graphic interface to recognize the boot loader and download my project code. This was all great and easy to use (thanks to people like you guys) but I ran into a problem that I can not figure out how to fix. The first load of the project file by way of the bootloader always works. But if I want to update the code after the first try, the boot loader is not recognized. I am sure I am probably "stepping" on the boot loader after it has initially done its job, but I am not understanding all the subtleties of the linker file, which is what I think is causing my problems. I have attached the edited setting file, and I am using the standard dspic30f4013.gld file. Could someone please point me in the right direction to be able to use the boot loader repeatedly for the same IC. Thanks in advance for your help.
I didn't see the attachment when I previewed the post so I am copying the text in here.
Code:
;------------------------------------------------------------------------------
; Device
;------------------------------------------------------------------------------
;.equ __24F16KA102, 1 ;xxx uncomment and change if using PIC24F device
;.equ __24FJ128GA010, 1 ;xxx uncomment and change if using PIC24FJ device
;.equ __24HJ128GP504, 1 ;xxx uncomment and change if using PIC24HJ device
.equ __30F4013, 1 ;xxx uncomment and change if using dsPIC30F device
;.equ __33FJ256GP710A, 1 ;xxx uncomment and change if using dsPIC33FJ device
;------------------------------------------------------------------------------
; Includes
;------------------------------------------------------------------------------
.include "devices.inc"
;------------------------------------------------------------------------------
; User preferences
;------------------------------------------------------------------------------
.equiv FCY, 1842500 ;xxx speed of internal cycle clock[Hz], used to calculate uart brg and delay
.equiv BLINIT, 3000 ;xxx hello receive timeout [ms]
.equiv HELLOTRIES, 2 ;xxx number of non hello characters received before branching to the user application
.equiv BLTIME, 3000 ;xxx data receive timeout [ms]
;------------------------------------------------------------------------------
; UART settings
;------------------------------------------------------------------------------
;.equiv USE_UART1, 1 ;xxx uncomment to use uart1
.equiv USE_UART2, 1 ;xxx uncomment to use uart2
;.equiv USE_UART3, 1 ;xxx uncomment to use uart3
;.equiv USE_UART4, 1 ;xxx uncomment to use uart4
;.equ USE_ALTIO, 1 ;xxx uncomment to use uart 1 alternative i/o, only for dsPIC30F
;.equiv BAUDRATE, 9600 ;xxx baudrate
.equiv BAUDRATE, 57600 ;xxx baudrate
;.equiv USE_ABAUD, 1 ;xxx uncomment to use auto baud rate detection, READ ERRATA FIRST
;.equiv USE_BRGH, 1 ;xxx uncomment to use high baud rates, READ ERRATA FIRST, not available for PIC24F
;.equiv USE_TXENABLE, 1 ;xxx uncomment to use a tx enable pin
.ifdef USE_TXENABLE
.equ TXE_DELAY, 10 ;xxx time in us to wait before transmitting after pulling the tx enable pin high
.equiv TRISR_TXE, TRISA ;xxx tris register containing tx enable
.equiv LATR_TXE, LATA ;xxx port register containing tx enable
.equiv TRISB_TXE, TRISA1 ;xxx tris bit for tx enable
.equiv LATB_TXE, RA1 ;xxx port bit for tx enable
.endif
;------------------------------------------------------------------------------
; Advanced settings
;------------------------------------------------------------------------------
;.equiv KICK_WD, 1 ;xxx uncomment to kick the wd in the rx loop, ONLY enable if watchdog is enabled
.equiv WRITE_VER, 1 ;xxx do flash write verification
.equiv EWRITE_VER, 1 ;xxx do eeprom write verification
.equiv PROT_GOTO, 1 ;protect goto at 0x00
.equiv PROT_BL, 1 ;protect bootloader
.ifdef IS_24F
.equiv BLPLP, 7 ;bootloader placement, pages from end
.equiv BLSIZEP, 7 ;bootloader size [pages], used by bootloader protection
.endif
.ifdef IS_24FJ
.equiv BLPLP, 2 ;bootloader placement, pages from end
.equiv BLSIZEP, 1 ;bootloader size [pages], used by bootloader protection
.endif
.ifdef IS_24HJ
.equiv BLPLP, 1 ;bootloader placement, pages from end
.equiv BLSIZEP, 1 ;bootloader size [pages], used by bootloader protection
.endif
.ifdef IS_30F
.equiv BLPLP, 9 ;bootloader placement, pages from end
.equiv BLSIZEP, 9 ;bootloader size [pages], used by bootloader protection
.endif
.ifdef IS_33FJ
.equiv BLPLP, 1 ;bootloader placement, pages from end
.equiv BLSIZEP, 1 ;bootloader size [pages], used by bootloader protection
.endif
;------------------------------------------------------------------------------
; Configuration bits, these macros can be found at the end of the inc-files located in
; c:\Program files\Microchip\MPLAB ASM30 Suite\Support\dsPIC33F\inc
;
; These can also be set in MPLAB IDE instead, they are found in Configure->Configuration bits...
;------------------------------------------------------------------------------
.ifdef IS_24F
;config __FBS, BSS_OFF/*Boot Segment Code Protect*/ & BWRP_OFF/*Boot Segment Write Protect Enable*/
;config __FGS, GCP_OFF/*General Segment Code Protect*/ & GWRP_OFF/*General Segment Write Protect Enable*/
config __FOSCSEL, FNOSC_FRC/*Initial Oscillator Select*/ & IESO_OFF/*Two Speed Start-up*/
config __FOSC, FCKSM_CSDCMD/*Clock switching and Fail-Safe Clock monitor*/ & SOSCSEL_SOSCLP/*Secondary Oscillator Select*/ & POSCFREQ_MS/*Primary Oscillator Frequency Range*/ & OSCIOFNC_ON/*OSCO Pin Configuration*/ & POSCMOD_XT/*Oscillator Selection*/
;config __FWDT, FWDTEN_OFF/*Watchdog Timer*/ & WINDIS_OFF/*Windowed WDT*/ & FWPSA_PR32/*Watchdog prescaler*/ & WDTPS_PS1/*Watchdog postscale*/
;config __FPOR, MCLRE_ON/*Master Clear Enable*/ & BORV_LPBOR/*Brown Out Voltage*/ & I2C1SEL_PRI/*I2C1 pins Select*/ & PWRTEN_OFF/*Power Up Timer*/ & BOREN_BOR0/*Brown Out Reset*/
;config __FICD, BKBUG_OFF/*Background Debugger*/ & ICS_PGx1/*ICD pins select*/
;config __FDS, DSWDTEN_OFF/*Deep Sleep Watchdog Timer*/ & DSBOREN_OFF/*Deep Sleep BOR*/ & RTCOSC_LPRC/*RTCC Reference Oscillator Select*/ & DSWDTOSC_LPRC/*Deep Sleep Watchdog Oscillator Clock Select*/ & DSWDTPS_DSWDTPS0/*Deep Sleep Watchdog Postscale*/
.endif
.ifdef IS_24FJ
config __CONFIG1, JTAGEN_OFF/*JTAG*/ & GCP_OFF/*code protect*/ & GWRP_OFF/*write protect*/ & BKBUG_OFF/*background debugger*/ & COE_OFF/*clip-on emulation mode*/ & ICS_PGx2/*icd pins select*/ & FWDTEN_OFF/*watchdog timer*/ & WINDIS_OFF/*windowed wdt*/ & FWPSA_PR32/*watchdog prescalar*/ & WDTPS_PS1/*watchdog postscalar*/
config __CONFIG2, IESO_OFF/*two-speed startup*/ & FNOSC_FRC/*oscillator selection*/ & FCKSM_CSDCMD/*clock switching and clock monitor*/ & OSCIOFNC_OFF/*OSC0/RC15 function*/ & POSCMOD_XT/*oscillator selection*/
;config __CONFIG3, WPEND_WPSTARTMEM/*write protect range selection*/ & WPCFG_WPCFGDIS/*write protection config page*/ & WPDIS_WPEN/*write protection*/ & WPFP_WPFP8/*Write Protection Flash Page*/
.endif
.ifdef IS_24HJ
;config __FBS, RBS_NO_RAM & BSS_NO_FLASH & BWRP_WRPROTECT_OFF ;xxx boot segment
;config __FSS, RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF ;xxx secure segment
;config __FGS, GSS_OFF & GCP_OFF & GWRP_OFF ;xxx general segment
config __FOSCSEL, FNOSC_FRC & IESO_OFF ;xxx oscillator mode
config __FOSC, FCKSM_CSDCMD & OSCIOFNC_ON & POSCMD_XT ;xxx clock switching/clock monitor, osc2 & oscillator selection
;config __FWDT, FWDTEN_OFF & WINDIS_OFF ;xxx watchdog
;config __FPOR, FPWRT_PWR1 ;xxx pwm, power-on reset
;config __FICD, BKBUG_ON & COE_ON & JTAGEN_OFF & ICS_PGD1
.endif
.ifdef IS_30F
;config __FOSC, CSW_FSCM_OFF & FRC_PLL16 ;xxx oscillator
config __FOSC, CSW_FSCM_OFF & FRC
config __FWDT, WDT_OFF ;xxx watchdog
config __FBORPOR, PBOR_OFF & PWRT_OFF & MCLR_EN ;xxx power-on reset, brown-out reset, master clear
config __FGS, CODE_PROT_OFF & GWRP_OFF ;xxx code protection
;config __FICD, ICS_PGD ;xxx comm channel select
config __FICD, ICS_PGD & PGD ;xxx comm channel select
.endif
.ifdef IS_33FJ
;config __FBS, RBS_NO_RAM & BSS_NO_FLASH & BWRP_WRPROTECT_OFF ;xxx boot segment
;config __FSS, RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF ;xxx secure segment
;config __FGS, GSS_OFF & GCP_OFF & GWRP_OFF ;xxx general segment
config __FOSCSEL, FNOSC_PRIPLL & IESO_OFF ;xxx oscillator mode
config __FOSC, FCKSM_CSECMD & OSCIOFNC_ON & POSCMD_XT ;xxx clock switching/clock monitor, osc2 & oscillator selection
config __FWDT, WDTPOST_PS256 & WDTPRE_PR128 & FWDTEN_OFF & WINDIS_OFF ;xxx watchdog
config __FPOR, FPWRT_PWR1 ;xxx pwm, power-on reset
config __FICD, JTAGEN_OFF & ICS_PGD1 ;xxx
.endif
;------------------------------------------------------------------------------
; End of file
;------------------------------------------------------------------------------
Well one step forward and one step back. I fixed the problem I had, not reset the chip before trying to download, embarrassing. But while trying to move on to my actual project (previous one was just a test to see if I could get it to go)., I have encountered the following problem...
Parsing hexfile...
File timestamp: 4/19/2012 3:57:49 PM
Opening hexfile...ok
Validating hexfile...ok
Unknown data found on line 485, 16 bytes at 0x1008
Unknown data found on line 486, 16 bytes at 0x1010
Unknown data found on line 487, 16 bytes at 0x1018
Unknown data found on line 488, 16 bytes at 0x1020
More unknown data...
Detected instructions where user goto should be moved to
The hex-file contains code that will overwrite the bootloader
Hex file successfully parsed
the "unknown data found" seems kind of scary, but does the other warning mean the code is to big to fit in with the boot loader?
RE: bottloader with dspic30F4013 - d2inc - 2012-04-24
Another gaffe on my part. It seems that somehow, the wrong chip was remember for the code I attempted originally. the default chip for the dsp30F (1010) got stuck in when I called up the program in the gui. I finally noticed that and the boot loader worked perfectly. Thanks you for your efforts in making this boot loader available to me.
RE: bottloader with dspic30F4013 - Mikael Gustavsson - 2012-04-25
Great! Thanks for reporting the solution.
|