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.

TMS320F28379D: Flash programming CPU2 with Serial Flash Programmer

Part Number: TMS320F28379D

Hello everyone,

I am opening a new thread in order to complete this one : https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/769123/tms320f28379d-serial-flash-programmer---loading-data-error.

Thanks to the section 7.3 of the SPRABV4D report (Revision D), i managed to make the SCI boot mode work with alternate GPIOs (28,29) and the blinky_dc_cpu1 program loaded successfully. But, i cannot say the same thing about serial flash programming the CPU2...

Can anyone complete the example of section 6.2.4 (of SPRABV4D report) by explaining the steps to follow in order to load program into CPU2 with Serial Flash Programmer ? 

Thanks for the time you will spend to answer my question.

Best regards,

Emy.

PS Note : What puzzles me the most is the "address to branch to" requested by the program when selecting the "Run CPU1 and Boot CPU2" command as showed in the following screenshot :

  • Emy, 

    The "address to branch to" is the address of the Flash Application for CPU1. It looks like the previous command was DFU CPU1, the entry address returned by DFU CPU1 is the address that the programmer is looking for when you select the "Run CPU1 and Boot CPU2" command. You can enter that address when prompted by the programmer. 

    On the CCS side, to be able to program CPU2 as well, you can do the following:

    1. Build F2837xD_sci_flash_kernels_cpu01 in CCS with SCI_BOOT_ALTERNATE as the argument to SCI_GetFunction() in F2837xD_sci_flash_kernels_cpu01.c.

    2. Build F2837xD_sci_flash_kernels_cpu02 in CCS.

    3. Set the controlCARD to SCI Boot Mode by setting SW1 Position 1 to 0, and SW1 Position 2 to 1.

    4. Connect to CPU1 in CCS. Click "Reset CPU" and set memory location 0xD00 to 0x815A.

    5. Connect to CPU2 in CCS. Click "Reset CPU" and hit "Resume". After the program hits ESTOP, Click "Resume" again.

    6. Click "Resume" for CPU1 in CCS.

    7. Run the following command in a command prompt (note that CPU1 needs the alternate kernel file):

    serial_flash_programmer.exe -d f2837xD -k f2837xD_fw_upgrade_example\F2837xD_sci_flash_kernels_cpu01_alt.txt -a f2837xD_fw_upgrade_example\blinky_dc_cpu01.txt -b 9600 -p COM<com port number> -m f2837xD_fw_upgrade_example\F2837xD_sci_flash_kernels_cpu02.txt -n f2837xD_fw_upgrade_example\blinky_dc_cpu02.txt -v

    8. Select Option 1 - DFU CPU1. This will allow blinky_dc_cpu01.txt to de downloaded to Flash.

    9. Select Option 13 - Run CPU1 and Boot CPU2 - and enter the entry point address. This will allow the CPU2 kernel to be downloaded to RAM

    10. Select Option 2 - DFU CPU2. This will allow blinky_dc_cpu02.txt to de downloaded to Flash.

    11. Select Option 15 - Run CPU2 - and enter the entry point address. 

    Thanks, 

    Anu

  • Dear Anu,

    Thank you for your answer.

    By strictly following your steps and using the flash kernels from the "f2837xD_fw_upgrade_example" directory, I have figured out that the reason it didn't work out in my previous tests was because i made a mistake during step 2 (i messed up F2837xD_sci_flash_kernels_cpu02 importation Grimacing).

    I just experienced one thing that might help people trying to reproduce this example :

    - Between step 3 and 4, I had to  "re-boot" my card by turning off and on the power switch every time I wanted to execute serial_flash_programmer.exe. If I didn't, the program used to hang at "Attempting autobaud to send function message" (the CCS CPU reset wasn't enough most of the times).

    Anyway, your answer helped me to find out where my mistake was.

    Best Regards,

    Emy