Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Questions : Bootloader PIC32MX695F512L taille fichier HEX



  1. #1
    Moun.T

    Questions : Bootloader PIC32MX695F512L taille fichier HEX

    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 :
    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
    }
    Linker APP:
    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
    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)
    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...

    Help me plz

    J'espère avoir été suffisamment clair :/

    Alexandre

    -----


  2. Publicité
  3. #2
    RISC

    Re : Questions : Bootloader PIC32MX695F512L taille fichier HEX

    Salut,

    Sur quelle carte travailles-tu ?
    As-tu bien respecté la note d'application ?
    Il est mentionnée qu'il faut adapter le linker script pour tenir compte de la taille de l'application ET de la taille du bootloader. L'as tu fais ?
    En effet ces 2 tailles dépendent de la version du compilateur ET du mode d'optimisation que tu utilises (0,1,2,s ou 3). Les modes 0 et 1 sont disponibles dans la version gratuite du compilateur.

    N'hésites à aller sur le forum dédié au PIC32. Il y a des gourous qui pourront peu-être t'aider.

    a+
    Ma marotte ? les microcontrôleurs ;=)

  4. #3
    Moun.T

    Re : Questions : Bootloader PIC32MX695F512L taille fichier HEX

    Bonjour RISC,

    Merci pour l'aide.

    Ma carte est une carte prototype spécial.
    J'ai essayer de respecter la Note d'application mais je t'avous que je ne suis sur de rien quand je lis les différentes discussion sur Forum et l'AN1388 je me mélange un peu..

    En tout cas de ce que j'ai compris dans le linker du bootloader je débute la lecture du bootloader à 0x9D000000 avec une taille de 0xC000. Et la taille de mon application contenue dans la FLASH du PIC est 0x80000 - 0xC000 - 0x1000 - 0x970 - 0x490.

    Je vais essayer de changer le mode de compilation voir ce que ça peu donner.

    Je te tien au courant.

  5. #4
    Moun.T

    Re : Questions : Bootloader PIC32MX695F512L taille fichier HEX

    J'ai enfin réussi à faire fonctionner mon bootloader. Le problème ne vien pas (pour mon cas) du mode d'optimisation.

    Le problème que j'avais concernais les interruptions et les bits de config, comme écris noir sur blanc dans l'AN1388 p1 dans l'encadrée "Note:".

    J'ai donc ajouter dans le projet Bootloader, juste avant le JumpToApp(); la ligne suivante :
    Code:
     INTDisableInterrupts();
    Puis supprimer les bits de config de mon appli (les #pragma ) et ajouter les mêmes dans mon bootloader.

    Je vais fournir dans quelque temps une petite explications sous forme de tuto, des manipulations que j'ai effectuée pour arriver à un bootloader un peu spécial.

    Merci RISC en tout cas.

    Bonne journée
    Dernière modification par Moun.T ; 23/01/2015 à 12h58.

  6. #5
    Moun.T

    Re : Questions : Bootloader PIC32MX695F512L taille fichier HEX

    Pour les personnes intéressée je laisse un document qui résume et "explique" rapidement le principe de mon bootloader un peu revisité.

    Je suis partie de l'AN1388, simulé l'application PIC32UBL en C pour réussir à charger une nouvelle app d'un FLASH externe vers la FLASH du PIC.

    Alexandre
    Fichiers attachés Fichiers attachés

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. KICAD : Questions autour de la taille des pattes
    Par pouic92 dans le forum Électronique
    Réponses: 1
    Dernier message: 04/05/2013, 12h01
  2. envoyer un fichier de grand taille
    Par 1avie dans le forum Internet - Réseau - Sécurité générale
    Réponses: 7
    Dernier message: 30/04/2010, 20h32
  3. Réponses: 21
    Dernier message: 28/06/2008, 21h17
  4. Taille fichier sous Outlook
    Par Ravaner dans le forum Internet - Réseau - Sécurité générale
    Réponses: 1
    Dernier message: 27/03/2008, 12h22
  5. SVP comment modifier la taille dans un fichier ?
    Par roro123 dans le forum Logiciel - Software - Open Source
    Réponses: 20
    Dernier message: 21/05/2006, 20h02