Because of the Thanksgiving holiday in the U.S., TI E2E™ design support forum responses may be delayed from November 25 through December 2. Thank you for your patience.

TMS320F28379D: LAUNCHXL-F28379D dev kit: Cannot load and run dual-core blinky example to RAM

Part Number: TMS320F28379D
Other Parts Discussed in Thread: UNIFLASH, C2000WARE

Tool/software:

Hello, I'm baselining the F28379D MCU's inter-process comms and hit a wall with dual-core RAM configurations. I need some education as to how the CPU2 boot process for RAM works.

I've successfully compiled custom dual-core applications in FLASH configurations, uploaded them via the uniflash command line, and ran them successfully. However, when repeating this process in a RAM configuration, I can't get CPU2 to boot at all.

To achieve a known starting point, I went back to the dual-core blinky example from C2000Ware (driverlib/f2837xd/examples/dual/led) and compiled for a RAM target via CCS. Whether I flash via CCS, the uniflash GUI, or the uniflash command line, I can only get CPU1's LED to blink.

Is there a potential issue with how I am compiling or flashing this example code?

My issue points to a misunderstanding on my part as to how CPU2 boots, so help is appreciated.

uniflash version: v8.7.0

C2000Ware version: v5.02.00.00

CCS version: v12.8.0

OS: Ubuntu 22.04

My uniflash invocation:

flasher=/opt/ti/uniflash_*/dslite.sh

flash_board_config=configs/flash_board_config.ccxml

settings="--verbose -N --config=$flash_board_config"

$flasher $settings --core 2 led_ex1_blinky_cpu2/CPU2_RAM/led_ex1_blinky_cpu2.out
$flasher $settings --core 0 led_ex1_blinky_cpu1/CPU1_RAM/led_ex1_blinky_cpu1.out --run


uniflash_output.txt
Executing the following command:
> /opt/ti/uniflash_8.7.0/deskdb/content/TICloudAgent/linux/ccs_base/DebugServer/bin/DSLite flash --verbose -N --config=configs/flash_board_config.ccxml --core 2 led_ex1_blinky_cpu2/CPU2_RAM/led_ex1_blinky_cpu2.out

For more details and examples, please refer to the UniFlash Quick Start guide.

DSLite version 12.7.0.3382
Configuring Debugger (may take a few minutes on first launch)...
        Initializing Register Database...
        Initializing: IcePick_C_0
        Executing Startup Scripts: IcePick_C_0
        Initializing: C28xx_CPU1
        Executing Startup Scripts: C28xx_CPU1
        Initializing: CPU1_CLA1
        Executing Startup Scripts: CPU1_CLA1
        Initializing: C28xx_CPU2
        Executing Startup Scripts: C28xx_CPU2
        Initializing: CPU2_CLA1
        Executing Startup Scripts: CPU2_CLA1

--- Available Cores ---
0: Texas Instruments XDS100v2 USB Debug Probe/C28xx_CPU1
1: Texas Instruments XDS100v2 USB Debug Probe/CPU1_CLA1
2: Texas Instruments XDS100v2 USB Debug Probe/C28xx_CPU2
3: Texas Instruments XDS100v2 USB Debug Probe/CPU2_CLA1

Connecting...
C28xx_CPU1: GEL Output:
Memory Map Initialization Complete
info: C28xx_CPU1: If erase/program (E/P) operation is being done on one core, the other core should not execute from shared-RAM (SR) as they are used for the E/P code. Also, CPU1 will be halted to determine SR ownership for the CPU which will run the Flash Plugin code, after which CPU1 will be set to run its application. User code execution from SR could commence after both flash banks are programmed.
C28xx_CPU2: GEL Output:
Memory Map Initialization Complete
info: C28xx_CPU2: If erase/program (E/P) operation is being done on one core, the other core should not execute from shared-RAM (SR) as they are used for the E/P code. Also, CPU1 will be halted to determine SR ownership for the CPU which will run the Flash Plugin code, after which CPU1 will be set to run its application. User code execution from SR could commence after both flash banks are programmed.
Loading Program: led_ex1_blinky_cpu2/CPU2_RAM/led_ex1_blinky_cpu2.out
        Preparing ...
        .text: 0 of 4 at 0x0
        .text: 0 of 44 at 0xa2
        .text: 0 of 1666 at 0xb000: 2%
        Finished: 2%
        Setting PC to entry point.: 2%
Success
Executing the following command:
> /opt/ti/uniflash_8.7.0/deskdb/content/TICloudAgent/linux/ccs_base/DebugServer/bin/DSLite flash --verbose -N --config=configs/flash_board_config.ccxml --core 0 led_ex1_blinky_cpu1/CPU1_RAM/led_ex1_blinky_cpu1.out --run

For more details and examples, please refer to the UniFlash Quick Start guide.

DSLite version 12.7.0.3382
Configuring Debugger (may take a few minutes on first launch)...
        Initializing Register Database...
        Initializing: IcePick_C_0
        Executing Startup Scripts: IcePick_C_0
        Initializing: C28xx_CPU1
        Executing Startup Scripts: C28xx_CPU1
        Initializing: CPU1_CLA1
        Executing Startup Scripts: CPU1_CLA1
        Initializing: C28xx_CPU2
        Executing Startup Scripts: C28xx_CPU2
        Initializing: CPU2_CLA1
        Executing Startup Scripts: CPU2_CLA1

--- Available Cores ---
0: Texas Instruments XDS100v2 USB Debug Probe/C28xx_CPU1
1: Texas Instruments XDS100v2 USB Debug Probe/CPU1_CLA1
2: Texas Instruments XDS100v2 USB Debug Probe/C28xx_CPU2
3: Texas Instruments XDS100v2 USB Debug Probe/CPU2_CLA1

Connecting...
C28xx_CPU1: GEL Output:
Memory Map Initialization Complete
info: C28xx_CPU1: If erase/program (E/P) operation is being done on one core, the other core should not execute from shared-RAM (SR) as they are used for the E/P code. Also, CPU1 will be halted to determine SR ownership for the CPU which will run the Flash Plugin code, after which CPU1 will be set to run its application. User code execution from SR could commence after both flash banks are programmed.
Loading Program: led_ex1_blinky_cpu1/CPU1_RAM/led_ex1_blinky_cpu1.out
        Preparing ...
        .text: 0 of 4 at 0x0
        .text: 0 of 8 at 0x123
        .data: 0 of 36 at 0x128
        .text: 0 of 1832 at 0x8000
        .data: 0 of 764 at 0xa800: 27%
        .text: 0 of 4096 at 0xb000: 39%
        Finished: 39%
        Setting PC to entry point.: 39%
Running...
Success

 

  • Hi Brian,

    Just to clarify, you are running the led_ex1_blinky_cpu1 and led_ex1_blinky_cpu2 examples unchanged, correct? You should be able to run this example from CCS with the following steps:

    1. Import both projects into a CCS workspace by doing Project >> Import CCS Projects... >> [navigate to led_ex1_blinky_cpu1 in C2000ware]
    2. Both projects should automatically import and be set to the RAM build configuration
    3. Build both projects by right clicking each of the project names and selecting "Build Project" 
    4. Go to View >> Target Configurations and navigate to the target config file for one of the example projects
    5. Right click on the ccxml file and select "Launch Selected Configuration" to connect to the debugger
    6. Right click on CPU1 and select "Connect Target"
    7. Select Run >> Load >> Load Program and navigate to led_ex1_blinky_cpu1.out
    8. Click the "Resume" button to start running the code on CPU1
    9. Repeat steps  7-11 on CPU2

    Best Regards,

    Delaney

  • Thanks for the response - your steps worked albeit without the two LEDs synced like I expected.

    I now just need help transcribing this to the uniflash commandline, my goal is to flash to RAM and immediately run without having to hit the physical restart button on the launchpad. Can you assist with that?

    Alternatively, if you can give an example to flash this using the uniflash GUI, I could then transcribe to the commandline myself.

  • Hi Brian,

    I will loop in the Uniflash expert to assist you with this.

    Best Regards,

    Delaney

  • Hi Brian,

    After the first RAM application has downloaded, have you tried to reset through the command line interface using the "-r" argument?

    It's mentioned in the UniFlash Quick Start Guide .

    Also, would it be beneficial to your process to generate a package for both CPU1 and CPU2 application prior to calling the DSLite shell?

    Thanks and regards,

    Charles

  • Hey Charles, thanks for the reply. I've attempted a number of permutations, including CPU and system resets, swapping which core flashes first, and combinations of the `--run` switch. I'm interpreting your suggestion as:

    flasher=/opt/ti/uniflash_*/dslite.sh
    
    flash_board_config=configs/flash_board_config.ccxml
    
    settings="--verbose -N --config=$flash_board_config"
    
    $flasher $settings --core 2 led_ex1_blinky_cpu2/CPU2_RAM/led_ex1_blinky_cpu2.out
    
    $flasher $settings -r 0
    
    $flasher $settings --core 0 led_ex1_blinky_cpu1/CPU1_RAM/led_ex1_blinky_cpu1.out --run

    Is that correct?

    In this case, the uniflash execution runs to completion with no errors, but only CPU1 actually boots judging from the state of the LEDs (i.e., the red LED stays on). 

    I'd attach my ccxml file and binaries for completeness, but looks like I can't attach files to replies. Regardless, the blinky source files were untouched from the C2000Ware example, and were compiled using the default CCS environment.

    When you refer to a "package", are you referring to the zip file that uniflash can generate? If so, I don't yet see an advantage over invoking uniflash via my own shell script like I'm currently doing.