Bonjour tout le monde,
Je m'excuse de ne pas passer par la case présentation mais je suis assez presser malheureusement.
Contexte : J'ai modifié le bootloader de l'AN1388 de microchip (UART_Btl_Explorer16.X) pour l'adapter à mon projet. Ceci me permet de charger des projets (projets=>application qui sera lancer par le bootloader) de petite taille, fichier App.Hex = 31ko. Et cela fonctionne parfaitement.
Pour que ça fonctionne, j'ai du modifier les linker ".ld" du bootloader et de l'appli mais également les adresses dans le bootloader.h BREF ça fonctionne.
Je travail sous MPLABX v2.15 , XC32 v1.21
Problème:
Le bootloader fonctionne parfaitement avec un fichier App.Hex de 31ko mais dès que je lui intègre un fichier de 200ko-300ko aucune erreur n'apparait lors de la compile mais le bootloader ne démarre pas l'application.
Linker Bootloader :
Linker APP:Code:/************************************************************************* * Processor-specific peripheral libraries are optional *************************************************************************/ OPTIONAL("libmchp_peripheral.a") OPTIONAL("libmchp_peripheral_32MX695F512L.a") /************************************************************************* * For interrupt vector handling *************************************************************************/ PROVIDE(_vector_spacing = 0x00000001); _ebase_address = 0x9FC01000; /************************************************************************* * Memory Address Equates * _RESET_ADDR -- Reset Vector * _BEV_EXCPT_ADDR -- Boot exception Vector * _DBG_EXCPT_ADDR -- In-circuit Debugging Exception Vector * _DBG_CODE_ADDR -- In-circuit Debug Executive address * _DBG_CODE_SIZE -- In-circuit Debug Executive size * _GEN_EXCPT_ADDR -- General Exception Vector *************************************************************************/ _RESET_ADDR = 0xBFC00000; _BEV_EXCPT_ADDR = (0xBFC00000 + 0x380); _DBG_EXCPT_ADDR = (0xBFC00000 + 0x480); _DBG_CODE_ADDR = 0xBFC02000; _DBG_CODE_SIZE = 0xFF0 ; _GEN_EXCPT_ADDR = _ebase_address + 0x180; /************************************************************************* * Memory Regions * * Memory regions without attributes cannot be used for orphaned sections. * Only sections specifically assigned to these regions can be allocated * into these regions. *************************************************************************/ MEMORY { kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0xC000 /* All C Files will be located here */ kseg0_boot_mem : ORIGIN = 0x9FC00490, LENGTH = 0x0 /* This memory region is dummy */ exception_mem : ORIGIN = 0x9FC01000, LENGTH = 0x1000 /* Interrupt vector table */ kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x490 /* C Startup code */ debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0 config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4 config2 : ORIGIN = 0xBFC02FF4, LENGTH = 0x4 config1 : ORIGIN = 0xBFC02FF8, LENGTH = 0x4 config0 : ORIGIN = 0xBFC02FFC, LENGTH = 0x4 kseg1_data_mem (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x20000 sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000 configsfrs : ORIGIN = 0xBFC02FF0, LENGTH = 0x10 }
Code:OPTIONAL("libmchp_peripheral.a") OPTIONAL("libmchp_peripheral_32MX695F512L.a") /************************************************************************* * For interrupt vector handling *************************************************************************/ PROVIDE(_vector_spacing = 0x00000001); _ebase_address = 0x9D00C000; /************************************************************************* * Memory Address Equates *************************************************************************/ _RESET_ADDR = (0x9D00C000 + 0x1000 + 0x970); _BEV_EXCPT_ADDR = (0x9D00C000 + 0x1000 + 0x970 + 0x380); _DBG_EXCPT_ADDR = (0x9D00C000 + 0x1000 + 0x970 + 0x480); _DBG_CODE_ADDR = 0xBFC02000; _DBG_CODE_SIZE = 0xFF0 ; _GEN_EXCPT_ADDR = _ebase_address + 0x180; /************************************************************************* * Memory Regions * * Memory regions without attributes cannot be used for orphaned sections. * Only sections specifically assigned to these regions can be allocated * into these regions. *************************************************************************/ MEMORY { kseg0_program_mem (rx) : ORIGIN = (0x9D00C000 + 0x1000 + 0x970 + 0x490), LENGTH = (0x80000 - 0xC000 - 0x1000 - 0x970 - 0x490) kseg0_boot_mem : ORIGIN = (0x9D00C000 + 0x1000), LENGTH = 0x970 exception_mem : ORIGIN = 0x9D00C000, LENGTH = 0x1000 /* Dummy IVT to fool the linker. This code uses no ISR*/ kseg1_boot_mem : ORIGIN = (0x9D00C000 + 0x1000 + 0x970), LENGTH = 0x490 debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0 config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4 config2 : ORIGIN = 0xBFC02FF4, LENGTH = 0x4 config1 : ORIGIN = 0xBFC02FF8, LENGTH = 0x4 config0 : ORIGIN = 0xBFC02FFC, LENGTH = 0x4 kseg1_data_mem (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x18000 sfrs : ORIGIN = 0xBF800000, LENGTH = 0x10000 configsfrs : ORIGIN = 0xBFC02FF0, LENGTH = 0x10 }
Bootloader.h
Je commence a désespérer ça fait plus de deux semaine que j’essaie de créer ce bootloader et au moment ou cela fonctionne avec une petite App, avec l'App que je veux intégrer ça fonctionne pas...Code:#define PROGRAM_FLASH_END_ADRESS (0x9D000000+BMXPFMSZ-1) //Origin : (0x9D000000+BMXPFMSZ-1) #define APP_FLASH_BASE_ADDRESS 0x9D00C000 //Origin : 0x9D006000 #define APP_FLASH_END_ADDRESS PROGRAM_FLASH_END_ADRESS /* Address of the Flash from where the application starts executing */ /* Rule: Set APP_FLASH_BASE_ADDRESS to _RESET_ADDR value of application linker script*/ #define USER_APP_RESET_ADDRESS (0x9D00C000 + 0x1000 + 0x970) //origin (0x9D006000 + 0x1000 + 0x970)
Help me plz
J'espère avoir été suffisamment clair :/
Alexandre
-----