This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Debug both ARM and DSP together

Hello,

I'm able to use bootloader to run both ARM and DSP binary in stand-alone mode in a very simple way where uartEcho for ARM and LED blinking for DSP

I'm able to use bootloader to run ONLY my "production" binary in ARM (about 32 KB)

However, once I combine ARM "production" with DSP blinking LED, the bootloader runs ONLY DSP with LED blinking and stops ARM where there's no greeting message on serial console from ARM

My questions are

1) Is there any rule required in running both ARM and DSP ?

2) How to debug both ARM and DSP to see where it hangs ?

Thanks,

~Duy-Ky

  • Is there anything to do with memory usage.

    My ARM link script is

    //-stack  0x8000                             /* SOFTWARE STACK SIZE           */
    -stack  0xF000                             /* SOFTWARE STACK SIZE           */
    -heap   0x2000                             /* HEAP AREA SIZE                */
    -e Entry

    /* SPECIFY THE SYSTEM MEMORY MAP */

    MEMORY
    {
    //        DDR_MEM        : org = 0xC1080000   len = 0x02F7FFFF     /* RAM 0xC1080000 ~ C3FFFFFF : C4000000*/
            DDR_MEM        : org = 0xC0000000   len = 0x04000000     /* RAM 0xC1080000 ~ C3FFFFFF : C4000000*/
    }

    /* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */

    SECTIONS
    {
        .init      : {
                     system_config.lib<init.obj> (.text)
                   } load > 0xC2000000

        .text    : load > DDR_MEM              /* CODE                              */
        .data    : load    > DDR_MEM
        .bss     : load > DDR_MEM              /* GLOBAL & STATIC VARS              */
                        RUN_START(bss_start),
                        RUN_END(bss_end)
        .const   : load > DDR_MEM              /* SOFTWARE SYSTEM STACK             */
        .cinit   : load > DDR_MEM              /* SOFTWARE SYSTEM STACK             */
    //    .stack   : load > 0xC3FF7FFC           /* SOFTWARE SYSTEM STACK  C4000000 - 8004           */
        .stack   : load > 0xC3FF0FFC           /* SOFTWARE SYSTEM STACK   C4000000 - F000          */

    }

    while my DSP one is

    -stack 0x1000
    -heap 0x1000

    // ============================================================================
    //                         Specify the System Memory Map
    // ============================================================================
    MEMORY
    {
        L1P:    o = 0x11E00000        l = 0x00008000
        L1D:    o = 0x11F00000        l = 0x00008000
        L2:     o = 0x11800000        l = 0x00040000
        DDR2:   o = 0xC0000000        l = 0x08000000
    }

    // ============================================================================
    //                 Specify the Sections Allocation into Memory
    // ============================================================================
    SECTIONS
    {
        .cinit        >        DDR2               // Initialization Tables
        .pinit        >        DDR2               // Constructor Tables
        .init_array   >        DDR2               //
        .binit        >        DDR2               // Boot Tables
        .const        >        DDR2               // Constant Data
        .switch       >        DDR2               // Jump Tables
        .text         >        DDR2               // Executable Code
        .text:_c_int00: align=1024 > DDR2         // Entrypoint
        
        GROUP (NEARDP_DATA)                       // group near data
        {
           .neardata
           .rodata
           .bss                                   // note: removed fill = 0
        }             >        DDR2
        .far: fill = 0x0, load > DDR2             // Far Global & Static Variables
        .fardata      >        DDR2               // Far RW Data
        .stack        >        DDR2               // Software System Stack
        .sysmem       >        DDR2               // Dynamic Memory Allocation Area
        
        .cio          >        DDR2               // C I/O Buffer
        .vecs         >        DDR2               // Interrupt Vectors
    }

    Thanks,

    ~Duy-Ky

  • Duy-Ky,

    It looks like your ARM and DSP applications are built to use the same region in shared memory (i.e. 0xC0000000), so that is probably why the system doesn't work correctly.  I recommend moving either the ARM or the DSP later in DDR memory to prevent a collision.  You should check your .map files to be sure that the ARM and DSP applications don't overlap.

    Hope this helps.

  • We suggest the consultant to go through the live or online training details below to get more comfortable with the ARM + DSP Environment:

    -          Live Training: http://focus.ti.com/docs/training/catalog/events/event.jhtml?sku=4DW102644

    -          Online Training: http://processors.wiki.ti.com/index.php/OMAP%E2%84%A2/DaVinci%E2%84%A2_System_Integration_using_Linux_Workshop

     -          http://processors.wiki.ti.com/index.php/Example_application_using_DSP_Link_on_OMAPL1x

     

    Also,

    From the threads shared it seems like you are using Starterware on the ARM side and BIOS on the DSP side (they have SATA RTFS queries etc).  If you don’t plan to use DSPLINK and Linux etc, the other option to look at would be StarterWare also includes three example applications for the IPCLite module.  (IPCLite would be used for communication between the ARM and DSP after boot.)