| 
	
	|  |  |  
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| siemel 
 
 
 Joined: 06 Dec 2024
 Posts: 2
 
 
 
			    
 
 | 
			
				| Problem: DSPIC33CK128GM310 and bootloader |  
				|  Posted: Mon Dec 09, 2024 2:43 am |   |  
				| 
 |  
				| Hi everyone, 
 I am working on a project where a microcontroller must be upgradable permanently. So, a bootloader must be used and stayed in the program.
 
 Microcontroller : DSPIC33CKEP128GM310
 IDE : MPLAB x IDE
 CCS C compiler : PCD version 5.109
 
 For starting, I am using the examples "ex_pcd_bootloader.c" and "ex_pcd_bootload.c". I had modified them.
 
 I have programmed the µcontroller with the following program :
 
  	  | Code: |  	  | ///                      EX_PCD_BOOTLOADER.C                          //// 
 //#define ROM_WRITE_CAN_MODIFY_CONFIG_BITS
 
 #include <33EP128GM310.h>
 #fuses NOIOL1WAY     //allow multiple reconfigurations of peripheral pins, so application can assign it's peripheral pins
 #use delay(internal=140MHz)
 
 #define UART_TX_PIN     PIN_B7
 #define UART_RX_PIN     PIN_C10
 #define UART_BAUD       9600
 #pin_select U1TX=UART_TX_PIN
 #pin_select U1RX=UART_RX_PIN
 #use rs232(uart1, xmit=UART_TX_PIN, rcv=UART_RX_PIN, baud=UART_BAUD, errors)
 
 #define PUSH_BUTTON     PIN_C9  // PRG1
 #define LED_RED     PIN_C7
 
 #define LOADER_PAGES 4
 #define _bootloader
 //#define BOOTLOADER_MODE2X
 
 #include <pcd_bootloader.h>
 #include <loader_pcd.c>
 
 #org APPLICATION_START
 void application(void)
 {
 printf("\r\nbootloader App reset cause %d\r\n", restart_cause());
 
 delay_ms(100);
 printf("\r\nApplication bootloader");
 while(TRUE){
 output_toggle(LED_RED);
 delay_ms(500);
 
 if(!input(PUSH_BUTTON))
 {
 printf("\r\nBootloader Version 1.0\r\nflash erase size %x\r\nLOADER_END %x\r\n APPLICATION_START %x\r\nAPPLICATION_END %x\r\n", getenv("FLASH_ERASE_SIZE"),LOADER_END, APPLICATION_START,APPLICATION_END);
 
 // Let the user know it is ready to accept a download
 printf("\r\nWaiting for download...");
 
 // Load the program
 load_program();
 }
 }
 }
 
 void main(void)
 {
 printf("\r\nbootloader Main reset cause %d\r\n", restart_cause());
 printf("\r\nbootloader Main reset cause %d\r\n", restart_cause());
 
 output_high(LED_RED);
 
 if(!input(PUSH_BUTTON))
 {
 delay_ms(140);
 
 printf("\r\nBootloader Version 1.0\r\n");
 
 // Let the user know it is ready to accept a download
 printf("\r\nWaiting for download...");
 
 // Load the program
 load_program();
 }
 
 application();
 }
 
 #int_default
 void isr(void)
 {
 jump_to_isr(LOADER_END+5);
 }
 
 | 
 On my terminal, I have
 "bootloader Main reset cause 0
 bootloader Main reset cause 16
 bootloader App reset cause  16
 Application bootloader"
 
 When I push the button, the "load_program" function is called.
 I am using SIOW.exe for download the following program :
 
 
  	  | Code: |  	  | ////                       EX_PCD_BOOTLOAD.c                           ////
 #include <33EP128GM310.h>
 #fuses NOIOL1WAY     //allow multiple reconfigurations of peripheral pins, so application can assign it's peripheral pins
 #use delay(internal=140MHz)
 
 #define UART_TX_PIN     PIN_B7
 #define UART_RX_PIN     PIN_C10
 #define UART_BAUD       9600
 #pin_select U1TX=UART_TX_PIN
 #pin_select U1RX=UART_RX_PIN
 #use rs232(uart1, xmit=UART_TX_PIN, rcv=UART_RX_PIN, baud=UART_BAUD, errors)
 
 #define LED_RED     PIN_C7
 
 #define LOADER_PAGES 4
 //#define BOOTLOADER_MODE2X
 
 //This is a necessary include file.  It reserves space so that the bootloader is not overwritten.
 #include <pcd_bootloader.h>
 
 rom char version[] = "Application Version 1.0";
 
 void main()
 {
 
 output_low(LED_RED);
 delay_ms(100);
 
 printf("\r\n%s\r\n", version);
 
 printf("You can put whatever code you want here.\r\n");
 
 printf("So enjoy!\r\n");
 
 while(TRUE)
 {
 }
 }
 | 
 7 lines before the end of the files, I have obtained an error "timeout while downloading".
 The terminal displays
 "bootloader App reset cause 0
 Application bootloader"
 The value "0" means "restart at power up".
 So, the microcontroller resets.
 
 I have also tried the command line "ccsbootloader". I have got the error "PIC Stopped responding"
 
 Do you have any idea of the cause of this reset ?
 
 If I press again the push button, I can finish the downloading of the program.
 
 Thanks for your help
 |  |  
		|  |  
		| temtronic 
 
 
 Joined: 01 Jul 2010
 Posts: 9589
 Location: Greensville,Ontario
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Mon Dec 09, 2024 5:38 am |   |  
				| 
 |  
				| quick comments... 
 1) I hope you copied the original bootloader and modified YOUR copy and NOT the original CCS programs ! You should never edit them.
 
 2) timeout error.. seems to indicate either the WDT has been enabled or SIOW has a 'timer' enabled.
 I don't use that PIC or bootloader but curios how you know it's 7 lines before end of program it quits. I've seen a terminal program 'timeout' when the micro has to deal with a long line of code. that takes too long, so the terminal program aborts the download process.
 
 I'm sure someone will reply soon with the real reason.....
 |  |  
		|  |  
		| Ttelmah 
 
 
 Joined: 11 Mar 2010
 Posts: 19967
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Mon Dec 09, 2024 10:50 am |   |  
				| 
 |  
				| First get rid of the pin definitions in the #USE RS232. UART1 says to use the hardware UART, no pins needed. You have already assigned the pins.
 Then, the application loaded internally with the bootloader, is only meant to
 be a 'placeholder'. It should not contain any code. Having code here upsets
 the sizes allocated as part of the bootloader process. It is possible to
 have a program included with the bootloader, but this requires special
 setting up, not adding to the bootloader code like this. You seem to be
 trying to put bootloader code into the space for the application. This is
 not how the this is done.
 |  |  
		|  |  
		| siemel 
 
 
 Joined: 06 Dec 2024
 Posts: 2
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Dec 11, 2024 1:45 am |   |  
				| 
 |  
				| @temtronic Yes, I made a copy of the programs.
 
 I will look at the settings of te terminals.
 
 Thanks for your reply
 
 @Ttelmah
 I will do some other researchs for doing this.
 
 Thank you also for your reply
 |  |  
		|  |  
		|  |  
  
	| 
 
 | You cannot post new topics in this forum You cannot reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 
 |  
 Powered by phpBB © 2001, 2005 phpBB Group
 
 |