This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Ozone settings with bootloader

Hello,

I tried to configure Ozone for aws_fota sample without any success. I loaded elf files but one is debuging mcu boot and the other never access to the main. Do someone have an idea please ?

Parents
  • Hello,

    Have you commented the AfterTargetReset() and AfterTargetDownload() implementation in your Ozone project? Those will by default make the program jump directly to the start of the executable you are currently debugging. i.e.,  cause the MCUBOOT/SPM part of the boot sequence to be skipped if you are attempting to debug the main app. 

    Ozone *.jdebug project file I used to debug the aws fota sample:

    /*********************************************************************
    *               (c) SEGGER Microcontroller GmbH                      *
    *                        The Embedded Experts                        *
    *                           www.segger.com                           *
    **********************************************************************
                                                                          
    File          :                                                     
    Created       : 03 Jan 2020  9:10                                                    
    Ozone Version : V2.70e                                                    
    */
    
    /*********************************************************************
    *                                                                     
    *       OnProjectLoad                                                 
    *                                                                     
    * Function description                                                
    *   Project load routine. Required.                                   
    *                                                                     
    **********************************************************************
    */                                                                    
    void OnProjectLoad (void) {
      //
      // Dialog-generated settings
      //
      Project.AddPathSubstitute ("C:/Users/vibe/Desktop", "$(ProjectDir)");
      Project.AddPathSubstitute ("c:/users/vibe/desktop", "$(ProjectDir)");
      Project.SetDevice ("nRF9160");
      Project.SetHostIF ("USB", "");
      Project.SetTargetIF ("SWD");
      Project.SetTIFSpeed ("1 MHz");
      Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-M33F.svd");
      Project.AddSvdFile ("$(InstallDir)/Config/Peripherals/ARMv7M.svd");
      //
      // User settings
      //
      File.Open ("C:/vidar/workspace/ncs/nrf/samples/nrf9160/aws_fota/build_nrf9160_pca10090ns/zephyr/zephyr.elf");
    }
    
    /*********************************************************************
    *                                                                     
    *       OnSnapshotLoad                                                
    *                                                                     
    * Function description                                                
    *   Optional event handler, called upon loading a snapshot.           
    *                                                                     
    * Additional information                                              
    *   This function is used to restore the target state in cases        
    *   where values cannot simply be written to the target.              
    *   Typical use: GPIO clock needs to be enabled, before               
    *   GPIO is configured.                                               
    *                                                                     
    **********************************************************************
    */                                                                    
    //void OnSnapshotLoad (void) {                                        
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       OnSnapshotSave                                                
    *                                                                     
    * Function description                                                
    *   Optional event handler, called upon saving a snapshot.            
    *                                                                     
    * Additional information                                              
    *    This function is usually used to save values of the target       
    *    state which can either not be trivially read,                    
    *    or need to be restored in a specific way or order.               
    *    Typically use: Memory Mapped Registers,                          
    *    such as PLL and GPIO configuration.                              
    *                                                                     
    **********************************************************************
    */                                                                    
    //void OnSnapshotSave (void) {                                        
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *      TargetReset                                                    
    *                                                                     
    * Function description                                                
    *   Replaces the default target device reset routine. Optional.       
    *                                                                     
    * Notes                                                               
    *   This example demonstrates the usage when                          
    *   debugging a RAM program on a Cortex-M target device               
    *                                                                     
    **********************************************************************
    */                                                                    
    //void TargetReset (void) {                                           
    //                                                                    
    //  unsigned int SP;                                                  
    //  unsigned int PC;                                                  
    //  unsigned int VectorTableAddr;                                     
    //                                                                    
    //  VectorTableAddr = Program.GetBaseAddr();                          
    //                                                                    
    //  if (VectorTableAddr != 0xFFFFFFFF) {                              
    //    SP = Target.ReadU32(VectorTableAddr);                           
    //    Target.SetReg("SP", SP);                                      
    //  } else {                                                          
    //    Util.Log("Project file error: failed to get program base");   
    //  }                                                                 
    //                                                                    
    //  PC = Elf.GetEntryPointPC();                                       
    //                                                                    
    //  if (PC != 0xFFFFFFFF) {                                           
    //    Target.SetReg("PC", PC);                                      
    //  } else if (VectorTableAddr != 0xFFFFFFFF) {                       
    //    PC = Target.ReadU32(VectorTableAddr + 4);                       
    //    Target.SetReg("PC", PC);                                      
    //}
    /*********************************************************************
    *                                                                     
    *       BeforeTargetReset                                             
    *                                                                     
    * Function description                                                
    *   Event handler routine. Optional.                                  
    *                                                                     
    **********************************************************************
    */                                                                    
    //void BeforeTargetReset (void) {                                     
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       AfterTargetReset                                              
    *                                                                     
    * Function description                                                
    *   Event handler routine.                                            
    *    - Sets the PC register to program reset value.                   
    *    - Sets the SP register to program reset value on Cortex-M.       
    *                                                                     
    **********************************************************************
    */ 
    
                                                                       
    /* void AfterTargetReset (void) {
      unsigned int SP;                                                
      unsigned int PC;                                                
      unsigned int VectorTableAddr;                                   
                                                                      
      VectorTableAddr = Elf.GetBaseAddr();                            
                                                                      
      if (VectorTableAddr != 0xFFFFFFFF) {                            
        SP = Target.ReadU32(VectorTableAddr);                         
        Target.SetReg("SP", SP);                                    
      } else {                                                        
        Util.Log("Project file error: failed to get program base"); 
      }                                                               
                                                                      
      PC = Elf.GetEntryPointPC();                                     
                                                                      
      if (PC != 0xFFFFFFFF) {                                         
        Target.SetReg("PC", PC);                                    
      } else if (VectorTableAddr != 0xFFFFFFFF) {                     
        PC = Target.ReadU32(VectorTableAddr + 4);                     
        Target.SetReg("PC", PC);                                    
      }
    } */
    
    /*********************************************************************
    *                                                                     
    *       DebugStart                                                    
    *                                                                     
    * Function description                                                
    *   Replaces the default debug session startup routine. Optional.     
    *                                                                     
    **********************************************************************
    */                                                                    
    //void DebugStart (void) {                                            
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       TargetConnect                                                 
    *                                                                     
    * Function description                                                
    *   Replaces the default target IF connection routine. Optional.      
    *                                                                     
    **********************************************************************
    */                                                                    
    //void TargetConnect (void) {                                         
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       BeforeTargetConnect                                           
    *                                                                     
    * Function description                                                
    *   Event handler routine. Optional.                                  
    *                                                                     
    **********************************************************************
    */                                                                    
    //void BeforeTargetConnect (void) {                                   
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       AfterTargetConnect                                            
    *                                                                     
    * Function description                                                
    *   Event handler routine. Optional.                                  
    *                                                                     
    **********************************************************************
    */                                                                    
    //void AfterTargetConnect (void) {                                    
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       TargetDownload                                                
    *                                                                     
    * Function description                                                
    *   Replaces the default program download routine. Optional.          
    *                                                                     
    **********************************************************************
    */                                                                    
    //void TargetDownload (void) {                                        
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       BeforeTargetDownload                                          
    *                                                                     
    * Function description                                                
    *   Event handler routine. Optional.                                  
    *                                                                     
    **********************************************************************
    */                                                                    
    //void BeforeTargetDownload (void) {                                  
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *      AfterTargetDownload                                            
    *                                                                     
    * Function description                                                
    *   Event handler routine.                                            
    *    - Sets the PC register to program reset value.                   
    *    - Sets the SP register to program reset value on Cortex-M.       
    *                                                                     
    **********************************************************************
    */                                                                    
    /* void AfterTargetDownload (void) {
      unsigned int SP;                                                
      unsigned int PC;                                                
      unsigned int VectorTableAddr;                                   
                                                                      
      VectorTableAddr = Elf.GetBaseAddr();                            
                                                                      
      if (VectorTableAddr != 0xFFFFFFFF) {                            
        SP = Target.ReadU32(VectorTableAddr);                         
        Target.SetReg("SP", SP);                                    
      } else {                                                        
        Util.Log("Project file error: failed to get program base"); 
      }                                                               
                                                                      
      PC = Elf.GetEntryPointPC();                                     
                                                                      
      if (PC != 0xFFFFFFFF) {                                         
        Target.SetReg("PC", PC);                                    
      } else if (VectorTableAddr != 0xFFFFFFFF) {                     
        PC = Target.ReadU32(VectorTableAddr + 4);                     
        Target.SetReg("PC", PC);                                    
      }
    } */
    
    /*********************************************************************
    *                                                                     
    *       BeforeTargetDisconnect                                        
    *                                                                     
    * Function description                                                
    *   Event handler routine. Optional.                                  
    *                                                                     
    **********************************************************************
    */                                                                    
    //void BeforeTargetDisconnect (void) {                                
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       AfterTargetDisconnect                                         
    *                                                                     
    * Function description                                                
    *   Event handler routine. Optional.                                  
    *                                                                     
    **********************************************************************
    */                                                                    
    //void AfterTargetDisconnect (void) {                                 
    //}                                                                   
    
    /*********************************************************************
    *                                                                     
    *       AfterTargetHalt                                               
    *                                                                     
    * Function description                                                
    *   Event handler routine. Optional.                                  
    *                                                                     
    **********************************************************************
    */                                                                    
    //void AfterTargetHalt (void) {                                       
    //}                                                                   
    

  • Hello Vidar, 

    Do you have any another idea about that ?

  • My Ozone project is just your configuration file that target an aws_fota sample built with SES.

  • It worked Ozone 3.10 as well. Here is what I did:

    1. Loaded the merged.hex with SES

    2. Opened the Ozone project which loads the application .elf file. 

    3. Selected "attached to running programming" followed by "Reset & break at symbol".  As shown below, this made the program halt in main().

    But I'm not sure how good Ozone supports debugging of multiple images at the same time. The File.Load() command "replace any previously loaded debug symbols". Maybe there is another command to load additional debug symbols. SES has that option.

  • Hello,
    Thank you Vidar, you fixed my mistake, I was using "download & reset program", not "attach to running program"

  • Hello,

    Thanks for confirming. I guess it's possible that the .elf and .hex file have different padding rules and thus cause the boot validation to fail (results in a different hash digest or checksum). It's something we should more look into.

  • Hello,

    I fixed that by adding this in the Ozone configuration that you proposed.

    void TargetDownload (void) { 
    Target.LoadMemory("$(ProjectDir)/build_nrf9160_pca10090ns/zephyr/merged.hex", 0);                                      
    }

Reply Children
No Data
Related