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.

Go to Boot Rom From Flash - x28069

Other Parts Discussed in Thread: CONTROLSUITE

I'm currently using a x28069 and my goal is to load an application program to flash using SCI. GPIO37 is currently pulled down and GPIO34 is pulled up, so when device powers on, Boot ROM will go to SCI boot mode. From there, I use C2000 Serial Firmware Upgrader to move a flash kernel to RAM. Once that's completed, the flash kernel will then transfer the application code to flash. I've been able to do all of this successfully.

However, since firmware upgrades will be rare, I need to alter the above process such that there's a timeout somewhere and the DSP goes to a flash address. As far as I know, I can't alter the boot ROM since it's in a read-only memory range, so I can't add timeouts there. Timeouts in the flash kernel are not enough either since the flash kernel won't be loaded to RAM every time the x28069 is powered on.

Does anyone have any suggestions? Is it true that I can't modify boot ROM such that I can add timeouts? I was able to obtain the boot ROM code from controlSUITE, but my understanding is that this is just so that developers can better understand how the boot ROM works.

  • I forgot to mention that, as the title suggests, would there be a way to go to boot ROM if it's already in flash? Meaning, I could immediately boot to flash and then wait for a series of special characters to be received via SCI. If I do receive this, then I can go to boot ROM. If it doesn't receive those characters after a certain time period, the flash program would continue to execute. Would this work?

  • Hi Syed,

    It is true you cannot modify ROM.

    There are couple things you can do, and you suggested one of them.

    You can always boot to flash and then call SCI_Boot() in the boot ROM when needed. This is one option.

    The other is this. If you have room in your Flash, you can flash the SCI kernel into your device, and again always boot to flash. When you need to, you can copy the SCI flash kernel into RAM and run that from RAM in order to preform your flash update. Just be careful not to erase the kernel, or remember to re-program it. This solution would also skip the step of loading the kernel into RAM from the SCI boot loader.

    Hope this helps!
    sal
  • Sal

    Thanks for the response. I'm trying the first method right now. However, I have the following questions:

    1. Since the first method described above entails branching directly to SCI_Boot() function in ROM, do you know the address for it? I tried looking through the TI documentation, but I couldn't find it. I also tried looking through the disassembly, but I'm having a difficult time figuring out what's the exact starting address.

    2. Using this method, I take it that I don't need to worry about setting GPIO37 to 0 and GPIO34 to 1, right? Normally, if you want to go to SCI_Boot() on startup (without first going to flash) GPIO37 needs to be set to 0 and GPIO34 needs to be set to 1 (along with TRST being 0).  Since I'm going directly to flash and from there to the exact address where SCI_Boot() starts, It seems that those two pins don't need to be set to 0 and 1.

    The reason I ask is because my plan is this: when I enter flash I'll wait for a certain period of time to receive a special set of characters. If the board receives those characters, then it should go to SCI_Boot() in boot ROM. Otherwise, it should continue with the execution of the application code in flash. This whole process is dependent on GPIO37 and GPIO34 not being set to 0 and 1 respectively.

  • Hi Syed,

    1. You should be able to add the symbols to your project and be able to just call SCI_Boot(). There is more information on this I am sure in the forums and ti.com.

    2. That is correct. In this case you would not need to set the boot control pins.

    Regards,
    sal