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.

F28377D Dual Core Flash Project

Hi,

I am working with a F28377D device and am trying to get the Dual Core projects working from Flash. I am having trouble getting the Blinky example project working. I have linked in the Flash linker cmd files for both projects. If I load the program into CPU1 and run it without loading the program into CPU2, I can get the LED to blink. However when I try and load the program into CPU2, my CPU1 program gets stuck in the while loop in the IPCBootCPU2() function. 

The program is trying to determine the state of the IpcRegs.IPCBOOTSTS register, but a value of 0 is always returned.

I have modified the linker cmd files for both projects so that the memory is not overwritten when I load the two programs. I am unsure if the way I am loading  the programs to the cores is correct.

The other strange thing is that if I power cycle my device, I can see both LED's blinking, which leads me to believe that both cores are running.

I would appreciate any help in this matter.

Faizan

  • Hi Faizan,

    Did you go through this workshop: http://processors.wiki.ti.com/index.php/F2837xD_Workshop

    Please go through the same.

    Regards,

    Gautam

  • Faizan,

    the CPU1 Flash application is trying to communicate with the CPU2 Boot ROM at that step, you would need to have CPU2 boot ROM running for CPU1 application to pass through that. Try the below

    1.> Load CPU1 and CPU2 flash applications

    2.> Reset and run CPU2 (CPU2 would be running CPU2 bootROM at this point)

    3.> Run CPU1 application

    4.> both the applications should be running.

     

    If you don't want to run CPU2 boot ROM; then try to build the FLASH_DEBUG configuration instead of FLASH_STANDALONE configuration. Right click on project; go to build configurations; select set active and choose the configuration you want to build.

     

    Best Regards

    Santosh

     

  • Hi Santosh,

    I tried running the project how you suggested. The problem is that when I press play on my CPU2 project, it does not wait in the CPU2 boot ROM, but starts executing code. I have set the build configuration of CPU1 to FLASH_STANDALONE and the configuration for CPU2 to FLASH.

    Are there any other changes that I have to make to either project.

    Thanks,

    Faizan

  • Faizan,

    did you reset CPU2 and hit RUN (play) button; after loading the CPU2 flash application?

    if you just load and run, the CCS run the application that is loaded; but if you load, reset and run then the boot ROM will be run.

     

    Usually when you are debugging flash applications with CCS connected then we suggest users to build the FLASH_DEBUG configuration that way they can load both CPU1 and CPU2 applications and run. Once your debug is completed you can build the FLASH_STAND_ALONE load and disconnect the CCS and simply power up the device and it should run the application in STAND_ALONE. The only difference between the FLASH_DEBUG and FLASH_STAND_ALONE configurations is the boot mode IPC sent from CPU1 application to CPU2 boot ROM.

     

    Best Regards

    Santosh

     

  • Hello Faizan,
    does the example run now in flash mode?
    I have the same problem. After resetting the CPU2 and then start CPU1 the CPU2 stucks in IDLE (adress 0x3fe44f of the ROM).

    Regards
    Holger

  • hello,

    I'm having the same issue.

    I have followed Santosh's suggestion of resetting the CPU2 after program has been loaded but when I run, it stops at 0x3FE44E and says (no symbols are defined for 0x3FE44E). When I press run again,  CPU2 is in "Running" mode.

    At the stage, I go to CPU1 and run the program. It is always stuck at IPCBootCPU2() because it's getting bootStatus as 3, which equals to C2_BOOTROM_BOOTSTS_C2TOC1_BOOT_CMD_ACK. From the comment in this function, it sounds like that CPU2 has already booted.

    Could someone please help me out what I should be doing to resolve this issue?

    Other concerns I have is, do I have to make sure that CPU1 and CPU2 do not share any part of memory except from the SHARERAM region I define?

    Currently I have RAMM0, RAMD0 blocks defined in both CPUs.

    Thanks,

    Ayaka

  • Hey everyone I have had similar problems after completing the workshop. I was able to get the program to run on Flash but now I have the issue of the program still being on the CPU when I try other projects.

    How do you clear the flash on the 28377D?

  • Hi Adam,

    Did you try to erase the Flash using CCS On-chip Flash GUI (Debug view -> Tools menu -> On-Chip Flash -> Erase Flash)?

    Thanks and regards,
    Vamsi
  • Akaya/Adam

    Please refer to this forum post, I'm discussing this over there.

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/477510/1720284#1720284

    Best Regards

    Santosh Athuru

  • Hi Santosh

    I am working on F28377D processor with TI-RTOS projects being loaded on to the dual core and I am running into this issue. I am wondering if this is a known issue. Below are the steps I am following.

    1) Load code on CPU-1 (I have the PLL settings to get 190 MHz clk).
    2) Load code on CPU-2

    The issue is, soon I load code on CPU-2 , CPU-1 PLL registers are being wiped out. Is this a known issue or is there some particular way to load code on dual core processor.

    I know the work around though to get away with this issue. But just curious to know if you also see the same issue at your end.

    Thanks and have a nice holiday.
  • Hi Ram,

    Please follow following step -

    1) Load code on CPU1 (do not run CPU1 code)

    2) Load code on CPU2 (do not run CPU2 code)

    3) Run CPU1 code

    4) Run CPU2 code.

    To load the code, flash plug-in may change the PLL settings hence one should run the application code only after loading the code on both CPU. 

    Also I would suggest to open a new thread for any new issue for quick response.

    Regards,

    Vivek Singh

  • Ram,

    Another thing to note:  If your CPU1 application configures PLL before reaching main() function (I noticed this in some RTOS applications), you should not let your CPU1 application code to execute to main() until CPU2 application gets loaded.  

    Check CCS Auto Run and Launch Options (Tools -> Debugger Options) and deselect 'Run to symbol main' option 'On a program load or restart'.

    Thanks and regards,
    Vamsi