Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
bottloader with dspic30F4013 [solved]
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.

; 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    ""

; 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
; 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
        .ifdef    IS_24FJ
            .equiv    BLPLP,            2            ;bootloader placement, pages from end
            .equiv    BLSIZEP,        1            ;bootloader size [pages], used by bootloader protection
        .ifdef IS_24HJ
            .equiv    BLPLP,            1            ;bootloader placement, pages from end
            .equiv    BLSIZEP,        1            ;bootloader size [pages], used by bootloader protection
        .ifdef    IS_30F
            .equiv    BLPLP,            9            ;bootloader placement, pages from end
            .equiv    BLSIZEP,        9            ;bootloader size [pages], used by bootloader protection
        .ifdef IS_33FJ
            .equiv    BLPLP,            1            ;bootloader placement, pages from end
            .equiv    BLSIZEP,        1            ;bootloader size [pages], used by bootloader protection

; 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*/
        .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*/
        .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
        .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
        .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

; 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?
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.
Great! Thanks for reporting the solution.

Forum Jump:

Users browsing this thread: 1 Guest(s)